Skip to content

ci: report action, semver gate holes, Dependabot dirs, README resize - #614

Merged
vyncint merged 6 commits into
mainfrom
fix/ci-docs-597-600
Oct 27, 2026
Merged

vyncint merged 6 commits into
mainfrom
fix/ci-docs-597-600

Conversation

@vyncint

@vyncint vyncint commented Oct 27, 2026

Copy link
Copy Markdown
Owner

Four CI and docs issues.

#597 — the report action. insta's default INSTA_UPDATE=auto writes no .snap.new when CI is set (insta 1.49 env.rs), so on GitHub Actions the action never had a snapshot to show. The README, the action's README, the skill, and this repo's own test step now set INSTA_UPDATE: new, with the reason; inline snapshots (.pending-snap, JSON records for cargo insta review) are documented as not rendered, and the "nothing found" summary says both. Separately, the render step's find exited 1 on any unreadable directory and pipefail ended the step before it wrote a line; both finds now keep their output and drop their status. New tools/report-action-selftest/run.sh runs the step body from action.yml with a stub CLI (an unreadable directory, a .snap.new, nothing to show); it is in gates-listed and CONTRIBUTING §1, and removing either || true, the INSTA_UPDATE sentence or the target/ prune turns exactly one case red.

#598 — the semver gate's two holes.

  • One declared break disarmed the gate. When the break is declared only by - **Breaking bullets the base already had (no label, no new bullet), the gate now also runs --baseline-rev "$BASE_REV" --release-type patch, so only a new break fails. CI passes the PR's base SHA, or github.event.before on a push (the job now checks out with fetch-depth: 0); a tag push (all zeros) skips the second check and says so.
  • Single-feature moves were invisible. One --only-explicit-features --features <f> view per feature, read from the manifest (decode, regex, serde).
  • tools/semver-gate-selftest/ now proves both closed — 20 expectations, 44 s locally — including "a second removal once a break is declared" (exit 1) and "find moved from regex to regex and serde" (exit 1). STABILITY.md and RELEASING.md describe exactly what the gate checks.

#599 — Dependabot. directories: ["/", "/.github/actions/*"], so the composite action's pins are updated too; actions/upload-artifact moved to cf430e0… # v7.0.2 (SHA checked with gh api). stale.md and the historical (0.11.1, #313) comment are untouched.

#600 — README. The resize row waits with wait_until (stock ratatui never emits DEC 2026, so wait_frame timed out), and the torn-frame row says it applies to applications that emit synchronized updates.

Locally: both selftests, the report-pin selftest, and zizmor pedantic pass.

Closes #597
Closes #598
Closes #599
Closes #600

The render step ran `find .` under `set -euo pipefail`. find exits 1 on
any directory it cannot read, so a root-owned cache or a chmod 000 test
fixture in the workspace ended the step before the summary had a line and
before anything was uploaded. Both finds now keep their output and drop
their status.

insta's default, INSTA_UPDATE=auto, writes no .snap.new once CI is set
(insta 1.49.0 src/env.rs), so the setup the README, the action's README
and the skill showed never left a snapshot for the action on GitHub
Actions. Every snippet, and this repository's own test step, now sets
INSTA_UPDATE: new. Inline snapshots go to .pending-snap files, JSON
records the CLI does not read; they are not collected, and the action's
README and its "nothing found" summary say so.

tools/report-action-selftest/run.sh runs the step out of action.yml with
a stub CLI: an unreadable directory beside a .snap.new and inside the
artifact directory, and a run with nothing to show. Removing either
`|| true`, the INSTA_UPDATE sentence or the target/ prune turns it red.

Closes #597

Signed-off-by: Vyncint Ng <115854244+vyncint@users.noreply.github.com>
Two holes in check-semver.sh, both now asserted closed by the self-test:

- One `- **Breaking` bullet under [Unreleased] switched every later run
  to --release-type major, which accepts any break, so a second,
  undeclared removal passed on its own pull request and again on main.
  When the break is declared only by bullets the base revision already
  had (no label, no bullet added), the tree is now checked a second time
  against that revision with --baseline-rev and --release-type patch:
  the declared break is part of that baseline, and only a new one fails.
  ci.yml passes the revision as BASE_REV (the pull request's base SHA,
  or github.event.before on a push) and checks out the full history.
  The tag push from release.yml reports forty zeros and keeps the old
  behaviour, which the log and the summary say; its commit had the
  second check on its push to main.
- STABILITY.md promises each single feature, but only the default,
  explicit-only and all-features views ran, and an item moved from
  `regex` to `regex` + `serde` is invisible to all three. Each feature
  the manifest declares now gets an --only-explicit-features --features
  view of its own (decode, regex and serde today).

tools/semver-gate-selftest/ gains moved/, a model where `find` goes from
`regex` to both, and runs the gate itself end to end in a scratch
history: a declared break, a second removal on top of it, the same with
the label, without a base and with forty zeros, an addition, the release
that moves the bullet, and the moved item. Removing the second check,
the per-feature views, the added-bullet detection, the zeros handling or
the release-section read each turns it red.

STABILITY.md and RELEASING.md say what the gate checks now, and what it
still does not: the rest of a pull request that declares its own break.

Closes #598

Signed-off-by: Vyncint Ng <115854244+vyncint@users.noreply.github.com>
The github-actions entry had `directory: /`, which covers the workflows
and not .github/actions/report/action.yml, the composite action other
repositories run. Its upload-artifact pin stayed at v7.0.1 while
windows.yml moved to v7.0.2. The entry now lists
["/", "/.github/actions/*"] and keeps the actions-minor-patch group.

The pin moves to v7.0.2 in the same change: cf430e03 is what
`gh api repos/actions/upload-artifact/git/ref/tags/v7.0.2` returns, a
commit object, and the SHA windows.yml already pins.

Closes #599

Signed-off-by: Vyncint Ng <115854244+vyncint@users.noreply.github.com>
The "Invisible to TestBackend" table is written for ratatui users, and
its resize row waited with wait_frame, which waits for DEC 2026
synchronized updates. Stock ratatui 0.30 with crossterm emits none
(SKILL.md rule 8; ratatui 0.30.2, ratatui-core and ratatui-crossterm
contain no SynchronizedUpdate), so the recipe timed out for exactly the
readers it addressed. It now resizes and waits with wait_until. The
torn-frame row says it applies to an application that emits DEC 2026,
which stock ratatui does not.

Closes #600

Signed-off-by: Vyncint Ng <115854244+vyncint@users.noreply.github.com>
Named termlens so the gate script would check them, the four models made
cargo-semver-checks find the real crate's name in five manifests under
the repository, and the semver job refused termlens as ambiguous. They
are gate-model again, and the script takes SEMVER_GATE_PACKAGE, which
only the selftest sets. The real gate passes in all six views locally.

Signed-off-by: Vyncint Ng <115854244+vyncint@users.noreply.github.com>
Resolves the CHANGELOG conflict with #613: both sets of entries kept.

Signed-off-by: Vyncint Ng <115854244+vyncint@users.noreply.github.com>
@vyncint
vyncint merged commit 29f11d5 into main Oct 27, 2026
16 checks passed
@vyncint
vyncint deleted the fix/ci-docs-597-600 branch October 27, 2026 10:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

1 participant