kylon-cli 0.7.5-next.1059 → 0.7.5-next.1070

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/README.md CHANGED
@@ -427,17 +427,16 @@ currently published target plus a 0-100% stable per-computer rollout for
427
427
  automatic updates. A missing, disabled, mismatched, or 0% policy sends no
428
428
  automatic request; manual upgrades still resolve the dist-tag normally.
429
429
 
430
- Every merge to `develop` publishes a prerelease to the `next` tag
431
- (`.github/workflows/cli-publish.yml`). A production deployment dispatched from
432
- `main` automatically invokes the same workflow in stable mode and publishes the
433
- exact `packages/cli/package.json` version to `latest`; it is idempotent when that
434
- version already exists. A CLI change intended for production must therefore bump
435
- the package version before the production deploy, or the stable publish will
436
- correctly no-op and `latest` will remain on the existing build.
437
-
438
- A matching `kylon-cli-vX.Y.Z` tag is an alternative supported stable-release
439
- trigger, not a required extra step after a production deploy. Do not run
440
- `npm publish` ad hoc: both paths use the CI workflow and its OIDC publisher.
430
+ Qualifying merges to `develop` publish prereleases to `next`
431
+ (`.github/workflows/cli-publish.yml`). Stable publication is optional: request
432
+ `publish_cli=true` on a production Deploy from `main`, or label its merged main
433
+ PR `release:cli`. After the Deploy finishes successfully, a separate workflow
434
+ runs fresh full CLI qualification and publishes the exact package version to
435
+ `latest`. A standalone stable dispatch runs from current `main` and requires
436
+ already-deployed services. Bump the package version before a stable release.
437
+
438
+ Stable tags are release records, not publication triggers. Do not run
439
+ `npm publish` ad hoc: both stable entry points use CI and its OIDC publisher.
441
440
  Development installs `@next` and production installs `@latest`, so each
442
441
  environment tracks its own release train.
443
442
 
@@ -774,6 +773,31 @@ instead of waiting out inactivity timeouts and heartbeat intervals.
774
773
  without the advertisement fails over-budget assignments with a named error
775
774
  instead of receiving flags it would misparse.
776
775
 
776
+ ## macOS startup logs and external config volumes
777
+
778
+ The macOS service writes startup stdout and stderr to
779
+ `~/Library/Logs/KylonGateway/launchd.stdout.log` and `launchd.stderr.log`.
780
+ These paths are independent of `~/.kylon` and `XDG_CONFIG_HOME`: launchd must
781
+ open its output files before Node can request access to a removable volume.
782
+ Install, upgrade, repair, and desktop first-time service creation use the same
783
+ paths and prepare the log directory with mode `0700` and files with `0600`.
784
+ Oversized startup files rotate at service installation/repair (10 MiB, three
785
+ files per stream). Existing daemon logs are retained at `<configDir>/gateway.log`.
786
+ Node and provider tools may still need macOS permission to access external data.
787
+
788
+ `kylon gateway status` shows both locations, including when the daemon could
789
+ not start. Its JSON keeps `daemon.log_path` for compatibility and adds
790
+ `daemon.startup_log_paths` on macOS. Upgrade failure guidance reads recent
791
+ errors from both daemon and startup stderr logs.
792
+
793
+ `kylon diagnose` and its upload collect both kinds of logs. The same collector
794
+ serves server-requested error diagnostics; self-diagnosis also sees the current
795
+ startup tails. Raw startup output is redacted at collection time, leaf symlinks
796
+ are not followed, and startup tails are capped at 1 MiB per file (256 KiB for a
797
+ scoped error bundle). Missing logs do not prevent collecting other evidence.
798
+ Full bundles keep three startup files per stream; scoped bundles keep two.
799
+ Linux and Windows retain their existing log paths.
800
+
777
801
  ## Remote diagnostics
778
802
 
779
803
  The CLI reports to the server through one channel (`src/lib/telemetry.ts`):
@@ -1094,9 +1118,9 @@ API server is the security boundary.
1094
1118
  The CLI ships via **npm dist-tags** — there is no server-side version policy.
1095
1119
  `cli-verify.yml` validates on PRs and pushes; `cli-publish.yml` publishes via
1096
1120
  OIDC (no token): a prerelease to the `next` tag on every qualifying merge to
1097
- `develop`, and the package version to `latest` when the production deploy runs
1098
- from `main`. A matching `kylon-cli-vX.Y.Z` tag can also publish that stable
1099
- version. Development installs `@next`; production installs `@latest`.
1121
+ `develop`, and an optionally requested stable release from current `main` to
1122
+ `latest`, after the web/server deploy and fresh complete CLI qualification.
1123
+ Development installs `@next`; production installs `@latest`.
1100
1124
 
1101
1125
  ### Versioning
1102
1126
 
@@ -1111,30 +1135,26 @@ Use explicit semver in `packages/cli/package.json`:
1111
1135
  Prerelease builds are versioned `<package-version>-next.<run>` automatically by
1112
1136
  `cli-publish.yml`. Stable mode publishes the exact package version and skips
1113
1137
  idempotently if npm already has it. Bump `packages/cli/package.json` whenever a
1114
- new production CLI build must be published; otherwise the production deploy
1115
- will intentionally leave `latest` unchanged.
1138
+ new production CLI build must be published. Service deployment alone leaves
1139
+ `latest` unchanged.
1116
1140
 
1117
1141
  ### Publishing
1118
1142
 
1119
1143
  - **Prerelease (automatic):** every merge to `develop` touching the CLI publishes
