Skip to content

CI and doc hardening: release lint, source-wide deprecated-API scan, VirusTotal links, brace-expansion floors, doc drift - #38

Merged
ckelsoe merged 5 commits into
mainfrom
fix/ci-repo-docs-hardening
Aug 7, 2026
Merged

CI and doc hardening: release lint, source-wide deprecated-API scan, VirusTotal links, brace-expansion floors, doc drift#38
ckelsoe merged 5 commits into
mainfrom
fix/ci-repo-docs-hardening

Conversation

@ckelsoe

@ckelsoe ckelsoe commented Aug 7, 2026

Copy link
Copy Markdown
Owner

What

The "Repo and CI gaps" and doc-drift items from the handoff — none blocking, all real.

release.yml — lint on release. CI lints every PR, but a tag can be pushed at a commit CI never covered, so the release could cut an unlinted build. Added npm run lint before build (before build because check-submission scans sources, and main.js doesn't exist yet).

release.yml — VirusTotal links surfaced. The scan ran before the release was created and had no id:, so its analysis URLs lived only in the workflow log. The step now has id: virustotal and its URLs are folded into the release notes (passed via env, not inline ${{ }}; guarded on a non-empty CHANGELOG-derived notes file so it can't turn a --generate-notes fallback into a notes-only-VirusTotal release).

ci.yml — deprecated-API scan covers all sources. It grepped only main.ts, missing a deprecated call in any of the ~30 other modules. Now scans every source .ts. Sources rather than the built bundle, because the production bundle is minified and rewrites getLeaf(true) to getLeaf(!0), which the boolean-argument pattern would miss.

package.json — brace-expansion floors. Raised the override floors to ^1.1.18 / ^2.1.4, the versions patched for GHSA-rgw5-rvv9-x895. The old floors (^1.1.13 / ^2.0.3) sat below the patch, so the override permitted a vulnerable resolution even though the current tree is already patched. Lockfile is consistent (npm ci clean).

README.md — missing features. Documented "Clear orphaned stars" and the once-per-note broken-marker warning, both of which shipped (1.14.0) but were absent from the feature list.

.github/copilot-instructions.md — doc drift from #30/#31. The marker format escapes the opener (<!--\<!--) as well as the terminator; and check-submission also rejects regex lookbehind. Both landed in #30/#31 and the instructions still described the old behavior.

Not in this PR (flagged for a decision)

  • Pin actions by SHA (item 9): DONE for annoteca in this PR (every action pinned to a commit SHA). NOT rolled out to the template or other plugins, per the leave-other-plugins-alone freeze; a fleet pass + Dependabot is a separate task.
  • Branch protection on main (item 12): a repo admin setting, not a code change.

Review note

Codex pre-commit hit its usage limit and couldn't run; the changes are CI config + docs with simple, YAML-validated shell (the one shell-logic step passes the action output via env). CodeRabbit is the merge gate.

…VirusTotal links, brace-expansion floors, doc drift

Repo and CI gaps from the handoff, none blocking but all real.

- release.yml: run npm run lint before build. CI lints every PR, but a tag can be
  pushed at a commit CI never covered, so the release could cut an unlinted build.
  Runs before build because check-submission scans sources.

- release.yml: give the VirusTotal step an id and fold its analysis URLs into the
  release notes. The scan ran before the release was created and its links were
  only in the workflow log; they now land on the release itself. Passed via env,
  guarded on a non-empty CHANGELOG-derived notes file.

- ci.yml: the deprecated-API scan now covers every source .ts, not the main.ts
  entry point alone, so a deprecated call in any other module is caught. Sources
  rather than the minified bundle, which rewrites getLeaf(true) to getLeaf(!0).

- package.json: raise the brace-expansion override floors to 1.1.18 / 2.1.4, the
  versions patched for GHSA-rgw5-rvv9-x895. The old floors (1.1.13 / 2.0.3) sat
  below the patch, so the override permitted a vulnerable resolution even though
  the current tree is already patched.

- README.md: document Clear orphaned stars and the once-per-note broken-marker
  warning, both shipped but absent from the feature list.

- copilot-instructions.md: the marker format escapes the opener as well as the
  terminator, and check-submission also rejects regex lookbehind. Both landed in
  #30/#31 and the instructions still described the old behavior.
Copilot AI lite review requested due to automatic review settings August 7, 2026 15:51
@coderabbitai

coderabbitai Bot commented Aug 7, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@ckelsoe, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 50 minutes

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: bb0467c8-ddcc-4b36-8c51-c025fa895ef1

📥 Commits

Reviewing files that changed from the base of the PR and between 970d7fc and 2395268.

📒 Files selected for processing (1)
  • .github/workflows/release.yml
📝 Walkthrough

Summary by CodeRabbit

  • Documentation

    • Added guidance for escaping comment markers in free-text submissions.
    • Documented warnings and repair instructions for malformed markers.
    • Added troubleshooting guidance for clearing orphaned stars.
  • Release Improvements

    • Release notes can include links to completed security scan results.
    • Generated notes are preserved when no changelog content is available.
    • Added linting and improved release validation steps.
  • Quality & Security

    • Improved compatibility checks for older iOS versions.
    • Expanded deprecated API scanning and strengthened workflow integrity.
    • Updated security-related package safeguards.

Walkthrough

The PR updates marker-format and diagnostics documentation, pins CI and release actions, broadens deprecated API scanning, adds release linting and VirusTotal links, and raises brace-expansion override ranges.

Changes

Marker Guidance and Diagnostics

Layer / File(s) Summary
Marker handling and diagnostics guidance
.github/copilot-instructions.md, README.md
Documents escaping for both comment delimiters, broken-marker warnings and repair guidance, orphaned-star diagnostics, and regex lookbehind checks.

CI and Release Automation

Layer / File(s) Summary
CI validation and action pinning
.github/workflows/ci.yml
Pins CI actions to commit SHAs and recursively scans TypeScript files for deprecated APIs while excluding declarations, dependencies, tests, and mocks.
Release validation and scan reporting
.github/workflows/release.yml
Pins release actions, disables npm caching, runs lint before tests and builds, and appends VirusTotal links when release notes contain non-whitespace content.

Dependency Override Maintenance

Layer / File(s) Summary
brace-expansion override ranges
package.json
Updates the version override ranges for brace-expansion versions 1 and 2.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Sequence Diagram(s)

sequenceDiagram
  participant ReleaseWorkflow
  participant VirusTotal
  participant ReleaseNotes
  ReleaseWorkflow->>VirusTotal: Upload artifacts and receive analysis output
  ReleaseWorkflow->>ReleaseNotes: Read extracted release notes
  ReleaseWorkflow->>ReleaseNotes: Append VirusTotal links when notes contain non-whitespace content
Loading

Possibly related PRs

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly summarizes the main CI, dependency, release, scanning, and documentation changes.
Description check ✅ Passed The description directly explains the workflow, dependency, documentation, and scope changes in the pull request.
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.

Copilot AI 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.

Pull request overview

Hardens the repo’s CI/release pipeline and documentation to close gaps called out in the handoff: ensuring releases run the same lint gates as PR CI, expanding the deprecated-Obsidian-API scan to all TypeScript sources, surfacing VirusTotal analysis links in release notes, tightening the brace-expansion override floors, and updating docs to reflect recent marker-format and lint-policy behavior.

Changes:

  • Add npm run lint to the release workflow and append VirusTotal analysis URLs into CHANGELOG-derived release notes.
  • Expand the deprecated Obsidian API scan in CI from main.ts to all root *.ts sources.
  • Raise brace-expansion override floors and update README / Copilot instructions to reflect shipped features and format/tooling drift.

Reviewed changes

Copilot reviewed 5 out of 5 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
README.md Documents orphaned-star cleanup and the broken-marker warning behavior.
package.json Raises brace-expansion override minimums to patched versions.
.github/workflows/release.yml Runs lint in releases and appends VirusTotal links into release notes.
.github/workflows/ci.yml Scans all .ts sources for deprecated Obsidian API usage (but needs a small grep fix).
.github/copilot-instructions.md Updates instructions to reflect opener+terminator escaping and lookbehind lint rules.
Suppressed comments (1)

.github/workflows/ci.yml:98

  • Same issue as above: \b is not a word-boundary in default grep, so this check may miss .noticeEl usage. Use an explicit boundary in an ERE (or grep -P).
          if grep -n "\.noticeEl\b" $SOURCES; then

Comment thread .github/workflows/ci.yml Outdated

# workspace.activeLeaf — deprecated, use getActiveViewOfType()
if grep -n "\.activeLeaf\b" main.ts; then
if grep -n "\.activeLeaf\b" $SOURCES; then
Every action in ci.yml and release.yml is pinned to a full commit SHA with the
version kept as a trailing comment, so a moved tag cannot swap the action out
from under a build (including inside the attestation-signing job). Closes the
SHA-pin gap for annoteca.

Annoteca only, on purpose: the standing rule is to leave every other plugin
alone, so this is NOT rolled out to the template or the other plugins. A fleet
pass (template + back-fill + a Dependabot github-actions config so the pins do
not rot) is a separate task for when that freeze lifts.

@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: 3

🤖 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 @.github/workflows/release.yml:
- Line 94: Update the release-note guard in the workflow to test for
non-whitespace content rather than file size, and apply the identical check in
the create-release branch that chooses between --notes-file and
--generate-notes. Preserve the existing behavior for genuinely empty or
whitespace-only release notes.
- Around line 23-27: Disable dependency caching in the release workflow’s “Use
Node.js” setup-node step by setting package-manager-cache to false, removing the
existing npm cache configuration as appropriate while preserving the Node.js
version and release behavior.
- Line 21: Disable checkout credential persistence by adding
persist-credentials: false to the checkout steps at
.github/workflows/release.yml:21, .github/workflows/ci.yml:21,
.github/workflows/ci.yml:124, and .github/workflows/ci.yml:140; no other
workflow behavior should change.
🪄 Autofix

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: 247b26f3-ea66-489b-93b1-b7bc6d43b46f

📥 Commits

Reviewing files that changed from the base of the PR and between 6e32506 and 3fa206a.

📒 Files selected for processing (5)
  • .github/copilot-instructions.md
  • .github/workflows/ci.yml
  • .github/workflows/release.yml
  • README.md
  • package.json

Comment thread .github/workflows/release.yml
Comment thread .github/workflows/release.yml Outdated
Comment thread .github/workflows/release.yml Outdated
ckelsoe added 2 commits August 7, 2026 14:02
- ci.yml: rewrite the deprecated-API scan as a shell function with recursive
  --include/--exclude, so it depends on neither a word-split file list (which
  breaks under zsh) nor \b (which grep without -P treats as a backspace).
  Explicit ERE boundaries instead. Verified locally: clean on the tree, and it
  still catches a planted usage.
- Both workflows: persist-credentials: false on every checkout that does not run
  authenticated git later, so a compromised step cannot reuse the job token.
- release.yml: drop the npm cache in the release job. It runs with contents,
  id-token, and attestations write plus VT_API_KEY, so it must not restore an
  untrusted dependency cache. CI keeps its cache.
- release.yml: guard the release notes on non-whitespace content, not file size,
  in both the VirusTotal-append step and the create-release branch, so a lone
  blank line from awk is not mistaken for real notes.
@ckelsoe

ckelsoe commented Aug 7, 2026

Copy link
Copy Markdown
Owner Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Aug 7, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@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: 1

🤖 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 @.github/workflows/release.yml:
- Around line 25-30: Update the “Use Node.js” setup-node configuration to
explicitly set package-manager-cache to false, preserving the existing no-cache
intent and explanatory comment.
🪄 Autofix

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: 56f9d5e7-4e1b-4ddb-b1da-670898e8c822

📥 Commits

Reviewing files that changed from the base of the PR and between 3fa206a and 970d7fc.

📒 Files selected for processing (2)
  • .github/workflows/ci.yml
  • .github/workflows/release.yml
🚧 Files skipped from review as they are similar to previous changes (1)
  • .github/workflows/ci.yml

Comment thread .github/workflows/release.yml Outdated
setup-node auto-caches (package-manager-cache defaults true) when package.json
declares npm, so omitting cache: npm was not enough to keep the privileged
release job off an untrusted dependency cache. Addresses CodeRabbit on #38.
@ckelsoe

ckelsoe commented Aug 7, 2026

Copy link
Copy Markdown
Owner Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Aug 7, 2026

Copy link
Copy Markdown
⚠️ Action not completed

Review rate limited.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@ckelsoe
ckelsoe merged commit f03ac57 into main Aug 7, 2026
4 checks passed
@ckelsoe
ckelsoe deleted the fix/ci-repo-docs-hardening branch August 7, 2026 19:57
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.

2 participants