Repository navigation
Releases: pablofelipe/SmartCondo
Release list
v0.3.1
Evidence and reliability release. One real bug fixed, plus a multi-tenancy verification pass on top of the already-shipped authorization model.
Highlights
- Fixed an N+1 in the GraphQL vehicle query — requesting the
userfield on a vehicle list re-queried its owner once per row instead of reusing the row already joined by the underlying query. Measured before fixing: 202 SQL executions and ~150-290ms for a 200-vehicle result; after: 2 executions, ~35ms (matching the no-userbaseline). Covered by a new regression test that asserts the already-loaded owner is reused by reference, not just that the returned data is correct.
Under the hood
- ADR-0012 documents how tenant isolation is actually enforced: a per-call-site check (
ResourceAuthorization.IsAuthorizedInTenant) comparing the actor's tenant — resolved fresh from the database every request, never from the JWT — against each resource's tenant. No database-level row-level security or global query filter exists; the guarantee is a code discipline, not a structural one, and that trade-off is now an explicit, revisitable decision instead of an implicit assumption. - New concurrency test (
TenantIsolationConcurrencyTest) proves two tenants querying at the same time never see each other's data, against a real PostgreSQL instance. No test in the suite had exercised this before. - OWASP ZAP baseline scan run against both REST and GraphQL, results committed (
docs/security/): zero findings above medium risk on either surface; the only findings are missing security headers (CSP, X-Frame-Options, etc.). - Documentation writing standard added (
docs/standards/) and applied to tighten prose across the README and core docs.
Compatibility
Pre-1.0 release — the public API is not yet declared stable (see CHANGELOG.md). No breaking changes in this release; none are expected before the next minor.
v0.3.0
Frontend architecture and reliability release. No backend API changes in
this cycle — the REST/GraphQL surface is unchanged since v0.2.0.
Highlights
- Three real bugs fixed, found while reworking the API call layer: a
silent "success" on a failed condominium delete, a corrupted dashboard
state on a non-OK response, and a loading state inuseUserTypesthat
could hang indefinitely. - WebSocket notifications reconnect reliably again — a reconnect churn
bug (an unstable callback dependency re-subscribing the message handler
on every render) is fixed. - No more flash-of-logged-out on page load —
ProtectedRoutenow
trustsAuthContextinstead of readinglocalStoragedirectly. - Removed a runtime-config and login-response leak via stray
console.logcalls.
Under the hood
- All direct
fetch()calls in pages, forms and hooks now go through
dedicated service modules (authService,dashboardService,
condominiumService,userService,towerService), consistent with
the pattern already used elsewhere in the frontend. - The WebSocket notification path (
useWebSocket,NotificationHandler,
notifications) is now TypeScript. UserFormwas split into presentational sub-components
(UserLoginFields,UserProfileFields,UserLocationFields);
orchestration logic is unchanged.- New frontend test coverage for the WebSocket hook, notification
utilities, the API client andProtectedRoute.
Compatibility
Pre-1.0 release — the public API is not yet declared stable (see
CHANGELOG.md). No breaking changes in this release; none are expected
before the next minor.
v0.2.0
Ships the authorization architecture evolution (DDD ubiquitous language and shared kernel for Capability/Scope/Relationship, tenant scope enforcement, ownership-based authorization, invariant catalog — ADRs 0001–0010), platform hardening (structured logging with request correlation IDs, liveness/readiness health checks, a working rate limiter on login, constant-time comparison for the migration auth key, WebSocket handshake authentication, GraphQL exception detail guarding), and the container-first cloud-agnostic deployment (ADR-0011): a native in-process WebSocket notification path replaces AWS API Gateway as the default, SMTP replaces AWS SES, and the same Docker image is now provisioned by Terraform on both Azure Container Apps and AWS ECS/Fargate, validated end-to-end on both clouds.
Also unifies the API's error response contract on {message}, removes a disconnected RSA credential-encryption endpoint with zero real consumers, fixes an N+1 query/save pattern in the notification broadcast path, and reconciles documentation (README, architecture overview, diagrams) against the actual deployment architecture — plus a full pass translating the frontend's UI strings, logs and comments from Portuguese to English.
v0.1.0 — First public milestone
ASP.NET Core 8 REST + GraphQL (HotChocolate) API, React 19 + TypeScript PWA, hierarchical role-based permissions, PostgreSQL/EF Core, WebSocket notifications, container or AWS Lambda hosting, CI pipeline.