daily-operations · git:20260915.8a79a3c · 2026-09-15 · sha256 1b5cd6308c22763d

daily-operations git:20260915.8a79a3cA

Immutable. This exact content is served forever at /api/v1/blob/1b5cd6308c22763d.

---
name: daily-operations
description: Use for daily chores in dotnet-inspect; inspect main CI and staging health, scheduled certification, performance, runtime-pin, security, and dependency runs, then classify and prioritize any action.
---

# Daily operations

This is a repo-local maintainer skill for one evidence-driven pass over routine
repository health. It coordinates existing workflows and specialist skills; it
does not replace their contracts or turn every unusual result into an incident.

Run the pass after the 09:00 UTC schedules have had a reasonable opportunity to
start, or use the same steps for an on-demand status check. GitHub schedules can
be delayed. A missing run is not a failure until queued and in-progress work,
workflow enablement, and recent scheduling delays have been checked.

## Establish the observation window

Record:

- the current UTC time and the previous 30 hours;
- current `origin/main`;
- the latest `main` push and its CI and staging runs;
- whether today is Monday UTC;
- every run ID, head SHA, event, attempt, status, conclusion, and URL used in
  the report.

Fetch without mutating an open candidate:

```bash
git fetch origin main
main_sha=$(git rev-parse origin/main)
printf 'main: %s\n' "$main_sha"
date -u
```

Use `gh run list` for discovery and `gh run view` for the selected run. Prefer
workflow filenames so display-name changes do not break the pass:

```bash
gh run list --workflow ci.yml --branch main --limit 10 \
  --json databaseId,headSha,event,status,conclusion,createdAt,updatedAt,url
gh run list --workflow deploy-inspect-web.yml --branch main --limit 10 \
  --json databaseId,headSha,event,status,conclusion,createdAt,updatedAt,url
gh run list --workflow deep-inspect.yml --event schedule --limit 10 \
  --json databaseId,headSha,event,status,conclusion,createdAt,updatedAt,url
```

Compare the expected-routine table below with the repository's current schedule
inventory. Add any newly scheduled workflow to the pass rather than silently
ignoring it:

```bash
rg -n -B 5 -A 2 'cron:' .github/workflows --glob '*.yml'
```

Do not assume the newest listed run covers `origin/main`; compare full SHAs.
For push workflows with cancel-in-progress behavior, an older cancelled run is
superseded when a newer run covers the intended current head.

## Expected routine

| UTC cadence | Workflow | Evidence or action |
| --- | --- | --- |
| Every `main` push | `ci.yml` | Current-head repository health. |
| Every `main` push | `deploy-inspect-web.yml` | Current-head staging build and deployment. |
| 00:47 daily | `inspect-web-runtime-cohort-nightly.yml` | Controlled Mono, CoreCLR IL, and CoreCLR R2R admission and performance evidence. |
| 02:17 daily | `inspect-web-performance-nightly.yml` | Public production Mono/CoreCLR performance evidence. |
| 04:38 daily | `codeql-scheduled.yml` | CodeQL analysis. |
| 05:17 daily | `inspect-web-runtime-pin-proposal.yml` | Newer coherent .NET 12 candidate discovery, full cohort admission, and pin-only proposal branch. |
| 05:23 daily | `npm-audit-scheduled.yml` | Inspect Web lockfile audit and retained report. |
| 05:37 daily | `nuget-audit-scheduled.yml` | Restored NuGet dependency audit for each configured scope. |
| 05:43 daily | `nuget-dependency-submission.yml` | Submission of the resolved NuGet graph. |
| 06:00 daily | `deep-inspect.yml` | Release certification, cross-platform tests, decompiler corpus, census, and comprehensive Inspect Web evidence. |
| 09:00 daily | `deep-inspect.yml` | Authored-corpus regression ratchet. |
| 09:00 Monday | `deep-inspect.yml` | Top-package discovery sweep. |

Query each scheduled workflow with `--event schedule`; do not mistake a manual
dispatch for proof that its schedule fired. Deep Inspect has separate scheduled
runs at 06:00, 09:00 daily, and 09:00 Monday. Select them by creation time and
inspect their jobs to confirm the expected lane actually ran.

For a failed run, start with:

```bash
gh run view <run-id> --json headSha,event,status,conclusion,jobs,url
gh run view <run-id> --log-failed
```

Download artifacts only when the summary and failed logs do not establish the
classification. Keep scratch evidence outside tracked files.

