Skip to content

docs: document the Jobs migration's remaining user-facing surfaces (#430) - #434

Merged
ayuskauskas merged 5 commits into
feature/package-as-jobsfrom
jobs-migration/430-docs-surfaces
Aug 12, 2026
Merged

docs: document the Jobs migration's remaining user-facing surfaces (#430)#434
ayuskauskas merged 5 commits into
feature/package-as-jobsfrom
jobs-migration/430-docs-surfaces

Conversation

@ayuskauskas

Copy link
Copy Markdown
Collaborator

Important

Base this work on feature/package-as-jobs, not main.

The Jobs migration (#223) is integrating on that branch. main does not yet execute
packages as Jobs, so a PR opened against main will be missing the code this depends
on. feature/package-as-jobs merges to main once #305 lands.

That branch squash-merges, so if your branch is stacked on another PR in this epic,
replay only your own commits when restacking:
git rebase --onto origin/feature/package-as-jobs <last-inherited-commit>

Closes #430. Part of #223, based on feature/package-as-jobs (not main). Docs and chart comments only — no behavior change.

#411 item 9 listed five undocumented user-facing surfaces. Two were covered while this branch was in flight (#402 wrote the stageTimeout docstring and the values.yaml deadline comments, #422 added pause-vs-disable prose to docs/cli.md), so this PR takes the remaining three.

The TTL floor is a startup crash, not a knob

SkyhookOperatorOptions.Validate (skyhook_controller.go:203-211) rejects a TTL under one minute. chart/values.yaml said nothing, so "0" looks like the obvious way to turn retention off and instead takes the operator down at startup. Now stated where the value is set, and in the README row.

chart README settings table

jobTtlSucceeded, jobTtlFailed, jobStageTimeout, and legacyCleanupDelay were all missing. Added, with the "fixed at Job creation, package rerun to apply" contract repeated on jobStageTimeout so the table stands on its own.

Not added: jobBackoffLimit — it arrives with #402. Whichever of the two merges second should add its row; noted on that PR.

docs/cli.md compatibility matrix

The matrix's columns are about command availability, and pause acquired a second axis: on operators that run package stages as Jobs it suspends the executing stage; on earlier ones it blocks new scheduling only. That was in prose under Emergency Stop, but not where a reader consulting the matrix would find it. The pause row now points at a note that names both behaviors and links to the full semantics. Version numbers are deliberately not pinned — the existing prose uses "operators that run package stages as Jobs" for the same reason, since the Jobs release version is #305's to name.

docs/operator_resources_at_scale.md

The design doc names this page as authoritative for sizing the new Job population; the page predates the migration (last touched in #229) and does not mention Jobs. Added a section recording only what the code determines:

  • one Job per (NodeWright, package, stage, node), so two per node for a non-interrupting package and four for an interrupting one;
  • the Jobs informer is namespace-scoped (cmd/manager/main.go:152) and additive — package pods stay cached cluster-wide because drain needs every pod on a node;
  • retention is TTL-by-outcome with a one-minute floor, so the retained population is the stages that completed inside those windows, bounded by N × P × stages-per-package;
  • each retained Job keeps at most two failed child pods (pruneFailedAttempts — first genuine failure and most recent), not one.

The CPU/memory equations are flagged as a floor rather than restated: they were measured before this migration and I have not re-run them with the Jobs informer in the cache. If someone has scale numbers from the Jobs branch, that section should be replaced with measurements rather than derivation.

Verification

helm lint chart/ passes (the two notices are pre-existing). No double blank lines or missing trailing newlines in the edited markdown; markdownlint-cli2 isn't installed locally, so CI's meta-lint is the real check. No Go code touched.

SkyhookOperatorOptions.Validate rejects a TTL under a minute, so "0"
reads as "disable retention" but actually crashes the operator at
startup. Say so where the value is set, and add the three Job knobs plus
legacyCleanupDelay to the chart README's settings table — none of them
were listed.

Signed-off-by: Alex Yuskauskas <ayuskauskas@nvidia.com>
Repo convention makes the compatibility matrix authoritative for
version-gated behavior, and pause acquired a second axis: on operators
that run package stages as Jobs it suspends the executing stage, and on
earlier ones it only blocks new scheduling. That was captured in prose
under Emergency Stop but nowhere a reader consulting the matrix would
see it.

Signed-off-by: Alex Yuskauskas <ayuskauskas@nvidia.com>
The Jobs design doc names this page as authoritative for sizing the new
Job population, but the page predates the migration and does not mention
Jobs at all. Record what the code determines: the informer is
namespace-scoped and additive to the cluster-wide pod cache, retention is
TTL-by-outcome with a one-minute floor, and each retained Job keeps at
most two failed child pods. The CPU/memory equations were measured before
this change, so they are flagged as a floor rather than restated.

Signed-off-by: Alex Yuskauskas <ayuskauskas@nvidia.com>
@github-actions github-actions Bot added doc Documentation change (PR path label; doc issues use the Documentation type) component/operator Skyhook operator (controller-manager) component/chart Helm chart component/ci CI workflows, GitHub Actions, and repo tooling labels Aug 11, 2026
@coderabbitai

coderabbitai Bot commented Aug 11, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Enterprise

Run ID: 800fb211-3f18-43a7-a219-b67b0e040a99

📥 Commits

Reviewing files that changed from the base of the PR and between 288d266 and d348495.

📒 Files selected for processing (1)
  • docs/operator_resources_at_scale.md

📝 Walkthrough

Walkthrough

The documentation adds Helm chart settings for Job retention, stage timeout, and legacy cleanup. It documents the one-minute minimum for successful and failed Job TTLs. The CLI compatibility matrix describes version-dependent behavior for pause, resume, disable, and enable. The scaling guide explains Job caching, retention, failed-pod handling, and memory-sizing considerations.

Estimated code review effort: 2 (Simple) | ~10 minutes

Suggested reviewers: lockwobr, rice-riley

🚥 Pre-merge checks | ✅ 4
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly summarizes the documentation changes for the remaining Jobs migration user-facing surfaces.
Description check ✅ Passed The description directly explains the documentation changes, their scope, linked issue, and verification details.
Linked Issues check ✅ Passed The changes address all requirements in issue #430, including TTL limits, chart settings, pause behavior, and Job resource sizing guidance.
Out of Scope Changes check ✅ Passed The changes are limited to documentation and chart comments that support the linked Jobs migration documentation objectives.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch jobs-migration/430-docs-surfaces

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@docs/cli.md`:
- Line 58: Remove the blank line within the blockquote in the CLI documentation,
or prefix it with “>”, so the note remains a single contiguous blockquote and
satisfies MD028/no-blanks-blockquote.
- Around line 54-55: Update the pause behavior documentation in the CLI section
by replacing the ambiguous “on earlier ones” wording with an explicit
description of operators still running legacy raw-pod stages during the upgrade
window, or specify the exact affected version range. Do not attribute this
behavior to v0.7.x; direct those versions to spec.pause.

In `@docs/operator_resources_at_scale.md`:
- Around line 49-52: Update the cache description to state that the
namespace-scoped Jobs informer maintains a separate Job cache alongside the
cluster-wide pod cache. Remove the claim that Jobs are added to or replace the
pod cache, while preserving that package pods remain cluster-wide for node-drain
visibility.
- Around line 54-58: Clarify the Retention section that the stated N × P ×
stages-per-package bound applies only to retained Jobs from a single rollout
completing within the TTL windows. Explicitly account for in-flight Jobs and
overlapping rollouts as additional cache population, so the total cache must be
sized beyond that retained-job estimate.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Enterprise

Run ID: ebd09566-1a10-41c7-ad2a-08a4b60d01e4

📥 Commits

Reviewing files that changed from the base of the PR and between 15a317f and 9aa8e94.

📒 Files selected for processing (4)
  • chart/README.md
  • chart/values.yaml
  • docs/cli.md
  • docs/operator_resources_at_scale.md

Comment thread docs/cli.md Outdated
Comment thread docs/cli.md Outdated
Comment thread docs/operator_resources_at_scale.md Outdated
Comment thread docs/operator_resources_at_scale.md Outdated
- MD028: the pause note and the update-state note were two blockquotes
  separated by a blank line, which markdownlint flags as ambiguous (and
  meta-lint failed on it). Merged into one quote, update-state first so
  the notes follow the matrix row order.
- pause note: "on earlier ones" read as though it covered v0.7.x, where
  the command does not exist at all. Now names v0.8.0+ pre-Jobs operators
  and the upgrade window, and points v0.7.x at spec.pause.
- scale doc: the Jobs informer is a second cache, not extra entries in
  the pod cache — the previous wording invited adding the two populations
  into one budget.
- scale doc: the retained-Job bound was presented as the whole cache.
  Split it into in-flight (capped by interruption budget and policy
  batching) and retained, and noted that concurrent NodeWrights add.

Signed-off-by: Alex Yuskauskas <ayuskauskas@nvidia.com>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@docs/operator_resources_at_scale.md`:
- Around line 64-65: Update the retained Job documentation to say it keeps at
most two genuine failed child pods, and clarify that disruption casualties are
excluded from this cap and may cause a retained Job to have more than two failed
child pods.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Enterprise

Run ID: 53ddd928-9767-411f-a0ce-8e94a989d02e

📥 Commits

Reviewing files that changed from the base of the PR and between 9aa8e94 and 288d266.

📒 Files selected for processing (2)
  • docs/cli.md
  • docs/operator_resources_at_scale.md

Comment thread docs/operator_resources_at_scale.md Outdated
pruneFailedAttempts counts only pods that failed with a verdict: a
disruption casualty carries DisruptionTarget and is deliberately neither
kept nor deleted, and the pruner is reached from handleActiveJob, so a
Job that goes terminal first can keep extras. "At most two failed child
pods" therefore under-counts on a sizing page.

Signed-off-by: Alex Yuskauskas <ayuskauskas@nvidia.com>
@coveralls

coveralls commented Aug 11, 2026

Copy link
Copy Markdown

Coverage Report for CI Build 31518415931

Warning

No base build found for commit 15a317f on feature/package-as-jobs.
Coverage changes can't be calculated without a base build.
If a base build is processing, this comment will update automatically when it completes.

Coverage: 78.891%

Details

  • Patch coverage: No coverable lines changed in this PR.

Uncovered Changes

No uncovered changes found.

Coverage Regressions

Requires a base build to compare against. How to fix this →


Coverage Stats

Coverage Status
Relevant Lines: 13435
Covered Lines: 10599
Line Coverage: 78.89%
Coverage Strength: 8.08 hits per line

💛 - Coveralls

@ayuskauskas
ayuskauskas merged commit 1f721b3 into feature/package-as-jobs Aug 12, 2026
34 checks passed
@ayuskauskas
ayuskauskas deleted the jobs-migration/430-docs-surfaces branch August 12, 2026 22:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

component/chart Helm chart component/ci CI workflows, GitHub Actions, and repo tooling component/operator Skyhook operator (controller-manager) doc Documentation change (PR path label; doc issues use the Documentation type)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants