# Changelog All notable MCPlica changes are recorded here. The format follows Keep a Changelog, and release identities follow Semantic Versioning. Unreleased entries describe repository changes only; a version is not published until its immutable tag and release workflow complete. ## [Unreleased] ## [1.0.0-rc.2] - 2026-09-26 ### Changed - Integrated structured, rotating application logs, worker registration recovery, protected login destinations, and asynchronous build failure feedback. - Preserved canonicalization isolation across cancelled requests, mutable source roles, byte limits, and callers; bounded cached results and retained safe database diagnostics without private rows. - Excluded absent retrieval embeddings from AI usage counts and verified failed-run SQL NULL storage. - Updated the container and application dependencies, explicitly installed Corepack for Node 26, and rebuilt the existing MinIO release from verified official source after registry removal. - Added top margin to the project setup wizard's inline error alerts so they no longer visually merge with the content above them, most noticeably the info cards on the **Start build** step. - Paged the sources list over distinct sources rather than raw version rows, so a superseded source version can no longer land on a different page than its latest version and render as an orphaned top-level entry. - Retried a canonicalization request as the new leader instead of failing it when the concurrent in-flight request it was coalesced onto was cancelled by an unrelated caller, preventing one cancelled poll from failing every other request waiting on the same result. - Replaced the native `window.confirm()` prompt on the Sources tab with the same in-app dialog already used for project deletion, so source deletion confirmation is consistent across the site. - Raised a dedicated `ExecutionOwnershipError` when a build's execution lease is stale, and skipped the failure-audit write when that loss is itself the error being recorded, so an expired lease no longer masks the real failure behind a doomed ownership recheck. - Declared `JSONB(none_as_null=True)` on the AI run's response/usage/cost columns so a `None` value is stored as true SQL `NULL`, fixing an intermittent `IntegrityError` on `ck_build_ai_runs_outcome` when an AI operation genuinely failed, and expanded diagnostic logging to surface exception types and safe constraint identifiers without exposing private row values. - Resolved path-level OpenAPI servers before checking whether the document has a usable server URL, so a spec declaring servers only under a path item (valid per OpenAPI 3.1) no longer fails at server selection before the parser's existing path-level handling ever runs. - Rejected OpenAPI and API Inventory documents whose operations reference an undefined security scheme at parse time instead of admitting them silently. - Persisted the configured embedding model on a document index generation instead of the model name a provider's response happened to echo back, so a completed generation's `embedding_model` matches what was actually requested. - Added a per-model AI usage and cost counter under **Settings > Usage**, showing call count, total tokens, and total cost per model from the build AI-run history. ## [1.0.0-rc.1] - 2026-09-04 ### Changed - Moved canonical repository and OCI source metadata to the `waqoor/MCPlica` organization namespace, added the owner-operated public-prerelease security/settings ledger, and made release asset publication compatible with GitHub immutable releases. - Recorded the current single-maintainer governance exception: exact automated release gates remain mandatory, while an explicitly authorized founder self-merge is reported truthfully instead of being labeled as independent review. - Updated the unprivileged Nginx image to `1.31.5-alpine3.24-slim` and made nested source-configuration response models validate domain records through Pydantic attribute access. - Preserved account timestamps in authenticated identities so `GET /api/v1/auth/me` returns the same `created_at`, `updated_at`, and `last_login_at` values as the user record. - Replaced the organization-license-dependent Gitleaks Action with an offline, digest-pinned Gitleaks CLI history scan so the required `secrets` job remains executable after transfer. - Migrated the frontend toolchain to pnpm 11.25.0 and its explicit `allowBuilds` configuration, and made CI audit the complete pnpm lockfile through a digest-pinned OSV-Scanner instead of the registry's retired legacy endpoint. - Added an admin-only, route-backed **Settings > Providers** workspace for write-only encrypted OpenRouter key rotation, live connection testing, and distinct credential/reachability/build readiness states. - Corrected the public OpenRouter API default and decoded-response header handling so compressed model-catalog responses cannot be decompressed twice and falsely degrade the control plane. - Updated the official MCP Python SDK to 2.1.1, made `2026-07-28` the candidate-validation protocol revision, and retained explicit legacy negotiation coverage on the same runtime. - Refreshed compatible container, frontend, Python, and GitHub Actions dependencies while preserving the Node 24, Python 3.13, and single-host service compatibility boundaries. - Made each cleanup dispatch use one eligibility snapshot, preventing a failed target from consuming multiple retry attempts in the same worker cycle when its backoff is short or the database is under load. - Bound the post-build wizard transition directly to the created build so an obsolete unbound journey refetch cannot race the URL back to the start-build step. - Made hosted Playwright retries diagnostic only: any flaky retry now fails CI, with regression coverage that rejects post-build journey requests lacking the created build identity. - Restricted repository Actions to the recursively audited full-SHA direct/transitive action closure, enabled Dependabot vulnerability alerts and automated fixes, and documented the exact unavailable private-platform security gates without treating local scans as substitutes. - Updated the backend and runtime development constraint to pytest 9.1.1 for GHSA-6w46-j5rx-g56g/CVE-2025-71176, and expanded both frozen Python advisory audits to include every optional development dependency rather than auditing only the production graph. ### Added - Self-hosted FastAPI control plane, React administration UI, PostgreSQL persistence, Redis/RQ workers, Milvus document retrieval, and OpenRouter-backed build-time analysis. - Deterministic OpenAPI 3.0/3.1 and API Inventory compilation into the shared `mcp-manifest/v1` contract, with source provenance, exact validation, immutable build evidence, export, diff, rebuild, and operation exclusion workflows. - Reusable isolated MCP Streamable HTTP runtimes with static bearer or external OIDC inbound authentication, project-scoped upstream credentials, bounded HTTP execution, and dynamic Traefik routing. - Health-before-switch deployment, stop/restart/redeploy, immutable-build rollback, durable command execution, fenced workers, retention cleanup, and recovery-safe lifecycle handling. - Canonical Docker Compose development and production configurations, migration/init jobs, operator documentation, CI, security scanning, SBOM creation, checksums, digest signing, and provenance-aware release automation. ### Security - Enforced cookie/CSRF/role authorization, encrypted write-only credentials, bounded uploads and external responses, SSRF/DNS/redirect controls, safe logging, non-root/read-only containers, resource limits, exact manifest/secret digests, and isolated runtime networks. - Added frozen dependency locks, dependency and secret scans, pre-publication image scans, source/image SBOMs, Cosign verification, and immutable tag/digest refusal checks. ### Changed - Established root `VERSION` as the `1.0.0-rc.1` authority and synchronized package, API, frontend, runtime, Compose, image-label, generated-contract, fixture, lockfile, and release metadata. - Advanced the single Alembic migration line through `0025`, including legacy constraint normalization, current-source/build identity, runtime/cleanup execution fencing, deployment intent, and index-generation ownership. ### Known limitations - The supported production topology is a single Docker Compose host; high availability, orchestrator-specific deployment, managed backup automation, and multi-host runtime scheduling are not included. - OpenRouter availability/model access, public DNS/TLS, host hardening, external OIDC providers, registry permissions, and backup/restore RPO/RTO remain operator-owned production checks. - See [the v1.0.0-rc.1 release notes](docs/releases/v1.0.0-rc.1.md) for the complete compatibility, migration, and evidence boundary. [Unreleased]: https://github.com/waqoor/MCPlica/compare/v1.0.0-rc.1...HEAD [1.0.0-rc.1]: https://github.com/waqoor/MCPlica/releases/tag/v1.0.0-rc.1