Commit Graph
48 Commits
Author SHA1 Message Date
chick c57dc81e42 fix: finish cross-platform test parity while keeping POSIX deployment semantics
- cutover readState: enforce 0600 mode bits only on POSIX (Windows ACLs
  govern access; chmod is a no-op there)
- backup activation: skip the read-only-handle fsync on win32; the staged
  rename-over-open-WAL tests keep running on the POSIX deployment targets
- test-fixtures: normalize fixture paths to POSIX separators before
  comparing with manifest entries
2026-09-07 01:18:44 +08:00
chick 4f42a6f835 fix: make cutover restart argv upgrade-safe and tests platform-honest
- cutover-orchestrator: restart via 'node --import tsx' (matching install.sh)
  instead of a hardcoded .pnpm/tsx@4.22.4 loader path that breaks on tsx bumps
- production-gateway: use process.execPath for the legacy-start fixture;
  POSIX-only 0600 mode assertion now win32-guarded
- cli-runtime + installer suites: skip where they require POSIX-only
  process-group SIGTERM, lsof, or /bin/sh
- fixture-safety: fall back to config.example.json when config.json is absent
  on a fresh clone
2026-09-07 01:09:49 +08:00
chick eed134a25c fix: honor underscore-unused convention and make durability fsyncs cross-platform
- eslint: respect the repo's existing _-prefix convention for unused vars
- phase-one-blockers: derive projectRoot via import.meta.dirname so Windows
  checkouts stop producing C:\C:\... paths
- backup/release-evidence/cutover-orchestrator: skip POSIX-only directory
  fsync on win32 and fsync read-only handles through a writable handle
2026-09-07 01:07:16 +08:00
chick 635527dd26 feat(api): integrate identity, notification scope and connection settings into control plane
- Wire identity, metrics and update services into the assembled API.

- Add connection authorization modes and scoped console authorization.

- Preserve notification group IDs for filtered delivery.

- Extend maintenance, backup, resource and module flows with runtime metadata and upstream safety.
2026-09-07 00:45:18 +08:00
chick 7168e9dba2 feat(api): add online console update with pre-install backup
- Add console update planning, download validation and staged installation.

- Create a component backup before applying online updates.

- Expose controlled update routes from the production control plane.
2026-09-07 00:44:58 +08:00
chick 961eb928c4 feat(api): add device identity guard and Prometheus metrics
- Persist device identity observations and expose fleet identity summaries.

- Block device control actions when identity verification fails.

- Add metrics collection and a Prometheus scrape endpoint.
2026-09-07 00:44:51 +08:00
chick 8406f14469 feat(contracts,automation): add multi-group scopes, SMS macros and operator registry
- Allow scheduled operations to resolve multiple device groups.

- Add reusable SMS time and random-value macros.

- Add China operator PLMN metadata shared by API and UI.
2026-09-07 00:44:33 +08:00
chick 8b7df8cb65 fix(instances): release the hub binding before forgetting a node
Deletion now follows the published contract: prepare returns the one-time
token and the console spends it on DELETE /api/v1/instances/:id with
If-Match, where the generic execute endpoint had been rejecting it as an
operation the safe transport cannot replay.

