8000 Tags · google/xmc · GitHub
[go: up one dir, main page]

Skip to content

Tags

Tags

0.18.0

Toggle 0.18.0's commit message
Release 0.18.0

nightly-2026-11-06.112

Toggle nightly-2026-11-06.112's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
feat(rod): show running duration for running jobs in queue table (#1588)

* feat(rod): show running duration for running jobs in queue table

Add `int64 running_duration_seconds = 12` to `DashboardJob` and populate
it in `mapWorkUnitToDashboardJob` as `now - WorkUnitStatus.state_update_time`
when the current execution is `RUNNING`; it stays 0 for non-running jobs and
for missing, invalid, or future timestamps. `state_update_time` changes on
every state transition, so the value is the time since the job last entered
`RUNNING` and resets after a restart (`RESTARTING` -> `RUNNING`).

Add a "Running time" column to the queue jobs table, formatted by the pure
`QueueJobRunningTimePipe` (`45s`, `1m 30s`, `14h 22m`, `4d 19h`, or `–` for
jobs that are not running), with a header tooltip explaining the restart
reset. The pipe accepts the Proto3 JSON int64 string encoding. The
"Position" column is unchanged.

The column is shown in both the split view and the full-width view so
long-running jobs are visible as soon as a queue is selected, without
coupling the table to the dashboard's layout state; cells use `nowrap`
inside the existing horizontally scrollable container.

Bug: 582254269
TAG=agy
CONV=da847493-a56a-41af-821a-cd635a811ddd

* docs(rod): clarify running duration zero-value semantics

The gateway marshals with EmitUnpopulated, so a zero running duration is
sent as "0" rather than omitted; correct the pipe comment accordingly.
Document in the proto that the field is also zero for a RUNNING job whose
state_update_time is missing, invalid, or in the future.

TAG=agy
CONV=da847493-a56a-41af-821a-cd635a811ddd

* docs(rod): state precisely what running duration measures

Make the tooltip, proto comment and flow docs explicit that the value is the
time since XMC observed the job entering RUNNING (at least one pod ready),
trails the actual container start by the reconciliation delay, resets
whenever the job leaves RUNNING, and is not cumulative across restarts.

TAG=agy
CONV=da847493-a56a-41af-821a-cd635a811ddd

* docs(rod): describe running duration lag without readiness flapping

XMC jobs have no readiness probes, so a pod is ready as soon as its
containers run. State the real caveat instead: the value usually trails the
container start by a few seconds, and by longer only if the reconciler was
unavailable when the job started. Resets happen when a pod is replaced or
the job restarts.

TAG=agy
CONV=da847493-a56a-41af-821a-cd635a811ddd

nightly-2026-11-06.111

Toggle nightly-2026-11-06.111's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
chore(agents): route discovery and bazel wildcards and enforce file-n…

…aming lint (#1573)

* docs(agents): route file discovery, bazel wildcards, and scratch scripts

Surface three high-frequency cross-cutting routing conventions upfront in
.agents/AGENTS.md and TypeScript/Core Engineering rules so sessions stop
guessing file paths, Bazel package wildcards, or inline python3 -c strings:

- Route unfamiliar path discovery to `git ls-files <dir>` and `git grep`
  before file reads/edits, and index canonical `tools/` script locations in
  `.agents/AGENTS.md`.
- Clarify Angular/test file naming (`*.ng.html`, `*_test.ts`,
  `*.screenshot.spec.ts`, `*.test.js`) and the monolithic root
  `//cmd/ui:ui_unit_tests` Bazel package layout in
  `.agents/rules/languages/typescript_javascript.md`, alongside upfront
  `//<dir>/...` vs `:all` Bazel wildcard routing in `.agents/AGENTS.md`.
- Cross-link the existing standalone `.py` scratch-script rule from
  `python.md` §4 and `shell.md` §3 in `.agents/AGENTS.md` and
  `.agents/rules/core_engineering.md` §9 so non-Python sessions follow it too.

TAG=agy
CONV=5cd211b5-35b1-40f8-be9a-6bba26108f2b

* docs(agents): deduplicate routing bullets and enforce tool --help isolation

* chore(lint): enforce UI and workflow file-naming conventions

Add tools/lint/check_file_naming.py and wire it into .githooks/pre-commit
and .github/workflows/lint.yml to mechanically enforce the UI template,
UI test, and GitHub workflow script test naming conventions documented in
.agents/rules/languages/typescript_javascript.md:
- Angular component templates under cmd/ui/ must live under cmd/ui/app/
  and use *.ng.html (with root cmd/ui/index.html allowlisted and verified
  against stale entries).
- Angular Karma unit test specs must live under cmd/ui/app/ and use
  *_test.ts, closing the silent-skip gap where misnamed *.spec.ts or
  *.test.ts files compile without executing in Karma.
- Playwright visual regression specs under cmd/ui/screenshot_tests/ must
  use *.screenshot.spec.ts while preserving non-spec helpers such as
  test_utils.ts.
- Node workflow script tests under .github/scripts/ must be top-level
  *.test.js files matching CI's node --test .github/scripts/*.test.js
  invocation while preserving hyphenated production modules such as
  test-file-classifier.js.

Includes hermetic unit tests in tools/lint/check_file_naming_test.py,
Bazel targets in tools/lint/BUILD.bazel, and documentation updates in
.agents/rules/rule_authoring_standards.md, tools/README.md, and
docs/developer.md.

Comment link: #1573 (comment)
Comment link: #1573 (comment)

* fix(lint): allow test_* TypeScript fixtures and check git index paths directly

Remove the undocumented test_*.ts prohibition from
tools/lint/check_file_naming.py so test-support modules under
cmd/ui/app/testing/ and feature testing directories (such as
test_fixtures.ts) are not flagged as misnamed Karma specs.

Also tighten check_file_naming.py and its documentation/tests:
- Run _check_github_scripts before _check_ts_test_outside_screenshots so
  misnamed .github/scripts/*.test.ts files report the .github/scripts/
  *.test.js remediation message.
- Check tracked git-index paths directly without worktree .exists() or
  .is_file() filters so staged violations with unstaged worktree
  deletions cannot bypass .githooks/pre-commit.
- Require Karma _test specs under cmd/ui/app/ to end with .ts rather
  than .tsx/.mts/.cts, matching cmd/ui/angular.json (app/**/*_test.ts).
- Clarify repo-wide *.spec.ts / *.test.ts and cmd/ui/ *.html scope in
  tools/README.md and docs/developer.md, and assert the exact HandledError
  stderr JSON contract in check_file_naming_test.py.

Comment link: #1573 (comment)

nightly-2026-11-05.110

Toggle nightly-2026-11-05.110's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
feat(ui): add full-row expandable jobs toggle with localStorage persi…

…stence (#1570)

* feat(ui): add full-row expandable jobs toggle with cookie persistence

Add a "View in full width" / "Exit full width" toggle button to the
queue jobs table on the Resource Observability Dashboard (/resources)
that stacks the cluster queues list and jobs table into full-width rows
instead of hiding the queue list, and persists the layout preference in
the xmc_jobs_full_width browser cookie.

TAG=agy
CONV=c0655880-9a67-4bdd-aaa7-bc8e8631798f

* fix: address self-review feedback (iteration 1)

TAG=agy
CONV=23cac48a-f5e0-4dc9-b0fa-c46ba04c7f87

* fix(ui): repair screenshot spec, regenerate baselines, and format dashboard

Restore `resource_dashboard.screenshot.spec.ts` and append a single
full-width visual regression test using state-based assertions,
regenerate the Resource Dashboard Playwright baseline PNG snapshots
(`initial`, `queue-selected`, and `full-width`), format TypeScript
files with Prettier, and verify resize divider remounting and split
ratio preservation when exiting full-width mode.

Comment link: #1570 (comment)
Comment link: #1570 (comment)

TAG=agy
CONV=23cac48a-f5e0-4dc9-b0fa-c46ba04c7f87

* test(ui): enforce fixed height in full-width dashboard screenshot test

Pin `xmc-resource-dashboard` height (`1160px`) and increase the viewport
height (`1300px`) in the full-width Playwright screenshot test, matching
the cross-environment bounding-box pattern used in sibling screenshot
specs so 1px font line-height differences between gLinux and Ubuntu CI
runners do not mismatch canvas dimensions.

TAG=agy
CONV=23cac48a-f5e0-4dc9-b0fa-c46ba04c7f87

* fix(ui): add visible keyboard focus ring to full-width toggle button

Add an explicit `&:focus-visible` outline (`2px solid #1a73e8` with
`outline-offset: 2px`) on `button.full-width-toggle-btn` so keyboard
focus remains clearly visible in both the outlined default state and
the `#1a73e8`-filled `.active` state (WCAG 2.4.7 Focus Visible).

TAG=agy
CONV=23cac48a-f5e0-4dc9-b0fa-c46ba04c7f87

* refactor(ui): switch jobs layout persistence to localStorage and project header actions

Intentionally refines two internal design choices from #1567 while preserving
identical visual layout and user behavior:
- Replace `document.cookie` (`xmc_jobs_full_width`) with `window.localStorage`
  (`xmc-jobs-full-width`) to align with existing XMC frontend preference
  conventions (`StatusMessageFilterService`) and avoid sending a client-only
  layout flag in HTTP `Cookie` headers on API requests.
- Replace `showFullWidthToggle` / `isFullWidth` inputs on `QueueJobsTable` with
  a generic `<ng-content select="[headerActions]" />` slot in `.title-row` so
  `QueueJobsTable` stays layout-agnostic and `ResourceDashboard` owns the
  full-width toggle button directly.

TAG=agy
CONV=23cac48a-f5e0-4dc9-b0fa-c46ba04c7f87

---------

Co-authored-by: Vlad Lukiantsev <vluk@google.com>

nightly-2026-11-04.109

Toggle nightly-2026-11-04.109's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
refactor(pr_review): run subprocesses through tool_utils.run_command (#…

…1559)

* refactor(pr_review): run subprocesses through tool_utils.run_command

github_utils, reply_pr_comment and wait_for_ci called subprocess directly
with hand-rolled capture, timeout and decoding options. Route them through
tool_utils.run_command, which now supports input_text, timeout and errors.

All calls pass log_cmd=False and log_on_error=False so stdout stays
JSON-only and stderr is unchanged. No handled_instruction is set, so the
raw CalledProcessError/TimeoutExpired/OSError still reach the existing
handlers: github_utils' credential fallback, reply_pr_comment's "unknown"
commit fallback, and wait_for_ci's transient-retry loop with its 60s
per-call timeout. wait_for_ci's two gh calls share a small _run_gh helper.

TAG=agy
CONV=2937a1a9-78d5-4d4f-806c-262c963bb857

* test(pr_review): assert the full gh call for API payloads

test_call_github_api_gh_cli_sends_payload_on_stdin only checked the argv
tail and input_text, so a changed method or endpoint, or dropped
log_cmd/log_on_error flags (which keep tool stdout JSON-only), would
still pass. Assert the complete run_command call and the return value,
matching the GET test.

TAG=agy
CONV=2937a1a9-78d5-4d4f-806c-262c963bb857

nightly-2026-11-03.108

Toggle nightly-2026-11-03.108's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
fix(ui): fail fast with npm ci hint and document canonical test comma…

…nds (#1531)

* fix(ui): fail fast with npm ci hint when UI dependencies are missing

Contributors frequently run tests outside the canonical runners: host
`go build/vet/test` (which always fails because Go packages import
Bazel-generated protobuf code), guessed Bazel target names, and UI tests
or lint in fresh worktrees that never ran `npm ci`.

Most of this is already covered by existing tooling
(tools/run_affected_tests.py for the change set, `bazel test //<dir>/...`
for a directory), so this change documents the canonical commands where
they were missing instead of adding new tooling:

- golang.md: Go builds and tests are Bazel-only; discover targets with
  `bazel query 'tests(//<dir>/...)'` instead of guessing.
- python.md: same directory/target discovery guidance in the existing
  Bazel-only bullet.
- typescript_javascript.md, developer.md, xmc_feature_development:
  run `npm ci --legacy-peer-deps` in cmd/ui before UI tests and lint,
  matching .github/actions/run-ui-tests.
- pre-commit: suggest `npm ci --legacy-peer-deps` instead of
  `npm install` so local installs match the lockfile and CI.

//cmd/ui:ui_unit_tests (cmd/ui/run_ui_tests.py) now exits 1 with the
exact install command when node_modules/.bin/ng is missing, instead of
an opaque npx failure.

TAG=agy
CONV=8675b6d8-e766-4541-a75f-70dd9ca9dbbb

* fix(ui): move run_ui_tests into a py_library and assert the npx call

Follows the existing build_ui_oci_lib/server pattern: run_ui_tests_test
depends on a run_ui_tests_lib py_library instead of listing the module
in its own srcs. The pass-through test now asserts subprocess.run was
called exactly once before inspecting its arguments.

Comment link: #1531 (comment)
Comment link: #1531 (comment)

TAG=agy
CONV=8675b6d8-e766-4541-a75f-70dd9ca9dbbb

0.17.0

Toggle 0.17.0's commit message
Release 0.17.0

nightly-2026-11-02.107

Toggle nightly-2026-11-02.107's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
feat(cms): serve the Component Manager Service from dbstore on Postgr…

…eSQL (#1505)

Now that PostgreSQL implements component writes, `initCMS` uses `dbstore.Store`
whenever storage is configured, regardless of backend, instead of falling back
to the in-memory `MemoryStore` on PostgreSQL. Remove the backend parameter and
`ProdServer.StorageBackend`, which existed only for the Spanner-only gate.

TAG=agy
CONV=5d43b8db-2f9c-4908-a311-376a2b7dfdf0

nightly-2026-11-01.106

Toggle nightly-2026-11-01.106's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
feat(cms): serve the Component Manager Service from dbstore on Postgr…

…eSQL (#1505)

Now that PostgreSQL implements component writes, `initCMS` uses `dbstore.Store`
whenever storage is configured, regardless of backend, instead of falling back
to the in-memory `MemoryStore` on PostgreSQL. Remove the backend parameter and
`ProdServer.StorageBackend`, which existed only for the Spanner-only gate.

TAG=agy
CONV=5d43b8db-2f9c-4908-a311-376a2b7dfdf0

nightly-2026-10-31.105

Toggle nightly-2026-10-31.105's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
feat(cms): serve the Component Manager Service from dbstore on Postgr…

…eSQL (#1505)

Now that PostgreSQL implements component writes, `initCMS` uses `dbstore.Store`
whenever storage is configured, regardless of backend, instead of falling back
to the in-memory `MemoryStore` on PostgreSQL. Remove the backend parameter and
`ProdServer.StorageBackend`, which existed only for the Spanner-only gate.

TAG=agy
CONV=5d43b8db-2f9c-4908-a311-376a2b7dfdf0
0