Skip to content

test: close 3 real test-coverage gaps + drop stale shellcheck exclusions - #99

Merged
baxyz merged 7 commits into
mainfrom
test/close-coverage-gaps
Sep 9, 2026
Merged

test: close 3 real test-coverage gaps + drop stale shellcheck exclusions#99
baxyz merged 7 commits into
mainfrom
test/close-coverage-gaps

Conversation

@baxyz

@baxyz baxyz commented Sep 9, 2026

Copy link
Copy Markdown
Contributor

Summary

Verified findings from a review report before acting — one claim didn't hold up (see below), the rest did:

  • Stale shellcheck exclusions: path-keys.sh doesn't exist anymore (removed in dotfiles-sync's opt-in SSH keys refactor); sync-files.sh now passes shellcheck -S warning clean (verified directly, no output). Only gh-auth.sh legitimately needs the exclusion (sourced from /etc/profile.d/, can't carry a shebang — SC2148).
  • copilot-dev: zero test coverage — no test/ directory, absent from both CI matrices. The published feature (v1.0.4) had never once been exercised by CI. Added a test asserting the documented behavior in both cases (gh copilot extension installed when gh is present, graceful skip when it isn't).
  • essential-dev/test.sh was a no-op — two echo lines regardless of what install.sh did. Now asserts the feature's real build-time artifact: the two git aliases (alias.fixup, alias.polish).
  • cline-dev/mistral-dev missing installCli:true scenarios — the exact same silent-degradation gap class claude-dev just got a scenario for (test: add scenarios.json testing pattern, close claude-dev's installCli gap #97). Both install scripts already degrade gracefully and correctly, but the true-install path had zero CI coverage. Verified directly: installs cline 3.0.61 and vibe (via pip, Python 3.12) correctly through both real installers.

One claim in the report was a false positive: "helpers4's self-heal" phrasing supposedly leaking into 15 READMEs — checked every occurrence, all 15 are inside Version History changelog entries describing the old wording that was replaced, not live in the callout text. No fix needed there.

Two items from the report are left as backlog, not bundled here: alerting on test.yml's continue-on-error failures (bigger, separate notification mechanism) and typescript-dev/test.sh's minimal no-op (low priority, IDE-config-only feature).

Test plan

  • shellcheck -S warning clean on all touched scripts
  • Verified cline-dev/mistral-dev scenarios directly against the real installers in a container
  • Verified essential-dev's enriched test.sh against the real feature
  • CI green on this PR

path-keys.sh doesn't exist anymore (removed in dotfiles-sync's opt-in SSH
keys refactor) and sync-files.sh now passes shellcheck clean (verified
directly: shellcheck -S warning src/dotfiles-sync/sync-files.sh, no
output). Only gh-auth.sh legitimately needs the exclusion — it's sourced
from /etc/profile.d/ and can't carry a shebang (SC2148).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Sep 9, 2026

Copy link
Copy Markdown

✅ PR Validation Passed

All checks passed!


📋 Pipeline Status

Job Status
🧾 Conventional Commits passing
🔖 Version Bump passing
🧪 Feature Tests passing
🧪 Scenario Tests passing
🐚 ShellCheck passing

🤖 Generated by @helpers4 CI • 2026-09-09

@baxyz
baxyz force-pushed the test/close-coverage-gaps branch from d59dcbf to 0120158 Compare September 9, 2026 21:30
baxyz and others added 6 commits September 9, 2026 21:54
This feature had no test/ directory at all and no CI matrix entry in
either workflow — the published feature had never once been exercised by
CI. Adds a test.sh that asserts the documented behavior for both cases it
can hit: the gh copilot extension installed when gh is present, or the
graceful skip when it isn't (copilot-dev has no dependsOn on github-dev by
design, so the latter is what a standalone install actually gets by
default).

No version bump — test-only, invisible to consumers.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
test.sh was a no-op — two echo lines regardless of what install.sh
actually did. The feature's one real, build-time artifact (git config
--system alias.fixup/alias.polish) was never verified. Now asserts both
aliases resolve to their expected values.

No version bump — test-only, invisible to consumers.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Same gap class claude-dev just got a scenario for: install.sh already
degrades gracefully (warns instead of aborting) on a failed npm install,
which is correct — but installCli defaults to false and test.sh only ever
asserted the CLI's *absence* under default options. The true-install path
had zero CI coverage.

Verified directly: devcontainer features test --features cline-dev
--skip-autogenerated . installs cline 3.0.61 correctly.

No version bump — test-only, invisible to consumers.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Same gap class claude-dev just got a scenario for. install.sh's uv branch
in particular trusts uv tool install without verifying the binary
actually landed afterward — exactly the class of gap already found once
in vite-plus — and installCli defaults to false with zero prior CI
coverage of the true-install path.

Verified directly: devcontainer features test --features mistral-dev
--skip-autogenerated . installs vibe (via pip, Python 3.12) correctly.

No version bump — test-only, invisible to consumers.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Counterpart to pr-validation.yml's matrix updates from the shellcheck-fix
commit — this repo's push-to-main workflow needs the same entries.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…changes

Corrects an over-broad rule from #97: test/<name>/test.sh itself was kept
as a bump trigger there (reasoning: "the one file CI runs against every
consumer's build"), only exempting scenario files. That's still wrong —
test.sh is exactly as invisible to a consumer as a scenario file. A
version bump publishes a new GHCR tag and triggers a website docs
rebuild; doing that for a change nobody running the feature can see is
pure noise, not a safety measure.

Narrows the check to src/<name>/ (minus README) only. Nothing under
test/<name>/ ever requires a bump anymore. Updated AGENTS.md's "Modifying
an existing feature" and "Testing non-default options" sections to state
this explicitly, and reverted the version bumps this branch had already
added to copilot-dev and essential-dev for test-only changes.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@baxyz
baxyz force-pushed the test/close-coverage-gaps branch from 0120158 to e119823 Compare September 9, 2026 21:54
@baxyz
baxyz merged commit 7d58795 into main Sep 9, 2026
44 checks passed
@baxyz
baxyz deleted the test/close-coverage-gaps branch September 9, 2026 22:02
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