ZYVOPMulti-Platform Sync
SeriesAI NewsWhy ZyVOPJoin Discord
LoginGet Started
ZYVOPMulti-Platform Sync

The Developer Publishing Hub. Write once, publish everywhere, and make your work citation-ready with built-in SEO, AEO, and GEO discovery support. Zero reader paywalls.

Content

  • Categories
  • Tags
  • Badges
  • Leaderboard
  • Write Article
  • Newsletter

Company

  • About Us
  • Why ZyVOP
  • Changelog
  • Compare Platforms
  • Hashnode vs ZyVOP
  • DEV vs ZyVOP
  • Developer API & CLI
  • Author Handbook
  • Contact

Connect

  • Privacy Policy
  • Terms of Service
  • Cookie Policy
  • DMCA Policy
  • Code of Conduct

© 2026 ZyVOP. Developer Publishing Hub.

Zero paywalls · Full content ownership
All systems operational
HomeProduct Showcaseoctoscope 0.33.0 — the part of a pull request nobody reads line by line
Product Showcase

octoscope 0.33.0 — the part of a pull request nobody reads line by line

The scan now reads your npm lockfile and tells you when a dependency starts running code at install — or when the same version quietly ships different bytes.

Giovambattista Fazioli
Giovambattista Fazioli
Senior Full-stack Engineer, Lead DeveloperSupport
September 8, 2026
3 min read
Series

CLI & Terminal

Part 2 of 3

PrevNext
octoscope 0.33.0 — the part of a pull request nobody reads line by line
#tui#GitHub#git#cli#@babeltea
👍2

You read the diff. The changed functions, the new test, maybe the workflow file. Then there is a four-hundred-kilobyte block of hashes at the bottom, and you scroll past it — because nobody reads that, and there is nothing in it a reviewer would recognise as suspicious anyway.

Your lockfile is the one part of a pull request nobody reads line by line. octoscope 0.33.0 reads it for you.

octoscope 0.33.0 — the Overview tab, banner reading the new version

What it can see now

Since v0.27.0 the scan could tell you that something in your own repository had started auto-executing — a hook that appeared, a workflow whose contents moved. It could not see the other half: a dependency that starts running code the moment you install it. That is not a new file and it is not a code change. It is a lockfile diff, and branch protection does nothing about it.

Now the scan reads package-lock.json (or npm-shrinkwrap.json) on your default branch and compares the subset of your dependencies that carry an install script. Press s on any repository in the Repos tab, exactly as before.

Three things it can tell you:

  • a package that did not run code at install and now does — something in your dependency tree began executing on your machine;

  • the same version whose content changed. That version was republished, and no upgrade explains it. It is the heaviest thing this part of the scan will say;

  • an ordinary version bump, or a package that stopped running code at install. Both are listed, neither is scored.

Why the subset, and not the whole file

Because a lockfile changes constantly and the interesting part of it does not.

I measured the last twenty revisions of the lockfile in three busy repositories — axios, npm/cli and undici, fifty-seven revisions in all. The files churned the entire time. The subset that runs code at install moved twice. The same version was republished zero times.

That zero is the point. It is a measured rate of false alarms, not a guess, and it is what lets the sharp case actually mean something when it fires. An axis that goes off constantly is one you learn to skip, and then it is worth nothing on the day it is right.

What it does not check, it tells you

This is npm only, and the report says so rather than going quiet. pnpm used to declare install scripts in its lockfile and dropped the field; Yarn never had one. Building on something that has already disappeared once would ship a rule that quietly decays, so if your lockfile is theirs, you get a line naming it and saying your dependency surface was not compared.

The same goes for a repository with no lockfile at all, one too large to read, or a format this scan has not measured. Silence would look exactly like nothing here runs code at install, and that is the one thing it must never imply.

And it never looks at the registry. The claim is that your dependencies' auto-execute surface changed — never that a dependency is malicious. What to do about it is yours.

Upgrading

brew upgrade gfazioli/tap/octoscope

Or gh extension upgrade octoscope, go install github.com/gfazioli/octoscope@latest, or pull the container image.

The first scan after upgrading will say it is the first comparison of your dependency surface rather than claiming nothing changed — there is nothing recorded to diff against yet. The one after that is the one that talks.


Site: https://gfazioli.github.io/octoscope

Newsletter: https://octoscope.substack.com

Mastodon: https://hachyderm.io/@undolog

Series

CLI & Terminal

Part 2 of 3

PrevNext

Comments (0)

Login to post a comment.

Giovambattista Fazioli
Giovambattista Fazioli

Senior Full-stack Engineer, Lead Developer

Italian Senior Full-stack Engineer and Lead Developer on the Cloud team at Namecheap. I build developer tools, React/Mantine UI components and native macOS apps — mostly open source. I work across TypeScript, Next.js, Go and SwiftUI, and I've been coding since the Commodore/Assembly days. Creator of WP Bones and 25+ Mantine extensions, and maintainer of the Undolog open-source studio.

Support
Subscribe to Giovambattista Fazioli's Newsletter

Direct email dispatches when new stories are published. Zero algorithms.

More from Giovambattista Fazioli

View profile

octoscope 0.35.0 — your activity, in the right order

The Activity tab has been showing you an almost-sorted feed for months. Fixing that was not the plan — it was what building the feature uncovered.

2 minSep 16

The two gaps from last time are closed

Window 3.2.0 gesture lifecycle callbacks + ListViewTable ActionBar demo (the two gaps named on Sept 1), BorderAnimate and Flip demo fixes, whole family on Mantine 9.6.1 and React 19.3

3 minSep 14

FinderGit 0.31.0 — Your tags and your releases, side by side

A new Release tab that finally says where each tag actually lives, linked worktrees as repositories like any other, and a detail panel you can read at a glance.

4 minSep 10

The test that could only pass, and the warning that admitted it didn't know

Two sentences that looked like verification and weren't — a green cancellation test that never built the case it named, and a destructive-action dialog that hedged because nobody had run the experiment.

6 minSep 9

Netfox 0.19.0 — what a certificate says about itself

Every home network has a few of them: the NAS admin page, the printer's web UI, the router itself, a Home Assistant box.

2 minSep 7