## Apply the owning contracts

Use the `deep-inspect` skill for detailed interpretation, reproduction, or
manual dispatch of any Deep Inspect lane. Its release-certification jobs are
blocking proof; census and package-sweep output are primarily discovery and
triage evidence; authored-corpus and comprehensive Inspect Web are regression
gates.

Use
[`docs/inspect-web-runtime-performance.md`](../../../docs/inspect-web-runtime-performance.md)
for runtime cohort, production synthetic, and pin-advancement semantics:

- Mono or CoreCLR IL rejection, missing evidence, semantic mismatch, and
  unfamiliar CoreCLR R2R failure block the owning operation.
- The explicitly retained CoreCLR R2R thunk failure is an expected correctness
  rejection, not a performance point and not a daily repair item.
- Production performance publishes evidence and drift, not a regression
  threshold. Compare medians and runner load with recent accepted trend points
  before escalating.
- A current or older coherent runtime candidate is a successful no-op.

Use the `release` skill only when the user asks to ship. Daily certification,
green CI, staging success, or a pin proposal is not release authorization.

## Check proposal and failure queues

List outstanding runtime-pin proposal branches:

```bash
git ls-remote --heads origin \
  'refs/heads/automation/inspect-web-runtime-pin-*'
```

One outstanding branch intentionally blocks later pin discovery. Report its
name, age, candidate identity, evidence run, and whether it still changes only
`inspect-web/runtime-cohort-pin.json`. Do not merge or delete it as a daily
cleanup action. If no branch exists, a successful `no-newer-candidate` proposal
run is clean.

Deep Inspect scheduled failures open or update a `nightly-failure` issue. Check
the queue and correlate every open issue with the newest scheduled run:

```bash
gh issue list --state open --label nightly-failure --limit 20 \
  --json number,title,updatedAt,url
```

Do not duplicate an issue already maintained by a workflow. Do not close one
until its failure is triaged and the relevant replacement evidence is clean.

## Classify before acting

Assign exactly one primary classification to each exception:

| Classification | Meaning | Daily action |
| --- | --- | --- |
| Blocker requiring repair | Current evidence demonstrates a product, contract, security, dependency, certification, or staging failure. | Preserve the first failing proof, identify the owning subsystem, and prioritize repair. |
| Evidenced transient | The unchanged head failed for an external or runner condition and concrete evidence excludes an authored defect. | Rerun only failed jobs or the unchanged workflow; retain both run IDs. |
| Observational drift | Evidence changed without violating an owned threshold or contract. | Quantify against recent accepted evidence and open or update focused triage only when meaningful. |
| Expected rejection or non-action | The owner explicitly admits the result, the candidate is not newer, or a run was superseded. | Record the reason and take no repair action. |
| Clean | The expected run completed successfully and produced its required evidence. | No action. |

Never label a failure transient merely because a retry might pass. Require an
external symptom such as runner provisioning, service outage, rate limiting, or
a known nondeterministic infrastructure failure plus unchanged-source evidence.
Use GitHub's rerun operation so the head SHA remains fixed:

```bash
gh run rerun <run-id> --failed
```

Before manually dispatching a missing schedule, confirm there is no queued or
in-progress run for that workflow and that the workflow remains enabled on
`main`. Dispatch the same workflow with its scheduled defaults; do not use
diagnostic overrides as a substitute for the scheduled contract. Deep Inspect
is the exception because one workflow routes several cron-specific lanes: use
the `deep-inspect` skill to reproduce the missing schedule's exact lane set
rather than assuming its default `test` dispatch covers the whole 06:00 run.

## Report

Lead with the overall state and the first action. Keep the report compact:

```text
Daily operations — 2026-07-14 UTC
Main: <sha>
Overall: blocker | attention | clean

Priority:
1. <owner>: <classification>, <run or issue>, <next required action>

Clean/no-action:
- <workflow>: <run>, <classification and concise reason>

Outstanding:
- Runtime pin: <none | branch and age>
- Nightly failures: <none | issue list>
```

Order actions by: security or dependency exposure; current-main CI or staging;
release-certification and regression blockers; pin advancement blockers;
meaningful performance or corpus drift; housekeeping. Include accepted
transients and expected rejections under clean/no-action so they do not obscure
real work.

Do not merge pull requests, delete proposal branches, publish packages, promote
deployments, approve environments, or change baselines without the existing
task-specific authorization and workflow.