Skip to content

Docs: realign ci.md with the gates it describes - #1617

Merged
ChaoWao merged 1 commit into
hw-native-sys:mainfrom
ChaoWao:docs/ci-gating-drift
Jul 31, 2026
Merged

Docs: realign ci.md with the gates it describes#1617
ChaoWao merged 1 commit into
hw-native-sys:mainfrom
ChaoWao:docs/ci-gating-drift

Conversation

@ChaoWao

@ChaoWao ChaoWao commented Jul 31, 2026

Copy link
Copy Markdown
Collaborator

Summary

docs/ci.md had drifted from ci.yml in four places, all introduced by #1601 / #1607 / #1609 and all reading as statements of fact:

Where Was Is
job tree no profiling-flags-smoke row at all present, ubuntu-latest, (a2a3_changed || a5_changed) && !examples_only
job tree detect-changes outputs 4 flags 5 — examples_only was missing
scheduling constraints "computes three flags" four axes; the next two bullets already described the other two, so the paragraph contradicted its neighbours
job table st-onboard-a2a3 runs a bare pytest examples tests/st -m "not sdma" plus a dedicated -m sdma step on its own devices

The last one is the one that misleads in practice: it is the table a reader uses to mirror a job locally, and following it reproduces the sweep without the SDMA isolation.

Also adds the SDMA device split to the scheduling-constraints list — it is a scheduling constraint in its own right — naming #1425 as the condition for removing it, and noting that nothing outside st-onboard-a2a3 filters on the marker so a local pytest examples tests/st is not silently narrower.

No behaviour change; docs/ only.

Testing

  • Verified every if: in ci.yml against the doc's claims: 9 gated jobs match, and the only ungated ones are pre-commit and detect-changes, exactly as documented
  • Confirmed st-onboard-a5 genuinely has no -m filter, so its row was already correct and is untouched
  • Swept the other ~30 pytest examples tests/st mentions across the repo — they are local-run instructions, correctly unfiltered, and deliberately left alone
  • This PR is non_code_only, so every job except pre-commit and docs should report skipping — a live check of the gates it documents

@coderabbitai

coderabbitai Bot commented Jul 31, 2026

Copy link
Copy Markdown

Review Change Stack

Important

Review skipped

Auto incremental reviews are disabled on this repository.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 05277aae-02f9-4b7c-add4-efdb14d0b3f5

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

The CI documentation adds profiling and example-corpus detection outputs. It expands change-detection axes and documents separate SDMA execution for the st-onboard-a2a3 scene-test job.

Changes

CI scheduling documentation

Layer / File(s) Summary
CI scheduling and SDMA execution documentation
docs/ci.md
The documentation adds profiling-flags-smoke and examples_only, defines four change-detection axes, and describes separate SDMA test execution with dedicated device acquisition and fault isolation.

Estimated code review effort: 1 (Trivial) | ~5 minutes

Possibly related PRs

Poem

A rabbit reads the CI guide,
Four change axes now hop inside.
SDMA tests take their own device,
Profiling smoke runs precise.
“Clear paths!” the rabbit cries.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly and concisely describes the main documentation change: aligning ci.md with current CI gates.
Description check ✅ Passed The description directly explains the documentation discrepancies, corrections, scope, and testing performed.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🤖 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/ci.md`:
- Line 48: Update the st-onboard-a2a3 workflow description in docs/ci.md to
state that SDMA is a separate sequential pytest step, with ARM64 devices
acquired through task-submit and x86_64 devices acquired directly via
${DEVICE_RANGE}. Clarify that the general and SDMA steps reuse the
architecture-specific device range rather than implying a disjoint allocation.
- Line 132: Update the documentation in the `detect-changes` section to
correctly describe empty PR diff handling. The current wording implies all flags
including examples_only are set to true, but actually only the architecture and
test category flags are true while examples_only remains false. Remove or
clarify the "every arch and category flag true" phrasing to accurately represent
that examples_only is false in the empty diff case, preventing the false
implication that packaging and profiling would run under that path.
🪄 Autofix (Beta)

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: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 9d4296b1-3876-4ac0-9aa9-b97c19c54c68

📥 Commits

Reviewing files that changed from the base of the PR and between 80aa287 and ad27dc9.

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

Comment thread docs/ci.md Outdated
Comment thread docs/ci.md
@ChaoWao
ChaoWao force-pushed the docs/ci-gating-drift branch from ad27dc9 to b2088ec Compare July 31, 2026 13:01
`docs/ci.md` is the page a reader consults to learn what CI actually runs, so
each of these read as a statement of fact and each was false.

- **`profiling-flags-smoke` was missing from the job tree entirely.** It exists,
  runs on `ubuntu-latest`, and is gated `(a2a3_changed || a5_changed) &&
  !examples_only`. The prose two sections down already discussed it, so the tree
  was the only place that denied it.
- **`detect-changes` was listed as emitting four outputs, not five.**
  `examples_only` was absent.
- **"computes three flags (`a2a3_changed`, `a5_changed`, `non_code_only`)"** —
  the two bullets immediately following it describe the test-category and
  example-corpus axes, so the paragraph contradicted its own neighbours. It now
  names all four axes and keeps the load-bearing claim, that every one of them
  derives from a single `NON_CODE` set.
- **`st-onboard-a2a3` was described as a bare `pytest examples tests/st`.** The
  sweep deselects `-m "not sdma"` and a separate step runs `-m sdma`. A reader
  mirroring the job from this table reproduced the sweep without the isolation
  and would not learn why their SDMA case behaved differently. `st-onboard-a5`
  has no marker filter and its row was already correct.

The scheduling-constraints list gains the SDMA split as a constraint in its own
right, and separates the part that always holds from the part that does not.
Ordering holds on both host arches — the SDMA step is second, so no
fault-injection case can meet a device that has already provisioned SDMA.
Device disjointness holds only on aarch64, where the step takes its own
`task-submit --device auto`; the x86_64 branch has no `task-submit` and reuses
`${DEVICE_RANGE}`, so ordering is its only separation. The bullet names hw-native-sys#1425
as the condition for dropping the split, and states that nothing outside
`st-onboard-a2a3` filters on the marker, so a local `pytest examples tests/st`
is not silently narrower.

The empty-diff paragraph now lists `examples_only=false` alongside the flags the
guard sets. It was scoped to "every arch and category flag", which excluded
`examples_only` correctly but left the reader to guess — and it is the value
that makes "running the full matrix" include packaging and the profiling smoke.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@ChaoWao
ChaoWao merged commit 47a65e1 into hw-native-sys:main Jul 31, 2026
14 checks passed
@ChaoWao
ChaoWao deleted the docs/ci-gating-drift branch July 31, 2026 13:20
ChaoWao added a commit that referenced this pull request Aug 2, 2026
`st-onboard-a2a3` has been two pytest invocations since #1609 — the sweep with
`-m "not sdma"` and a later step with `-m sdma`, so that no fault-injection case
meets a device that has already provisioned SDMA (#1425). Three places that
claim to reproduce that job still issued one flat sweep, which is the invocation
`.claude/skills/testing/SKILL.md` warns "is *not* what CI runs and will report
failures that CI never sees".

- **`test-all-device`** describes itself as running "the full hardware (onboard)
  CI pipeline" and already reads `--pto-session-timeout` out of the
  `st-onboard-<platform>` job. It now reads the marker expression from the same
  place, and runs the second pass after the first. Taking both from `ci.yml`
  rather than hardcoding them is what keeps the skill from drifting again.
- **`test-runtime-device`** likewise. Both quarantined tests are
  `tensormap_and_ringbuffer`, so the second pass is noted as needed only when
  that runtime is selected.
- **`docs/ci.md`'s "Recommended CI invocation"** block, which #1617 missed while
  correcting the job table three sections above it. The a5 line is unchanged —
  `st-onboard-a5` carries no marker filter.

Left alone: the recipes that describe running the tests locally rather than
mirroring a job (`README.md`, `docs/testing.md`, `docs/user/reference/cli.md`,
`examples/README.md`, the `SUBMIT_BY_CLUSTER.md` trio). Whether a local sweep
should exclude SDMA by default is a question about the documented default, not
about matching CI, and `testing/SKILL.md` already tells anyone who trips over it
what happened.
ChaoWao added a commit that referenced this pull request Aug 2, 2026
Everywhere a doc told the reader to run the full a2a3 scene-test sweep on real
hardware, it gave a bare `pytest examples tests/st --platform a2a3` — the exact
invocation `.claude/skills/testing/SKILL.md` warns "is *not* what CI runs and
will report failures that CI never sees": it mixes the SDMA cases with the
`sweep's` `aicore_op_timeout` fault-injection test, which is the collision the
dedicated SDMA step exists to prevent (#1425, and the ~306 s fault teardown an
SDMA-provisioned device pays).

All nine sites now carry `-m "not sdma"` and name the marker, so a local sweep
reproduces CI instead of surprising it:

- `README.md`, `docs/user/reference/cli.md`, `examples/README.md` — hardware
  scan lines
- `docs/testing.md` — both hardware scan sites; the first gains the separate
  `-m sdma` pass after it, with the reason
- `docs/troubleshooting/a2a3-507899-aicpu-shared-so-fault.md` — the repro scan
- `src/{a2a3,a5}/runtime/{tensormap_and_ringbuffer,host_build_graph}/docs/
  SUBMIT_BY_CLUSTER.md` — the three final-validation scans

Sim lines and single-directory invocations are untouched — the marker only
matters where SDMA and fault injection can meet. `st-onboard-a5` carries no
marker filter, so a5 scan lines stay as they were.

The two `ci.yml` comments claiming the SDMA step runs "on its own dedicated
device(s)" get the same correction applied to the docs in #1617: device
disjointness holds only on aarch64, where the step takes
`task-submit --device auto`; the x86_64 branch shares `${DEVICE_RANGE}` with
the sweep and ordering is the separation. Left deferred since #1617 because
touching `ci.yml` books the whole matrix — this change does that anyway.
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.

1 participant