[pending-judge] release: v1.17.0 - version bump 1.16.0 -> 1.17.0 + changelog for the integrated catalog pipeline (DC-160, DC-CATALOG-3)
This commit is contained in:
2 files changed
+35
-1
No files matched your search
@@ -5,6 +5,40 @@ All notable changes to DashCaddy are documented in this file.
|
|||||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
||||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||||
|
|
||||||
|
## [1.17.0] - 2026-10-07
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- **DC-CATALOG-3: catalog deploys route through the shipdeck bridge.** The App Selector sends
|
||||||
|
`subdomain` to `POST /api/deploys/catalog`, which validates the label and forwards it to the
|
||||||
|
bridge; the route reads the bridge journal for service state instead of spawning a subprocess per
|
||||||
|
service.
|
||||||
|
- **Composition-root e2e suite.** `__tests__/e2e-node/composition-root.e2e.test.js` boots the real
|
||||||
|
app via `createApp()`, mints a JWT, and probes each mounted route against a nonexistent control
|
||||||
|
path in the identical request shape, so a real mount is distinguishable from an unknown route.
|
||||||
|
- **Shield route committed.** `routes/shield.js` (until now present only on the production host) is
|
||||||
|
tracked in git, mounted by `src/app.js`, and covered by `__tests__/shield-dc.routes.test.js`.
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- **DC-160: catalog detail returned empty template metadata.** `routes/catalog.js` reads
|
||||||
|
`app.docker.*` from the catalog template instead of the hand-rolled category map.
|
||||||
|
- **Deploy audit contract.** The catalog-deploy route calls
|
||||||
|
`auditLogger.log({action,resource,details,outcome,ip})` fire-and-forget — the same dependency
|
||||||
|
shape `src/app.js` injects — and the route test constructs that shape, so a divergence fails.
|
||||||
|
- **Bridge response handling is total.** Any non-plain-object body (`null`, arrays, empty) is
|
||||||
|
coerced into the same failure shape as a non-JSON body, so no `body.ok` dereference can 500 or
|
||||||
|
report a false success.
|
||||||
|
- **Subdomain labels.** Validation rejects leading and trailing hyphens and is length-bounded
|
||||||
|
(1-63 characters); the rejection table in the route suite covers both edges.
|
||||||
|
- **Boot timeout kills its child, exercised.** The e2e boot timeout is parameterized and a real test
|
||||||
|
drives it against a child that never reports readiness, asserting the killed child's `SIGKILL`.
|
||||||
|
- **Test port allocation.** The e2e child binds port 0 and reports the OS-assigned port, removing
|
||||||
|
the release-and-rebind race in the old `freePort` helper.
|
||||||
|
|
||||||
|
### Notes
|
||||||
|
- Pre-existing and unrelated: `__tests__/billing/invoice.test.js` fails identically at the release
|
||||||
|
base (`1fa5ba8`) because it bundles a stale `pdf.js 1.10.100`; the failing set is measured, not
|
||||||
|
assumed, and recorded in the release evidence.
|
||||||
|
|
||||||
## [Unreleased]
|
## [Unreleased]
|
||||||
|
|
||||||
### Production-Grade Hardening Sprint (2026-08-12)
|
### Production-Grade Hardening Sprint (2026-08-12)
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "dashcaddy-api",
|
"name": "dashcaddy-api",
|
||||||
"version": "1.16.0",
|
"version": "1.17.0",
|
||||||
"description": "DashCaddy API server - Dashboard backend for Docker, Caddy & DNS management",
|
"description": "DashCaddy API server - Dashboard backend for Docker, Caddy & DNS management",
|
||||||
"main": "server.js",
|
"main": "server.js",
|
||||||
"engines": {
|
"engines": {
|
||||||
|
|||||||
Reference in new issue
Block a user