Running Tend in PRQL
Tend-specific guidance for this repo. Project build commands, test strategy,
error conventions, etc. are in CLAUDE.md — don't duplicate them here.
Filing issues in other repos
Standing exception granted: file directly in agent-equipped targets (per
Filing Issues in Other Repos in the bundled running-in-ci skill) without
asking permission here first. The default rule (open an issue here asking
permission first) still applies when the target shows no agent signals.
PR conventions
- PR titles use conventional commits:
feat:,fix:,docs:,chore:,refactor:,test:,ci:,internal:,devops:,web:,refine: - No scope required (e.g.,
fix: resolve date parsingnotfix(parser): ...) - Dependabot PRs use
chore:prefix
CI structure
- Main CI workflow:
tests(watched by tend-ci-fix) - Dependency management: Dependabot opens dependency PRs; tend-weekly reviews them and runs the tasks under Weekly maintenance below.
- tend's own action is excluded from Dependabot (
max-sixty/tendis in the github-actionsignorelist in.github/dependabot.yaml). Tend updates flow through the nightlytend/update-workflowsregen (uvx tend init), which follows structural changes a version-only bump can't — e.g. the 0.1.7 move that split the action intoclaude//codex/subdirectories broke the naive Dependabot bump #6031. Don't re-addmax-sixty/tendto Dependabot. - Automerge: not configured —
pull-request-target.yamlonly validates PR titles and handlespr-backport-webbackports. The automerge job was removed in #5753, so bot PRs must be merged manually by a maintainer (or via repo branch-protection auto-merge if a maintainer enables it on the PR).
Verifying a rust-toolchain.toml bump
The update-rust-toolchain action opens build: Update rust toolchain version
with nobody owning it, so tend usually pushes the mechanical lint fixes a new
clippy demands (the repo compiles with -D warnings). Verify with the
matrix's full feature set, not --features=default. The tests matrix runs
clippy as
--all-targets --no-default-features --features=default,test-dbs-external,lsp,
and code behind test-dbs-external — prqlc/prqlc/tests/integration/dbs/ — is
invisible to a default-only run.
On #6219 (1.96.1 → 1.97.1) a session fixed the 7 useless_borrows_in_formatting
sites --features=default exposed and posted "clean across the workspace", but
an 8th in dbs/runner.rs was still red — so the posted claim was wrong, not
just the branch.
A whole-workspace --all-targets clippy on a cold cache exceeds the session
budget. Scope it to the failing compilation unit instead (~9 minutes):
cargo clippy -p prqlc --test integration --target=x86_64-unknown-linux-gnu \
--no-default-features --features=default,test-dbs-external,lsp -- -D warnings
Then scope the resulting claim to match the command: a clean run there clears that one compilation unit, not the workspace — other crates and targets stay unchecked. Name the unit that was verified rather than repeating #6219's "clean across the workspace".
CI polling during the Dependabot batch
Dependabot opens its whole batch over a couple of minutes (the 2026-08-03 batch
ran 17:14:32 → 17:16:45; across 2026-06 to 2026-08 every batch has landed in
17:12–17:19 UTC), so five or six tests matrices compete for runners at once.
The surviving tests run on each PR then sits in QUEUED for a long time
before it starts — run 30835855220 on #6130 took 73 minutes end to end
(17:14:37 → 18:27:46), far past the 9-minute cap on the poll loop in CI
Monitoring in running-in-ci.
Stop after one poll round when every pending check is QUEUED. A QUEUED
check has not been allocated a runner, so another round changes nothing: post
the verdict, name the unverified checks, and end. If any pending check is
IN_PROGRESS, keep polling — that work is advancing and may still settle.
The pending() helper in CI Monitoring returns a count without the states,
so it can't tell those two cases apart. Project the states alongside it:
gh pr view <n> --json statusCheckRollup \
--jq '[.statusCheckRollup[] | {name: (.name // .context), status: (.status // .state)}]'
Weekly maintenance
These tasks run as Step 3 of the bundled weekly skill (only when
workflows.weekly is enabled in .config/tend.yaml).
Bump pinned
go-task/setup-taskversion. The action is invoked with a concreteversion:input to avoid the intermittentunable to get latest versionfailure fromversion: 3.x(see #5836). Dependabot does not updatewith:inputs, so this needs a manual weekly bump. Find the latest release at https://github.com/go-task/task/releases/latest; if the current pin is older, updateversion: X.Y.Zin:.github/actions/tend-setup/action.yaml.github/workflows/build-web.yaml.github/workflows/test-php.yaml.github/workflows/test-prqlc-c.yaml
Open a single
chore:PR with the bump. Skip if already at the latest.
Issue management
- Close bot-opened issues once the underlying cause is resolved — don't leave
them open for a maintainer. If you (prql-bot) filed an issue (e.g., a nightly
"tests failed" issue, a code-quality issue, an infra/upstream bug report) and
the fix has merged or the upstream problem has been addressed, close the issue
with a short comment citing the resolution (e.g., "Resolved by #NNNN —
closing"). Applies to any issue where
author.login == prql-bot.