Skip to content

Release v1.9.3 to main - #683

Merged
VijitSingh97 merged 6 commits into
mainfrom
develop
Jul 19, 2026
Merged

Release v1.9.3 to main#683
VijitSingh97 merged 6 commits into
mainfrom
develop

Conversation

@VijitSingh97

Copy link
Copy Markdown
Collaborator

Straight develop→main merge for the published v1.9.3 (tag commit 7a5cd25 = develop tip; no post-cut commits). Real merge, never squash — main stays released-only and an ancestor of develop.

🤖 Generated with Claude Code

VijitSingh97 and others added 6 commits July 19, 2026 13:28
… apply (#675) (#676)

The ~94-key reference table is deep-linked from other docs, so readers
land on a key description without passing the "Changing settings later"
section. One line in the table's callout closes the gap.

Closes #675

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
… sort (#671) (#678)

* dashboard: workers-table sort headers are real buttons — keyboard can sort (#671)

The header's click target moves from a bare <th onClick> to a native
<button> inside the th, per the #657 house pattern: native buttons are
focusable and activate on Enter/Space, firing the same onSort path the
mouse takes. The button absorbs the th padding and inherits its
typography, so the whole cell stays clickable and the header looks
unchanged; aria-sort/arrow rendering (#656/#665) is untouched.

Closes #671

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* shrink: drop no-op inherit lines (ponytail-review)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
* Disk readout switches to TB at 1 TB (#677)

A 4 TB drive read "408.6 / 3666.4 GB" on the system card. A shared
format_disk_size helper (1024-based, matching the collector's BYTES_IN_GB)
now scales used and total together to TB once the volume reaches 1024 GB,
on both the dashboard card and the Telegram /system reply. Collector
output, stored telemetry, and the Prometheus surface are unchanged.

Closes #677

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* Drop redundant GB-side wiring test (ponytail-review)

The helper tests already prove GB below 1024; one wiring test per surface
is enough.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…ontent, not presence (#681)

* fix(#679): config editor saves rejected — key on populated worker lists, not present ones

The dashboard config editor merges config.reference.json (which ships BOTH
workers.list and dashboard.workers as empty-array schema defaults) under the
operator's config and round-trips the merged doc on save, so every staged
editor config carries both keys — and validate_worker_endpoints refused it on
mere presence. Every save through the editor failed, Form and JSON alike,
since the v1.7.0 hard error.

- One selection rule (WORKER_LIST_JQ / worker_list) for every descriptor
  reader in pithead: workers.list wins unless empty/absent, then the
  deprecated dashboard.workers; the guard, dup check, control_preview token
  restore and control_worker_apply all route through it.
- Refuse / warn only on POPULATED keys; an empty array beside the populated
  one is the schema default, never an operator choice.
- load_worker_endpoints mirrors the rule (falls back on unset OR empty).
- control_service.submit sheds read_config's own _core_keys/_editable_keys
  metadata from the intent — the commit-side closed-schema gate refuses a
  config carrying them, the second latent break of the same save path.
- Stack tests: all four quadrant cases + the editor contract itself (the
  shipped reference merged under a valid config must survive the preview
  dry-run); unit tests for the loader fallback and the submit strip.

Closes #679

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* feat(#679): apply migrates deprecated dashboard.workers[] to workers.list[] in place

A validated legacy list is moved on the next apply: entries land under
workers.list, the old key is deleted, and the pre-migration file is kept
beside the config as config.json.bak-workers (the .bak-control naming).
Write-back rules follow persist_node_credentials: never on a dry run (#556)
— which covers every control-channel preview — atomic temp+mv under umask
077, best-effort (a failed write warns and the run continues on the legacy
key via worker_list). The pre-migration owner is restored after the mv so a
root control-runner apply cannot strand config.json root-owned (#480 class);
the backup also joins control_reown_operator_files' list.

The legacy mask/restore black-box block moves to the post-migration reality:
a live config carries dashboard.workers only between a hand-edit and the
next apply, so the masked prefill is rendered directly (no apply) and the
commit leg now asserts the migration lands through the control runner —
tokens preserved under workers.list, backup kept, no sentinel dicts.

Stack tests: migrate + announce + backup, sibling workers.* keys and tokens
preserved, owner-only mode kept, idempotent second apply, dry run never
writes, invalid legacy config refused untouched.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…apply reminder (#675), config-editor fix + legacy-workers migration (#679) (#682)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
@VijitSingh97
VijitSingh97 merged commit 2f99af3 into main Jul 19, 2026
32 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant