Skip to content

fix(skills): stop naming app as an expression root in two published guides #9984

fix(skills): stop naming app as an expression root in two published guides

fix(skills): stop naming app as an expression root in two published guides #9984

Workflow file for this run

name: Auto Label PRs
on:
pull_request:
types: [opened, synchronize, reopened]
permissions:
contents: read
pull-requests: write
# `pull-requests: write` only lets the action add labels that ALREADY EXIST in the
# repository; creating one it has never seen needs `issues: write`. Upstream states
# both halves — actions/labeler v7 README "Recommended Permissions", and its
# src/labeler.ts, which on a 403 raises "The workflow does not have permission to
# create labels. Ensure the 'issues: write' permission is granted".
#
# This is load-bearing here rather than defensive: `.github/labeler.yml` gained 14
# `package: *` rules in objectui#7746, and 12 of those labels did not exist in this
# repository's label registry when they were added. The action applies the whole set
# in ONE `setLabels` call, so without this the first PR touching e.g. `packages/auth`
# fails the call outright and the PR gets NO labels at all — strictly worse than the
# coverage gap #7746 closed. Pinned by scripts/__tests__/labeler-package-coverage.test.ts.
issues: write
jobs:
label:
runs-on: ubuntu-latest
# ── The job ceiling, DERIVED FOR THIS JOB (objectui#7956) ────────────
# Before this line the only backstop was GitHub's 360-minute default.
#
# ⚠️ The stakes here are NOT objectui#7270's. That card's argument leaned on
# two of its three jobs producing a REQUIRED context on a shared serial
# queue. Re-measured on `GET /repos/objectstack-ai/objectui/rules/branches/
# main` at 2026-09-06T17:20Z, the required checks are `Lint`, `Type Check`,
# `Build & E2E`, `Test (shard 1/4)` through `(4/4)`, `Build Docs` and
# `Changeset Declaration` — this job produces none of them, and it blocks
# nothing. What is left is the generic exposure: a wedged job holds a runner
# for six hours and then reports `cancelled`. This job runs on every push to
# every open pull request, so it is the most frequently started of the six
# objectui#7956 covers and the cheapest place for that exposure to be paid
# repeatedly.
#
# ⛔ NOT inherited from `ci.yml`'s 10/15/20/30/40, nor from the ceilings
# objectui#7270 derived — objectui#7048 fences exactly that. The arithmetic
# below is this job's own.
#
# - Population: the last 300 successful runs of this workflow, window
# 2026-09-04T15:06Z .. 2026-09-06T17:19Z, n=300 `label` jobs. Per-job
# wall clock from the Actions jobs endpoint (`completed_at` minus
# `started_at`), never the run's total.
# - min 3s / median 5s / p95 8s / max 13s.
# - Single event (`pull_request`, n=300), so there is no by-event split to
# report and one ceiling is all there is to set.
# - max/p95 = 1.6 — no fat tail, so the multiplier is not widened.
#
# Ceiling = the smallest round number that is both >= 3x max (0.7min) and
# >= max + 15min (15.2min) => 20. That is ~92x the slowest run ever observed
# here, so it cannot fire on a healthy-but-slow runner; a wedge dies in 20
# minutes instead of 6 hours.
#
# ⚠️ Four of the six jobs objectui#7956 bounded land on 20 by this same
# arithmetic. That is NOT one number copied across them, which precondition
# ② of that card's triage forbids: for any job whose slowest run is under
# 7.5 minutes the additive term dominates the multiplicative one, so the
# rule puts every sub-minute job on the same rung. Each of the four carries
# its own sample and its own derivation beside its own key.
#
# ⛔ Raising this toward 360 is the ruled-out non-fix (objectui#6577,
# objectui#7048): the hang just runs longer and the gate still reports
# `cancelled`.
timeout-minutes: 20
steps:
- uses: actions/labeler@v7
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
configuration-path: .github/labeler.yml
sync-labels: true