1120
1144
  `<package-version>-next.<run>` to the `next` tag via `cli-publish.yml` (OIDC, no
1121
1145
  `NPM_TOKEN`). dev tracks this tag, so dev always dogfoods the newest build.
1122
- - **Stable (automatic with a production deploy):** a production deployment
1123
- dispatched from `main` calls `cli-publish.yml` in stable mode. It publishes
1124
- the package version only when that exact version is absent from npm. CLI
1125
- changes therefore need a package-version bump before the production deploy.
1126
- - **Stable tag (alternative):** after bumping the package version, a matching
1127
- tag on `main` invokes the same stable workflow directly:
1128
-
1129
- ```bash
1130
- git pull
1131
- git tag kylon-cli-v0.1.1
1132
- git push origin kylon-cli-v0.1.1 # cli-publish.yml publishes it to `latest`
1133
- npm view kylon-cli dist-tags # verify
1134
- ```
1135
-
1136
- Do not `npm publish` ad hoc: production deploys and release tags both go through
1137
- the workflow so the OIDC provenance path is exercised end to end.
1146
+ - **Stable after services (optional):** set `publish_cli=true` on a production
1147
+ `deploy.yml` dispatch from `main`, or add `release:cli` to the merged main PR.
1148
+ `cli-post-deploy.yml` waits for that Deploy's successful completion and starts
1149
+ the independent test/verify/publish task. Default service deploys skip it.
1150
+ - **Stable standalone:** dispatch `cli-publish.yml` from `main` with
1151
+ `release_channel=stable`. It verifies the current main commit came through a merged main
1152
+ PR and that its service changes have deployed. CLI-only changes can follow
1153
+ the already-deployed ancestor. Both stable paths run full provider E2E and
1154
+ platform verification; prior PR CI evidence does not replace fresh proof.
1155
+
1156
+ Do not `npm publish` ad hoc: use the stable workflow and its OIDC provenance.
1157
+ Pushing a version tag alone does not publish.
1138
1158
 
1139
1159
  ### Rollback
1140
1160
 
@@ -1153,6 +1173,47 @@ direction guard keeps a newer installed bundle over an older invoked copy, and
1153
1173
  `kylon upgrade` reports such a host as already current — so the way back for
1154
1174
  those hosts is publishing a fixed, higher version. Do not `npm unpublish`.
1155
1175
 
1176
+ ### Server compatibility without a CLI release
1177
+
1178
+ Service-only releases do not run the complete provider E2E matrix. They keep
1179
+ two cheaper checks in CI:
1180
+
1181
+ - `cli-service-compat-contract.test.ts` sends independently versioned 0.7.4
1182
+ request templates through the candidate API's real computer-key auth,
1183
+ connection fence, task leases and reply persistence. The templates in
1184
+ `scripts/ci/contracts/kylon-0.7.4.json` intentionally omit newer optional
1185
+ capability fields. Keep this compatibility floor fixed; a new required field
1186
+ must remain compatible with it rather than updating both sides of the test.
1187
+ - For backend, shared, CLI, root build or unclassified changes, the reusable
1188
+ `CLI service compatibility` workflow downloads the current production stable
1189
+ CLI, checks both public installer versions against npm `latest`, freezes its
1190
+ exact version/integrity, and runs its foreground daemon against this commit's
1191
+ local API with isolated PostgreSQL/Redis. A deterministic Claude process
1192
+ supplies tool/text/result events without model calls or provider credentials.
1193
+ The workflow verifies completed task/message persistence and uploads the
1194
+ candidate SHA, package digest and executed-test report. Missing or skipped
1195
+ cases fail the existing required `Tests` context. Display-only web/admin,
1196
+ desktop/mobile, documentation and Grafana configuration changes skip this
1197
+ extra smoke; unknown paths and missing diff history run it conservatively.
1198
+
1199
+ The contract test also participates in normal affected-code Vitest selection.
1200
+ The smoke is excluded from that suite to avoid downloading/running a second
1201
+ client for every unrelated test run. Run both locally, **sequentially** (database
1202
+ preparation rebuilds the worktree's isolated schema):
1203
+
1204
+ ```sh
1205
+ node scripts/ci/prepare-cli-service-compat.mjs /tmp/cli-compat-stable
1206
+ CLI_COMPAT_PACKAGE_DIR=/tmp/cli-compat-stable bash scripts/test-local.sh --full -- --config scripts/ci/vitest-cli-service-compat.config.ts
1207
+ ```
1208
+
1209
+ This is a pre-merge protocol gate, not production/browser login evidence or
1210
+ real-provider E2E. Direct hotfix/patch deployment outside the normal PR gate
1211
+ must run `cli-service-compat.yml` manually on the target ref and check its SHA;
1212
+ the workflow neither publishes nor deploys. Major protocol changes can still
1213
+ request `external-agent:full`. Stable CLI publication always runs fresh full
1214
+ provider/platform qualification after the service deployment, independently
1215
+ of these cheap checks.
1216
+
1156
1217
  ### Gemini CLI
1157
1218
 
1158
1219
  Install stable Gemini CLI 0.58.0 or newer with
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.7.5-next.1059",
3
- "fingerprint": "68952b8b82bc6d300aec1f9287cf1cd02f315e085c1aba83a434ec54f22ed1c9",
4
- "source_commit": "437de562152fea4edfac4b68c9be73cc10d19aab"
2
+ "version": "0.7.5-next.1070",
3
+ "fingerprint": "1668173106e535e96464f7848fcb01598db7b56e181bcb2ef4b7172e95c1fbfe",
4
+ "source_commit": "426e8cfe32c12574e2e083adf5118b4066dbc125"
5
5
  }