Skip to main content

AUSUS v1.0.1 — starter quickstart hotfix

Patch release fixing a P0 reproducible defect in the documented composer create-project ausus/starter myappcomposer bootcomposer serve quickstart on the v1.0.0 line. No runtime, API, wire, schemaVersion, or SemVer-breaking change. SemVer patch strict: pure additive require dependency update on ausus/starter, version alignment across the sibling packages, and a permanent anti-regression gate.

Closes adonko3xBitters/starter#1.

Fixed

The starter's bin/server.php imports Nyholm\Psr7\Factory\Psr17Factory and Nyholm\Psr7Server\ServerRequestCreator, but ausus/starter v1.0.0's composer.json declared neither nyholm/psr7 nor nyholm/psr7-server in require. ausus/api-http only requires the PSR-7 interfaces (psr/http-message, psr/http-factory, psr/http-server-handler, psr/http-server-middleware); no concrete PSR-7 implementation reaches vendor/ transitively. The monorepo dev and CI never surfaced the gap because the monorepo's root composer.json declares both Nyholm packages explicitly, masking the defect.

Symptom on a clean composer create-project ausus/starter myapp install of v1.0.0:

Fatal error: Class "Nyholm\Psr7\Factory\Psr17Factory" not found
in /tmp/myapp/bin/server.php:61

Fix: packages/starter/composer.json require block adds nyholm/psr7: ^1.8 + nyholm/psr7-server: ^1.1. Both are additive, pull no further transitive runtime change, and resolve cleanly with Composer's default stability flags.

Anti-regression

scripts/clean-room-install-test.sh Gate F now boots the scaffolded bin/server.php on a random port and asserts that GET /api/_health returns 200 with the JSON envelope {"ok": true, "service": "ausus/api-http", "graphHash": …}. The gate is wired into scripts/release-gate.sh Step 9 (live mode) and runs during every PR CI matrix release-gate job.

The gate self-disables with a visible notice on pre-fix scaffolds (the v1.0.0 line on Packagist, where nyholm/psr7 is absent from the scaffold) so historical replay-against-tag against the v1.0.0 artefact stays interpretable. Once v1.0.1 is the floor on Packagist, the skip path is unreachable from any new clean-room install.

Installation

The canonical install command is unchanged:

composer create-project ausus/starter myapp
cd myapp
composer boot
composer serve # → http://localhost:8000

Existing v1.0.0 consumers on ^1.0 receive v1.0.1 automatically on composer update. No constraint change is required.

Runtime — unchanged from v1.0.0

SurfaceStatus vs v1.0.0
Ausus\Filter / Ausus\Sort / Ausus\PagedRepositorybit-identical
ProjectionRenderer::render() signaturebit-identical
Application::renderProjection() facadebit-identical
SqliteRepository::findPaged() SQL translationbit-identical
Router ?limit / ?offset / ?filter.* / ?sort= parsingbit-identical
data.pagination shape + filters[] / sort[] echobit-identical
schemaVersion1.2.0 (unchanged)
@ausus/renderer-react peerSchemaVersion^1.0.0 (unchanged)
Bundle shapeidentical (21 files, 16.9 kB)

Released artifacts

PackageVersion
ausus/kernelv1.0.1
ausus/runtime-defaultv1.0.1
ausus/persistence-sqlv1.0.1
ausus/api-httpv1.0.1
ausus/standard-stackv1.0.1
ausus/starterv1.0.1
ausus/tenancy-rowv1.0.1 (name-reserved)
ausus/audit-databasev1.0.1 (name-reserved)
ausus/auth-bridgev1.0.1 (name-reserved)
ausus/presentation-defaultv1.0.1 (name-reserved)
@ausus/renderer-react1.0.1 (npm @latest)