@tikoci/quickchr 0.4.4 → 0.4.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/DESIGN.md CHANGED
@@ -154,10 +154,11 @@ with a layered design:
154
154
  dispatches. `test-filter` narrows; `run-examples` defaults ON. Each runner boots its
155
155
  native CHR arch — `detectAccel()` picks KVM/HVF/TCG. Agents dispatch this to ground
156
156
  platform hypotheses without waiting for a PR cycle.
157
- - **`release.yml`** — one-click release: freshness gate (no suite re-run — main is kept
158
- continuously release-able) + non-empty CHANGELOG `[Unreleased]` →
159
- `scripts/release-prep.ts` bump/rollover → tag + GitHub Release + `npm publish
160
- --provenance` (odd minor → `next`, even → `latest`).
157
+ - **`release.yml`** — one-click publish from committed release state: freshness gate
158
+ (no suite re-run — main is kept continuously release-able) + `package.json` version
159
+ with a matching non-empty CHANGELOG section → tag + GitHub Release + `npm publish
160
+ --provenance` (odd minor → `next`, even → `latest`). CI never bumps versions or pushes
161
+ to protected `main`.
161
162
  - **`ros-versions.yml`** — daily: new RouterOS versions (per channel) with no linux-x86
162
163
  record in `ci-data/tested-versions.json` ride the `routeros-targets` matrix of a
163
164
  single integration dispatch.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tikoci/quickchr",
3
- "version": "0.4.4",
3
+ "version": "0.4.5",
4
4
  "description": "CLI and library to download, launch, and manage MikroTik CHR virtual machines via QEMU",
5
5
  "module": "src/index.ts",
6
6
  "main": "src/index.ts",
@@ -286,7 +286,14 @@ function createInstance(state: MachineState): ChrInstance {
286
286
  authObj: { username: string; password?: string; basic?: string; header?: string },
287
287
  urlSuffix = "",
288
288
  ): ServiceEndpoint => {
289
- const chosen = securePM ?? plainPM;
289
+ // Plain-first (#95): on a stock CHR the TLS services are not dialable —
290
+ // `www-ssl` is disabled and `api-ssl` is certificate-less (TLS alert 40) —
291
+ // so preferring the secure forward advertised dead endpoints. Prefer the
292
+ // plain forward for each service; the secure forward remains the fallback
293
+ // so excluded plain ports still resolve when a secure forward is available
294
+ // (with `tls: true`). Secure preference can return once boot provisioning
295
+ // installs a certificate and enables www-ssl.
296
+ const chosen = plainPM ?? securePM;
290
297
  if (!chosen) {
291
298
  return { available: false, unavailableReason: `no forwarded port for ${serviceLabel}` };
292
299
  }
@@ -306,11 +313,10 @@ function createInstance(state: MachineState): ChrInstance {
306
313
  return { available: true, ...echo, auth: authObj };
307
314
  };
308
315
 
309
- // TLS preference is new logic (no pre-existing REST-URL preference to "keep" —
310
- // see docs/centrs-interface.md's TLS section): prefer the secure port when its
311
- // forward exists, fall back to plain, `available:false` only if neither does.
312
- // This also closes a latent bug where excluding "http" while keeping "https"
313
- // left restUrl pointing at a port that doesn't exist.
316
+ // Preference order lives in buildHttpService (plain-first, #95); this also
317
+ // keeps the excludePorts fix: excluding "http" while keeping "https" now
318
+ // resolves rest-api onto the surviving secure port instead of a port that
319
+ // doesn't exist.
314
320
  const restApi = buildHttpService(
315
321
  state.ports.https,
316
322
  state.ports.http,