[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:
Hermes committed 2026-10-07 08:48:45 -07:00
1 parent 026437035d
commit da4d1ffd01
2 files changed
+35 -1

No files matched your search

+34
View File
@@ -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/),
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]
### Production-Grade Hardening Sprint (2026-08-12)
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "dashcaddy-api",
"version": "1.16.0",
"version": "1.17.0",
"description": "DashCaddy API server - Dashboard backend for Docker, Caddy & DNS management",
"main": "server.js",
"engines": {