Skip to content

Address review comments on the Checks and Workspaces docs - #4271

Merged
tylerpaxton merged 3 commits into
mainfrom
tp.wc-docs-dan-fixes
Oct 21, 2026
Merged

tylerpaxton merged 3 commits into
mainfrom
tp.wc-docs-dan-fixes

Conversation

@tylerpaxton

Copy link
Copy Markdown
Contributor

This PR addresses the review comments on #4171 and #4172 that arrived after they merged, except the ones that main already covers. It builds on #4269 and should merge after it. Until #4269 merges, this PR's diff also includes #4269's commit, so review only the last commit on the branch.

Some comments got different wording from what they suggested, because the code changed after the review or works differently than described. Those cases are listed under Not changed.

Changes

Chainguard Checks

  • chainctl-checks-reference.md:
    • New chainctl checks failures and chainctl checks attempts sections and table rows, and a pointer from logs --attempt to attempts.
    • A rewritten chainctl checks cancel section: --force for runs that GitHub started, who can cancel a run, how to cancel a pull request's run, and what GitHub shows afterward. It replaces the line that said you can't cancel pull request runs.
    • migrate takes an optional --dry, and the section says what running without it does: up to six test runs, which need a role and use the Checks allowance.
    • accept-terms says owner or limited_owner, the limited_owner paragraph also covers migrate without --dry, and the --workflow rows fit both layouts.
    • An {#id} on every heading.
  • configuration.md:
    • The single-file layout can hold more check files beside ci.yaml, and the file table has a row for other .yaml files in .chainguard/.
    • requested_checks_agent goes only in ci.yaml or ci/env/default.yaml, and deps.yaml joins the develop.yaml row.
    • Packages come from the Wolfi and Extra Packages repositories and your organization's Private APK Repository.
    • New sections: "How commands run," "Variables that Chainguard Checks sets," and "Git in a check's VM."
    • Network access describes HTTPS interception and the cases where the host's own certificate is kept.
    • Triggers states the rule for needs and from across triggers, with an example and a {#triggers} anchor.
    • Advisory checks and Run on request point to the rule that a pull request can't weaken its own checks.
    • Resources says a check's VM has no KVM device, and Timeouts says two hours.
  • github.md:
    • Closing or merging a pull request doesn't cancel its run, and chainctl checks cancel --force stops it.
    • Only checks that don't pass or that report something get their own GitHub check, and <file> is the defining file's name in either layout.
    • A pull request keeps the base branch's setting for a check until it merges, and a stricter change applies on the same pull request.
    • A rerun from chainctl shows Re-run requested by IDENTITY_ID via chainctl.
  • identity-and-trust.md:
    • A check that uses an identity keeps its base branch's when.expr conditions until the pull request merges. This is a new row in "Which runs get an identity," and the paragraph on what a condition protects is rewritten.
    • Ring 2 for an identity that the default branch doesn't define applies only when the default branch has a trust section.
    • A running check loses an identity within about 10 minutes after an identities.yaml change and about 18 minutes after a trust change. A new paragraph says what happens to the check.
  • variations-services-caches.md: a new "Run Docker" section, a with example that also sets PGPORT for the check, the trigger rule for from, and a root check that can use the Go build cache.
  • troubleshooting.md: a new "A check fails with a certificate error" section, a trigger row that quotes does not support trigger, owner or limited_owner in the terms row, a cache row that allows root with gobuild, and "A check stops after two hours" in place of the 50-minute section.
  • overview.md: HTTPS interception, which checks get their own GitHub check, and the two-hour limit.
  • getting-started.md: which checks get their own GitHub check, and why to require only the summary check.
  • migrate-from-github-actions.md: a Background processes row, the two-hour limit, a Go cache row for root checks, and a link from the services row to "Run Docker."
  • run-checks.md: for the guest is held by another controller, attach and run run-ci, or run the command again after the session parks. A session runs on arm64 only if its resource class pins arm64.

Chainguard Workspaces

  • coding-agents.md:
    • An unattended agent can also push to the checkout's other github.com remotes where the Chainguard App is installed, with separate advice for narrowing internet access and push access.
    • A new "The session's guide for agents" section, which replaces "brief" across the page.
    • A new "Share skills and instructions from your laptop" section, and a fix to the paragraph that said chainctl doesn't copy them.
  • github-as-you.md: a workflow that the session pushes gets a GITHUB_TOKEN that can do what the session can't do directly. "Protect your branches" adds a push ruleset on .github/workflows/**/* and turning off GitHub Actions approvals.
  • manage-sessions.md:
    • A new "Copy text from a session" section.
    • What happens when your laptop sleeps or goes offline, and that a --keep hold starts when you attach.
    • Returning to a session that's still parking, and what a park drops and keeps.
    • The 6-day renewal and what it does to credentials.
    • Share from laptop and Status rows in the session menu table, and a link to the new session states table.
  • overview.md: what the .git sync sends, how it treats symbolic links and special files, where packages come from, and a pointer to clipboard copy.
  • session-environment.md:
    • The environment change reminder applies only to sessions opened from a local directory.
    • develop.yaml can name a gobuild cache but not services, and from names only a check file or an environment file.
    • The warm cache example drops --check.
    • The order a --check session takes its size from, and arm64 only from a resource class that pins it.
    • Packages come from Chainguard's package repositories.
  • chainctl-develop-reference.md: a new "Session states" table that maps each JSON state value to the STATE column.
  • troubleshooting.md: a new "Returning to a session takes several minutes" section, and the missing: terms.accept bullet no longer says "only."

Get started

  • set-up.md: accepting terms and --parent take owner or limited_owner. init picks your only Starter or Team organization whatever your role, then stops with missing: terms.accept. A new prerequisite covers people who already belong to an organization.
  • how-it-works.md: the 6-day renewal waits while you're attached, which checks get their own GitHub check, HTTPS interception, and the glossary entry for a check.

For the reviewer

  • Changes beyond the comments. Three things changed in production after Add Chainguard Checks docs #4172 merged, and the new text would have contradicted the old, so this PR updates them on every page:
    • A run can take up to two hours, not 50 minutes. The troubleshooting anchor is now #a-check-stops-after-two-hours, its one inbound link is updated, and the error row quotes the current message, workflow run exceeded its execution deadline.
    • A check that passes without reporting anything gets no GitHub check of its own.
    • A check that runs as root can use the Go build cache without user: build.
  • Share from laptop. The new section in coding-agents.md goes beyond its comment. The old text said a session never takes your laptop's skills or CLAUDE.md, which is no longer true. Drop the section if you'd rather document the feature separately.
  • Anchors. On existing headings, each added {#id} matches the slug Hugo already generates, so no inbound link changes except the renamed two-hour heading.
  • Examples not run as written. The Docker service files are adapted from a working configuration, and the keytool command from the VM's certificate setup, but neither has been run as written in a customer's check. That git commit fails without a Git identity follows from Git's behavior, and wasn't tried in a check's VM.

Not changed

Found but not fixed here

  • The chainctl checks list section says it lists only runs started with chainctl checks run, and several pages say you can't rerun runs after merging. chainctl 0.2.388 lists every run, and Chainguard Checks reruns the newest finished postsubmit run. The fix touches github.md, troubleshooting.md, and inspect-and-run-checks.md, and needs a check of whether Re-run on GitHub works for a postsubmit run.
  • set-up.md says a personal email address can't create a Chainguard organization. Production has allowed it since October 10.
  • variations-services-caches.md says only gobuild stores data and that gobuild: {} takes no settings. The gomod cache and the key and size settings are deployed.
  • Several pages say a pull request's checks run on the commit GitHub would create by merging. Chainguard Checks now creates that merge commit itself.
  • identity-and-trust.md doesn't cover AWS workload identities, which are deployed.
  • Resource classes in .chainguard/ci/resources/<name>.yaml files are deployed but not documented.

How this was checked

🤖 Generated with Claude Code

tylerpaxton and others added 2 commits October 20, 2026 13:56
Match chainctl 0.2.388. A session created with chainctl 0.2.383 or
later keeps running after you detach while it's busy, and parks after
it's been idle for 10 minutes, no later than 24 hours after you last
detach. Document what counts as busy, the busy command, --keep park,
the new default detach option, and how list shows busy and idle
sessions.

Document chainctl develop claude login, status, and logout, the owner
credential source, and how a session gets fresh Claude access tokens
whether or not you're attached. Update the Google Cloud refresh token
rules, add troubleshooting for parks and the held login, and raise the
minimum chainctl version to 0.2.386.

Name the timed detach options wherever a terminal keeps serving after
you detach, since "Detach — keep running while busy" doesn't, and
fix other accuracy and wording issues found in review.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Address the review comments on #4171 and #4172 that arrived after
they merged and that main doesn't already cover. Builds on #4269.

Checks: add reference sections for chainctl checks failures and
attempts, document cancel --force and that closing a pull request
doesn't cancel its run, and describe migrate without --dry. Add how
commands run, the variables Chainguard Checks sets, Git in a check's
VM, HTTPS interception, the trigger rule for needs and from, check
files beside ci.yaml, where packages come from, and a Run Docker
section. Fix the services input example, document that a check with
an identity keeps its base branch when.expr until the pull request
merges, and re-derive the revoke timings.

Workspaces: document clipboard copy, laptop sleep, what a park drops,
the 6-day renewal, session states, the session's guide for agents,
Share from laptop, what the .git sync sends, and gobuild caches in
develop.yaml. Say that an unattended agent can push to the checkout's
other remotes, and that a pushed workflow's GITHUB_TOKEN can act
before anyone reviews it.

Say that owner or limited_owner can accept terms and turn on both
products, and that init picks your only Starter or Team organization
whatever your role.

Update text that went stale in production: a run can take two hours,
a passing check with nothing to report gets no GitHub check of its
own, and a root check can use the Go build cache.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@vercel

vercel Bot commented Oct 20, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
chainguard-docs-preview Ready Ready Preview Oct 20, 2026 10:07pm UTC
1 Skipped Deployment
Project Deployment Actions Updated
chainguard-docs Ignored Ignored Oct 20, 2026 10:07pm UTC

Request Review

Base automatically changed from tp.wc-docs-0383 to main October 21, 2026 15:08
Resolve the conflicts left by squash-merging #4269 to this branch's
side. Main's copies of those files match #4269's original commit, so
the net change against main is unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@tylerpaxton
tylerpaxton marked this pull request as ready for review October 21, 2026 15:25
@tylerpaxton
tylerpaxton requested a review from a team as a code owner October 21, 2026 15:25
@tylerpaxton
tylerpaxton merged commit f835966 into main Oct 21, 2026
7 checks passed
@tylerpaxton
tylerpaxton deleted the tp.wc-docs-dan-fixes branch October 21, 2026 15:25
tylerpaxton added a commit that referenced this pull request Oct 21, 2026
Resolve the conflict left by squash-merging #4271 to this branch's
side. Main's copy of that file matches #4271's original commit, so
the net change against main is unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
tylerpaxton added a commit that referenced this pull request Oct 21, 2026
## What

This updates the Chainguard Checks pages for two changes to `chainctl
checks` and the Checks platform, and for one limit that remains:

- `chainctl checks list` lists your organization's pull request runs and
runs after merging, not just the runs you started with `chainctl checks
run`.
- The commands that read runs find a run by a directory or a commit SHA.
- During the beta, you still can't rerun checks after merging, either
with **Re-run** on GitHub or with `chainctl checks rerun`. The pages now
say what you see when you try.

## Why

The pages still said "these never find your repositories' runs" and that
`chainctl checks list` shows only your own runs. Readers who followed
them would skip commands that work. The pages also didn't say that
**Re-run** on a postsubmit check leaves it queued, so readers would wait
for a run that never starts.

## Stacked on #4271

This branch is stacked on #4271. Merge it after #4271 merges.

## Changes by page

- **chainctl checks command reference**
- Name a run: adds the directory and commit SHA forms of `REF`, and
explains run ID prefixes, including the `post-` prefix of runs after
merging. Says that a pull request run or a run after merging from
October 16, 2026, or earlier needs its whole ID, which only the commands
that read runs accept. Explains which commit to pass to find a pull
request's runs.
- `chainctl checks list`: describes the runs it lists, the `--ref` and
`--trigger` flags, the output columns, and the JSON fields. Notes that
`COMMIT` is a short SHA, and that runs started with `chainctl checks
run` have `-` under `REF` and `PR`.
- `chainctl checks rerun`: `REF` can now be a directory, a commit SHA,
or a run ID, as long as it names a pull request's run. Quotes the error
the command prints for a run after merging, and documents `--watch` and
the JSON output.
- `chainctl checks cancel`: after you cancel a run, says how to run a
pull request's checks again, and how to run checks after merging again.
- **Use Chainguard Checks on GitHub**: says that **Re-run** on
**Chainguard Checks (postsubmit)** shows the check as queued, but no run
starts and the check stays queued. Also says that `chainctl checks
rerun` fails for runs after merging.
- **Inspect and run checks with chainctl**: adds the directory and
commit SHA forms, and explains how to find the runs you started in
`chainctl checks list`.
- **Workload identities and trust**: reads the repository ID from a pull
request or from a commit that ran checks after merging, because `.`
returns no ID when the commit has no run. The example now passes
`--parent`, so `chainctl` doesn't prompt for an organization in the
middle of the pipe.
- **Troubleshoot Chainguard Checks**: lists when a lookup by commit
finds no run, including the earlier commits that a merge commit brings
in. Links to the reference instead of repeating it.

## How it was checked

- Compared every claim with the `chainctl` 0.2.388 source, whose
`checks` code matches 0.2.386, the documented minimum version. Also
compared it with the Checks server code deployed today.
- Live tests of reruns after merging:
- `chainctl checks rerun` on a run after merging failed with `cannot
rerun: ... is neither a postsubmit Run nor a pull request's`.
- **Re-run** on **Chainguard Checks (postsubmit)** marked the check as
queued on GitHub. Five minutes later, no run had started, and the check
was still queued.
- Ran read-only `chainctl checks list` and `chainctl checks status`
commands against a test organization. They confirmed the documented
columns and JSON fields, and that pull request runs from October 7 and 8
aren't listed. `status` found a run after merging by its full commit SHA
and by a `post-` prefix of its ID, and printed the `Repo ID:` line.
- Ran the repository's pre-commit hooks and `markdownlint-cli2` 0.23.3
on the changed files. Both pass.
- Confirmed that all internal links and anchors on the changed pages
resolve.

## For reviewers

- The pages don't say what `TRIGGER` shows for a run started with
`chainctl checks run`, because it depends on when the run started. Runs
from before a server change deployed on October 20, 2026, show `-`,
which a read-only `chainctl checks list` confirmed for runs from October
14 and 15. In the `chainctl` 0.2.388 code, newer runs of this kind show
`presubmit`, but `--trigger presubmit` doesn't list them. This wasn't
tested live, because no newer run of this kind was available and
starting one creates a run in production.
- In `chainctl` 0.2.388, `chainctl checks rerun --help` says the command
reruns a finished postsubmit run, but the server refuses these runs. The
pages document what happens today. If reruns after merging start
working, the rerun paragraphs on the reference and GitHub pages need an
update.
- Runs created before about 17:00 UTC on October 16, 2026, aren't in the
newer format. The pages say "October 16, 2026, or earlier" to cover that
whole day.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
matthewhelmke added a commit that referenced this pull request Oct 21, 2026
## What

Adds a `[[group]]` to `scripts/checks-examples/examples.toml` for the
two YAML blocks in the "Run Docker" section of
`variations-services-caches.md`: the service definition,
`.chainguard/ci/services/docker/docker.yaml`, and the check that uses
it, `.chainguard/ci/docker.yaml`.

## Why

#4271 added the section. Its blocks only make sense together: the
service file alone has no checks, and the check alone names a service
that doesn't exist. `validate.py` tests any block the manifest doesn't
mention on its own, so it reported both as failures on `main`. The
examples themselves are correct. This lists them as a group, the same
way the Postgres service examples are listed.

## How it was checked

- On `main`, `python3 scripts/checks-examples/validate.py` reports 34
passed, 2 failed, and 4 skipped. With this change, it reports 36 passed,
0 failed, and 4 skipped, and the group's output shows `docker.yaml`
validated with the service beside it.
- The script counts "no checks configuration" as a failure, so a passing
group means `chainctl checks validate` read both files. Checked with
`chainctl` 0.2.388.
- `python3 -m unittest discover -s scripts/checks-examples` passes all
27 tests, and the pre-commit hooks pass.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

This branch was successfully deployed

1 active deployment
Preview – chainguard-docs-preview — bb5d6f62 Deployed Oct 21, 2026 by vercel[bot]
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.

2 participants