An online device is told to release its own binding first. A refusal keeps
the record and reports UNBIND_FAILED on the job item so the console can say
why the node is still there; a node that never answers a heartbeat is
forgotten locally.
2026-09-05 19:52:27 +08:00
chick f9186bd851 feat(api): absorb the Hub control plane into the local instance model
Add central notification channels, rules, queue and delivery logs, fleet
organization groups and tags, device discovery, the device action catalog,
instance module reads, the log centre, connection settings and system
maintenance as native /api/v1 routes backed by the existing secret store,
audit trail and pinned upstream transport.
2026-09-05 18:53:04 +08:00
Codex 25502a52bb fix: flush proxied event stream headers 2026-07-30 22:11:48 +08:00
Codex 570edf6bb2 feat: rebuild warm operations workbench 2026-07-30 14:49:33 +08:00
chick 9ea8021cce feat(fleet): card-only UI with progressive load and restart ops
Drop the redundant advanced table so fleet stays resource-first cards.
Keep multi-select batch service/system restart via prepare→execute, card
restarts, overview system ops, and progressive fleet loading.
2026-07-21 22:56:55 +08:00
chick ebed4c1969 feat(auth): allow trusted remote bootstrap and add installer 2026-07-19 21:10:16 +08:00
chick f2803896a8 feat(auth): protect aggregate console with password login 2026-07-19 17:13:43 +08:00
chick 0112e3320a feat(sms): add real instance message workflow 2026-07-19 02:12:57 +08:00
chick 38a26c2ce1 fix(transport): allow passwordless resource reads 2026-07-19 00:56:03 +08:00
chick 4e7bdea230 fix(resources): probe passwordless instances 2026-07-19 00:51:55 +08:00
chick 23f18963ef feat(fleet): show instance resource metrics 2026-07-19 00:22:23 +08:00
chick d575ab4d9d feat(gateway): allow secured LAN console access 2026-07-18 19:47:23 +08:00
chick e390069edb fix(cutover): use direct detached spawn 2026-07-18 18:36:26 +08:00
chick 0b775b29bc fix(cutover): terminate detached launcher parent 2026-07-18 18:32:42 +08:00
chick d323370a75 fix(cutover): close identity binding races 2026-07-18 18:13:53 +08:00
chick 63d167d720 fix(cutover): persist rollback completion state 2026-07-18 18:02:59 +08:00
chick bd8a3fed5b fix(cutover): detach listener file descriptors 2026-07-18 18:00:21 +08:00
chick 320e65587b fix(cutover): avoid detached child stdout inheritance 2026-07-18 17:58:45 +08:00
chick f326da705c fix(cutover): parse detached child pid safely 2026-07-18 17:56:03 +08:00
chick e4e2c32998 fix(cutover): track direct detached listener pid 2026-07-18 17:51:40 +08:00
chick 020879f7e6 fix(cutover): launch gateway without wrapper pid 2026-07-18 17:46:05 +08:00
chick f7d111588b fix(cutover): separate api health from gateway readiness 2026-07-18 17:40:08 +08:00
chick bad00b67e9 fix(cutover): support absolute legacy restart executable 2026-07-18 17:34:09 +08:00
chick 4a7e29cf06 feat(release): add reversible production cutover gates 2026-07-18 17:24:51 +08:00
chick 3718c91706 test(runtime): verify live same-origin canary 2026-07-18 15:45:57 +08:00
chick f89f393485 fix(runtime): make production commands executable 2026-07-18 15:12:48 +08:00
chick ae27b522ab feat(migration): add verified import and rollback workflow 2026-07-18 14:13:11 +08:00
chick 293c015f89 feat(runtime): add production control-plane foundation 2026-07-18 12:43:46 +08:00
chick 9451e1ee42 feat(runtime): add isolated same-origin canary gateway 2026-07-18 04:54:21 +08:00
chick a884033352 test(quality): add concurrency and real browser gates 2026-07-18 03:20:42 +08:00
chick 53d9229b45 feat(api): add redacted audit read endpoints 2026-07-18 00:44:23 +08:00
chick e45b011bb8 feat(api): add contract-safe jobs read endpoints 2026-07-18 00:23:45 +08:00
chick b4ae28c8f0 feat(api): add fleet snapshots and durable event stream 2026-07-17 14:16:46 +08:00
chick 1cc4a995ee feat(api): advance capability and secure operations slices 2026-07-17 11:57:20 +08:00
chick 8018b36adf feat(operations): add audited runtime catalog 2026-07-17 09:07:50 +08:00
chick 7b91dbbad1 feat(api): complete phase 2.4 control plane 2026-07-17 00:37:11 +08:00
chick c2702b5fc6 feat(secrets): add hardened macOS Keychain store 2026-07-16 14:56:10 +08:00
chick 8a307781c6 feat(migration): add safe legacy import preview 2026-07-16 13:51:11 +08:00
chick ef9a634a02 feat(storage): add resilient SQLite foundation 2026-07-16 13:20:59 +08:00
chick 26c1bcc6da feat(api): add secure Fastify skeleton 2026-07-16 11:36:24 +08:00
chick aa3c3f9803 build: establish strict TypeScript workspace 2026-07-16 09:34:50 +08:00