Repository navigation
fix: distinguish script packages in software lists - #53810
Conversation
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #53810 +/- ##
==========================================
+ Coverage 76.21% 76.23% +0.01%
==========================================
Files 4195 4194 -1
Lines 254495 254475 -20
Branches 14659 14663 +4
==========================================
+ Hits 193976 193999 +23
+ Misses 60343 60300 -43
Partials 176 176
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
|
Navigate logical layers of code changes, visualize relationships, and explore their blast radius. No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Repository: fleetdm/fleet/.coderabbit.yaml Review profile: CHILL Plan: Advanced Run ID: 📒 Files selected for processing (7)
Included review availability: Your plan provides up to 8 included reviews per hour; 7 remain after this review. WalkthroughA shared Priority: ➖ Normal Severity of issue fixed: Medium Merge Risk: ⚪ Minimal · up to Script packages are distinguishable in the two lists. No actionable issue is established that would prevent merging after normal checks. 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
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. Comment |
|
@marko-lisica what do you think of this solution? Another option is we can add an extension column in the UI |
|
@RachelElysia I like this solution. Just to confirm, we're changing only software inventory and setup experience > install software tables? |
|
@RachelElysia @marko-lisica Thanks for taking a look. Yes, the displayed name changes only in the Software Inventory and Setup experience > Install software tables. For script packages, both show the filename alongside the software name. I also updated the Install software search to match package filenames. |
|
@RachelElysia , do you have any further feedback on this when you get a chance? Happy to make changes if needed. |
There was a problem hiding this comment.
Warning
- Copilot's review of this pull request may be incomplete because some of the changed files are excluded by your Copilot content exclusion settings. See Excluding content from Copilot for details.
Copilot review overview
🟡 Changes recommended
Script packages remain indistinguishable in the All fleets Software Inventory view because those responses omit package metadata.
Review effort: Balanced
Findings: 1
Open (1)
What changed in this PR
Distinguishes script-only packages with identical titles in software lists.
Changes:
- Appends package filenames to script-package labels.
- Adds filename matching to Setup Experience search.
- Adds regression tests for both affected tables.
| File | Description |
|---|---|
changes/53696-distinguish-script-packages |
Change entry; content excluded from review. |
frontend/pages/SoftwarePage/helpers.tsx |
Adds shared script-package label formatting. |
frontend/pages/SoftwarePage/helpers.tests.tsx |
Tests label formatting. |
frontend/pages/SoftwarePage/SoftwareInventory/SoftwareInventoryTable/SoftwareInventoryTableConfig.tsx |
Uses formatted labels in inventory. |
frontend/pages/SoftwarePage/SoftwareInventory/SoftwareInventoryTable/SoftwareInventoryTable.tests.tsx |
Tests distinct inventory rows. |
frontend/pages/ManageControlsPage/SetupExperience/cards/InstallSoftware/components/InstallSoftwareTable/InstallSoftwareTableConfig.tsx |
Updates labels and filename search. |
frontend/pages/ManageControlsPage/SetupExperience/cards/InstallSoftware/components/InstallSoftwareTable/InstallSoftwareTable.tests.tsx |
Tests distinct setup rows. |
Files excluded by content exclusion policy (1)
- changes/53696-distinguish-script-packages
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
| return { | ||
| name: softwareTitle.name, | ||
| displayName: softwareTitle.display_name, | ||
| displayName: getSoftwareListName(softwareTitle), |
There was a problem hiding this comment.
Script-only titles never appear in the All fleets view: without a fleet, ListSoftwareTitles only returns titles with host inventory counts (FALSE OR sthc.software_title_id IS NOT NULL), and script packages aren't reported as host software. So there's no All-fleets row to disambiguate; both views from #53696 are fleet-scoped and covered.
| : null; | ||
| return filename && filename !== name ? `${name} (${filename})` : name; | ||
| }; | ||
|
|
RachelElysia
left a comment
There was a problem hiding this comment.
Thanks for taking this one and sorry for any delays in reviewing, Prajwal! Looks good
**Related issue:** NA Adds Fleet's November 2026 newsletter (`articles/newsletter-2026-11.md`), which covers October 2026. It publishes at `fleetdm.com/newsletters/newsletter-2026-11`. - **Email subject line:** `Fleet news: November 2026` - **Category:** `newsletter`, singular, which the website build accepts (#52120). No website changes are needed. - **Author:** Aube Paul (`robinedev`), matching the September and October issues. ## Open questions for reviewers - **New "📺 Fleet Virtual Summit" section** for the November 10 LinkedIn Live event, placed before workshops. Keep it or fold it into the workshops section. If it stays, it's a new entry in the newsletter's section emoji table. - **The roadmap preview is linked even though November isn't a quarter's first month.** The October preview published October 13, after the October issue went out, so readers haven't seen it in the newsletter yet. - **Article and guide picks are editorial**, not based on traffic numbers. Reorder them if you have analytics. There were no case studies in October. - **The community section has one post, and it's personal.** Henry Stamerjohann's MacSysAdmin talk. Fleet's company-page post about the "Apple in the enterprise" research is another option, but it repeats the research article in "Worth reading." No engagement numbers were available. - **Community contributors with five or more merged PRs in October:** Prajwal Janbandhu (8, in the thank-you line), Michael Alt (6, highlighted), Dhvanit (6, returning, not named), and Shreyash Agare (5, returning, not named). Confirm none of them is a contractor whose account isn't in the org. - **Several first-time contributors only edited the handbook.** None appear in Fleet's Slack, so they stay in the thank-you line. ## How each section was sourced - **Shipped:** the Fleet 4.93.0 and 4.94.0 release articles, cross-checked against tagged releases. The three highlights are macOS patch notifications (Premium), Android zero-touch enrollment (Premium), and self-service configuration profiles (not Premium), so the section isn't all Premium. Patch releases 4.93.1 and 4.93.2 are covered by the "See every release" link. - **Planned:** the release planning board (view 10, filtered to milestone 4.95.0), not the milestone fallback. There are 22 stories, all assigned. 5.0.0 is due December 4, so November holds one release. - **Workshops:** fleetdm.com/workshops, with the next five after the send date. - **Community contributions:** PRs merged in public `fleetdm` repos in October by authors outside the `fleetdm` org, minus bots. ## Left out on purpose - **"Windows: force standard account"** was in the planned section in both September and October and hasn't shipped. It's not on the 4.95.0 board, so it isn't mentioned a third time. - **Multiple versions of the same App Store app** is named in the 4.94.0 release article's title, but the article marks it as moved to 4.95. It's listed under "Also on deck" instead of "shipped." - **Amsterdam workshop (November 3):** past by the time this sends. - **Fleet staff or contractors whose accounts aren't in the org:** @TraiLynne and @thomcrowe. Both are confirmed in Fleet's Slack. - **Other October content:** the warehouse inventory article and Retriever guide, the PHP2Shell and eMudhra pieces, and every `industry news` article. The routine doesn't feature that category. <details> <summary>Suggested <code>~/fleet-newsletters/contributors.tsv</code> lines (append once confirmed)</summary> ``` TraiLynne fleet Trai Lynne Compton, Fleet staff (Slack); not an org member thomcrowe fleet Thom Crowe, Fleet contractor (website); not an org member ``` </details> <details> <summary>Ledger append block: run only after this issue is sent</summary> `~/fleet-newsletters/ledger.jsonl` didn't exist before this issue. Repeats were checked against the September and October issues in the repo instead. This block creates the ledger and records every item in this issue. ```bash mkdir -p ~/fleet-newsletters && cat >> ~/fleet-newsletters/ledger.jsonl <<'EOF' {"issue":"2026-11","section":"shipped","id":"4.93.0"} {"issue":"2026-11","section":"shipped","id":"4.94.0"} {"issue":"2026-11","section":"planned","id":"51599"} {"issue":"2026-11","section":"planned","id":"39176"} {"issue":"2026-11","section":"planned","id":"51979"} {"issue":"2026-11","section":"planned","id":"53284"} {"issue":"2026-11","section":"planned","id":"33062"} {"issue":"2026-11","section":"planned","id":"52534"} {"issue":"2026-11","section":"planned","id":"47904"} {"issue":"2026-11","section":"events","id":"fleet-virtual-summit-2026"} {"issue":"2026-11","section":"events","id":"2003719976388"} {"issue":"2026-11","section":"events","id":"2003716644422"} {"issue":"2026-11","section":"events","id":"2002266719658"} {"issue":"2026-11","section":"events","id":"2002266872114"} {"issue":"2026-11","section":"events","id":"2002267524064"} {"issue":"2026-11","section":"articles","id":"apple-in-the-enterprise-2026"} {"issue":"2026-11","section":"articles","id":"nvidia-gtc-2026"} {"issue":"2026-11","section":"articles","id":"tailworm-what-to-do-about-tailscale-ssh-before-the-fix-ships"} {"issue":"2026-11","section":"articles","id":"revert-a-bad-change-in-gitops"} {"issue":"2026-11","section":"articles","id":"block-chrome-extensions"} {"issue":"2026-11","section":"articles","id":"block-edge-extensions"} {"issue":"2026-11","section":"articles","id":"block-firefox-extensions"} {"issue":"2026-11","section":"articles","id":"block-safari-extensions"} {"issue":"2026-11","section":"articles","id":"use-claude-code-with-fleet"} {"issue":"2026-11","section":"articles","id":"roadmap-preview-october-2026"} {"issue":"2026-11","section":"social","id":"7513481631123394560"} {"issue":"2026-11","section":"community","id":"#50836"} {"issue":"2026-11","section":"community","id":"#53407"} {"issue":"2026-11","section":"community","id":"#53670"} {"issue":"2026-11","section":"community","id":"#53768"} {"issue":"2026-11","section":"community","id":"#53810"} {"issue":"2026-11","section":"community","id":"#53824"} {"issue":"2026-11","section":"community","id":"#54019"} {"issue":"2026-11","section":"community","id":"#54181"} {"issue":"2026-11","section":"community","id":"#54296"} {"issue":"2026-11","section":"community","id":"#54411"} {"issue":"2026-11","section":"community","id":"#54502"} {"issue":"2026-11","section":"community","id":"#54509"} {"issue":"2026-11","section":"community","id":"#54592"} {"issue":"2026-11","section":"community","id":"#54685"} {"issue":"2026-11","section":"community","id":"#54708"} {"issue":"2026-11","section":"community","id":"#54726"} {"issue":"2026-11","section":"community","id":"#54785"} {"issue":"2026-11","section":"community","id":"#55056"} {"issue":"2026-11","section":"community","id":"#55058"} {"issue":"2026-11","section":"community","id":"#55072"} {"issue":"2026-11","section":"community","id":"#55089"} {"issue":"2026-11","section":"community","id":"#55097"} {"issue":"2026-11","section":"community","id":"#55127"} {"issue":"2026-11","section":"community","id":"#55249"} {"issue":"2026-11","section":"community","id":"#55266"} {"issue":"2026-11","section":"community","id":"#55353"} {"issue":"2026-11","section":"community","id":"#55471"} {"issue":"2026-11","section":"community","id":"#55492"} {"issue":"2026-11","section":"community","id":"#55547"} {"issue":"2026-11","section":"community","id":"#55841"} {"issue":"2026-11","section":"community","id":"#55900"} {"issue":"2026-11","section":"community","id":"#55903"} {"issue":"2026-11","section":"community","id":"#55946"} {"issue":"2026-11","section":"community","id":"#56072"} {"issue":"2026-11","section":"community","id":"#56085"} {"issue":"2026-11","section":"community","id":"#56148"} {"issue":"2026-11","section":"community","id":"#56214"} {"issue":"2026-11","section":"community","id":"#56266"} {"issue":"2026-11","section":"community","id":"#56287"} {"issue":"2026-11","section":"community","id":"#56376"} {"issue":"2026-11","section":"community","id":"#56403"} {"issue":"2026-11","section":"community","id":"#56486"} {"issue":"2026-11","section":"community","id":"#56498"} {"issue":"2026-11","section":"community","id":"#56575"} {"issue":"2026-11","section":"community","id":"#56596"} {"issue":"2026-11","section":"community","id":"#56609"} {"issue":"2026-11","section":"community","id":"#56657"} {"issue":"2026-11","section":"community","id":"#56708"} {"issue":"2026-11","section":"community","id":"#56719"} {"issue":"2026-11","section":"community","id":"#56983"} {"issue":"2026-11","section":"community","id":"#56984"} {"issue":"2026-11","section":"community","id":"#56985"} EOF ``` </details> ## Testing - [x] Confirmed the markdown passes the website build's metadata checks: required meta tags, ISO `publishedOn`, description at 139 of 150 characters, `category` set to `newsletter`, H1 matching `articleTitle`, and no Vue-template braces. - [x] Verified all 54 fleetdm.com, GitHub, and Eventbrite links return 200. LinkedIn returns 999 to automated requests, so the profile links come from the handbook and the post link was opened in a browser. - [x] Checked the copy against Fleet's content style: no em dashes, sentence-case headings, Oxford commas, and Fleet Premium labels carried through from the release articles. - [ ] QA'd all new/changed functionality manually ## AI **AI:** Claude Code (claude-opus-5-5) --------- Co-authored-by: robinedev <aubedev@outlook.com>



Related issue: Resolves #53696
Problem and reproduction
Upload
hello.pyandhello.shas script-only packages for one fleet. Software Inventory and Controls > Setup experience > Install software both show two rows namedhello, with the same type and no version, so an admin cannot tell which checkbox selects which script.Fix
Show the existing package filename alongside the software title in both lists, for example
hello (hello.py)andhello (hello.sh). Custom display names remain visible, and non-script software labels are unchanged. The Setup Experience search also matches the package filename.Checklist for submitter
changes/.Testing
git diff --checkpassed (ESLint reports one pre-existing unused import warning inhelpers.tsx).hello.pyandhello.shto theQA 53696fleet. Both labels were distinct in Software Inventory and Linux Setup Experience. Searching forhello.pyhidhello.sh; selecting and clearing its checkbox changed the count from 0 to 1 to 0. macOS Setup Experience could not be opened without MDM and automatic enrollment configuration.AI
AI: Codex (unknown)
Frontend
Software Inventory
Before (from #53696):
After:
Setup Experience: Install software
Before (from #53696):
After (Linux tab; macOS is gated by MDM configuration):
Summary by CodeRabbit