Skip to content

ci: bump the actions group across 1 directory with 2 updates - #1

Closed
dependabot[bot] wants to merge 23 commits into
mainfrom
dependabot/github_actions/actions-e91bde37dc
Closed

ci: bump the actions group across 1 directory with 2 updates#1
dependabot[bot] wants to merge 23 commits into
mainfrom
dependabot/github_actions/actions-e91bde37dc

Conversation

@dependabot

@dependabot dependabot Bot commented on behalf of github Aug 23, 2026

Copy link
Copy Markdown

Bumps the actions group with 2 updates in the / directory: actions/checkout and actions/setup-python.

Updates actions/checkout from 4 to 7

Release notes

Sourced from actions/checkout's releases.

v7.0.0

What's Changed

New Contributors

Full Changelog: actions/checkout@v6.0.3...v7.0.0

v6.1.0

What's Changed

https://github.blog/changelog/2026-06-18-safer-pull_request_target-defaults-for-github-actions-checkout/ for more details about this breaking change

Full Changelog: actions/checkout@v6.0.3...v6.1.0

v6.0.3

What's Changed

New Contributors

Full Changelog: actions/checkout@v6...v6.0.3

v6.0.2

What's Changed

Full Changelog: actions/checkout@v6.0.1...v6.0.2

v6.0.1

What's Changed

... (truncated)

Changelog

Sourced from actions/checkout's changelog.

Changelog

v7.0.1

v7.0.0

v6.0.3

v6.0.2

v6.0.1

v6.0.0

v5.0.1

v5.0.0

v4.3.1

v4.3.0

v4.2.2

v4.2.1

... (truncated)

Commits

Updates actions/setup-python from 5 to 7

Release notes

Sourced from actions/setup-python's releases.

v7.0.0

What's Changed

Enhancements

Bug Fix

Dependency Upgrade

New Contributors

Full Changelog: actions/setup-python@v6...v7.0.0

v6.3.0

What's Changed

Enhancement

Dependency update

Documentation

New Contributors

Full Changelog: actions/setup-python@v6.2.0...v6.3.0

v6.2.0

What's Changed

Dependency Upgrades

... (truncated)

Commits

doug445 and others added 17 commits August 22, 2026 04:12
Fourteen network monitoring, DNS hardening and investigation tools that
had accumulated across ~/.local/bin and /usr/local/bin, collected into an
installable suite with a licence, an installer and CI.

Tools, by area:
  DNS       audit-dns.sh harden-dns.sh checkdns dns-toggle dns-status.sh
            dns-tray
  Watch     netwatch probesource nettop netcheck
  Repair    netmaster wifi-recover.sh warp-killswitch warp-tray

Assembly notes:
  - netcheck was taken from the installed copy, not the older one in
    netwatch-deploy/bin. The packaged copy predated the Wi-Fi work and
    was missing SSID, band and bitrate reporting; shipping it would have
    been a regression.
  - probesource was never in any package. It is the largest tool here at
    1144 lines and existed only at /usr/local/bin/probesource.
  - checkdns was a shell function in ~/.zshrc. It is now a standalone
    script; it keeps the function wrapper because it uses `local`, and
    invokes itself at the end.
  - dnsleaktest was deliberately NOT included. It is the third-party
    bash.ws tool, not original work, and is not ours to relicense.

Everything carries an MIT header. install.sh splits system tools into
/usr/local/bin and user tools into ~/.local/bin, honours SUDO_USER so the
tray applets land in the right home, and supports --dry-run, --dns-only
and --user. Nothing is enabled as a service by the installer.

CI gates on `shellcheck -S error` plus bash syntax, ruff and py_compile
for the two Python tray applets, and a licence-header check. Style
warnings are reported without failing the build: these are field-tested
operational tools and rewriting them to silence SC2034 would be the
riskier change.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Y1MnEkBkR1ezmWykBNAz3F
The first run failed because py_compile created bin/__pycache__ and the
next loop then ran `head` on a directory, which is fatal under `bash -e`.
Every bin/* loop now skips non-files, and py_compile runs with -B so it
writes no bytecode at all.

Ruff is pinned to --select E9,F (syntax errors plus pyflakes: undefined
names, unused imports) and --isolated so a stray config cannot change
what the gate means. The 11 findings on the tray applets were all style
opinions - import ordering, blind except, context managers, implicit
subprocess check - with no pyflakes hits among them. Those are now
reported in a non-blocking step, matching how the bash tools treat
shellcheck warnings.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Y1MnEkBkR1ezmWykBNAz3F
The real cause of both failed runs. Writing

    files=$(for f in bin/*; do head -1 "$f" | grep -q X && printf ...; done)

makes the command substitution inherit the exit status of the LAST loop
iteration. bin/* ends alphabetically at wifi-recover.sh, so for the
python selector grep returns 1, the substitution exits 1, and `bash -e`
kills the step before ruff ever runs - which is why the log showed a
bare exit 1 with no ruff output. The shellcheck job passed only by luck:
that same last file IS bash, so its grep succeeded.

Every selector is now an explicit if/then accumulator, with a comment at
the top of the file explaining why, so it does not get "simplified" back
into the broken form later. install.sh and uninstall.sh are now linted
too, and the ruff step exits cleanly if no python tools are present.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Y1MnEkBkR1ezmWykBNAz3F
Shell (19 warnings -> 0):
  - 9 SC2034: verified dead in scope before touching anything. Unused loop
    counters and a discarded `read` field became `_`; genuinely dead
    assignments (netcheck ch_line, probesource ports/http/netwatch_hits/
    entry/ip2, and an orphaned `local i`) were removed.
  - 6 SC2046: ALL intentional. A file list splitting into tar arguments, and
    tactic-id lists splitting into run_set arguments. Quoting any of them
    would break the tool, so each carries an inline disable stating why.
    The three in investigate()'s case statement needed one directive above
    the whole `case` - shellcheck rejects them in front of individual
    branches (SC1124).
  - 2 SC2155, 1 SC1090, 1 SC2010. The ls|grep test for dhclient config became
    existence tests; verified equivalent against present/empty/missing/real
    directories under bash, where an unmatched glob stays literal.

Python (11 findings -> 0):
  - SIM115 on warp-tray's lock file was a FALSE POSITIVE and is now a noqa
    with a warning attached: that handle is held open for process lifetime
    to hold the flock, and a `with` block would release it and defeat the
    single-instance guard.
  - Two blind `except Exception` narrowed to what can actually be raised.
  - subprocess.run gained an explicit check=False, which is its own default.
  - Import sorting applied, then verified gi.require_version() still precedes
    every gi.repository import.

Regressions I introduced in the previous commit, now fixed: inserting the
25-line MIT header shifted the line numbers that netmaster, harden-dns.sh
and wifi-recover.sh used to print their own usage, so all three printed the
licence instead of help. All now extract by content, so a future header
change cannot silently break them again. netmaster's use of `$SED` rather
than `sed` hid it from the first grep.

Verified by running the tools, not just linting them: netcheck still
reports SSID/band/channel/bitrate, warp-killswitch state, checkdns, and
audit-dns.sh's rewritten dhclient branch all behave as before.

CI now gates on `shellcheck -S warning` and the full default ruff ruleset,
since the tree is clean at both. README updated to match.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Y1MnEkBkR1ezmWykBNAz3F
Previously any argument was silently ignored and the interactive TUI
launched regardless, so `probesource --help` dropped the user into a
dialog menu.

The guard is parsed before everything else, which matters twice over:
--help now works with dialog absent (verified against a PATH containing
no dialog at all), and it exits without touching the master log or
creating the state directory (verified against a clean HOME: zero
entries created).

Usage lives in the tool's own doc comment and is extracted by content,
matching the pattern the other tools now use, so there is one source of
truth and no line numbers to break.

Unrecognised arguments exit 2 with a pointer to --help rather than
starting a scan session the caller did not ask for.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Y1MnEkBkR1ezmWykBNAz3F
`probesource <ip>` skips the target picker and goes straight to mode
selection, then runs one investigation and exits rather than dropping
into the menu loop.

Deliberately still asks for the mode: nothing is sent to the target until
you choose one, so a command-line target cannot become an unattended
active scan.

Validation happens in main(), not in the early argument guard, because
the address helpers are not defined that early. It reports on stderr and
exits 2 rather than calling die(), which opens a dialog msgbox - the
wrong response to a CLI typo, and one that needs a UI the caller may not
have. Hostnames are rejected with a hint to resolve first.

investigate() takes the preset as an optional argument. With one set
there is no picker to return to, so cancelling the mode menu leaves
instead of looping forever on a picker that would never be shown again.

The guard still rejects unknown options and more than one argument.
Verified: bad address, extra args and unknown options all exit 2; a valid
address skips straight to the mode menu and, when cancelled, exits having
registered zero scans.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Y1MnEkBkR1ezmWykBNAz3F
The mark is a shield around a six-blade camera aperture with a live red
core, over the PANOPTES wordmark whose O is a padlock network node.

Drawn as real vector geometry rather than traced from a raster: the
aperture blades are solved as line/circle intersections tiling a
hexagonal opening, and every glyph is baked to a <path> outline, so the
file carries no font dependency and renders identically everywhere.

Wordmark is Monaco Bold outline-expanded to a synthetic ExtraBold, since
Monaco ships no ExtraBold cut. Tagline is JetBrains Mono Bold, tracked so
its ink edges land exactly on the wordmark's.

Contains no <filter> elements — the neon halo and core bloom are baked as
layered strokes, so nothing is lost if a sanitizer strips filters.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RB5N5QU512AgakKKqCBKmN
Added a newline at the end of the dependabot.yml file.
SECURITY.md sets the private reporting route and scopes what counts. The
interesting surface here is that probesource takes a target out of the UFW
journal, the netwatch log or the ss table and hands it to whois, dig, tcpdump
and p0f — a hostile scanner controls what lands in those logs, so an address
that escapes into a shell is a real finding. Also in scope: a hardening tool
that fails open, and a killswitch that reports `killed` while still reachable.

Out of scope: bugs in the tools Panoptes drives, and the read-only
investigation tools revealing your own network, which is the point.

Both files warn about what a diagnostic paste leaks. nettop, netcheck and
probesource print MACs, SSIDs and addresses; the pcap/tshark/p0f tactics
capture live traffic; the netwatch log is a record of everything that has
touched the machine.

CONTRIBUTING.md carries a read-only diagnostic bundle, splits the suite into
its read-only and writing halves, and reproduces all three CI gates in one
block. That block collects into arrays where lint.yml uses a space-joined
string plus an SC2086 disable — same files, same gates, but it also survives
being pasted into zsh, where an unquoted $var does not word-split and the
string form silently selects nothing and reports success.

EndeavourOS added everywhere distributions are listed. The README now says
plainly that an unlisted distribution should work too: nothing here is tied to
a package manager or a release, only to systemd-resolved and NetworkManager.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RB5N5QU512AgakKKqCBKmN
The Contributor Covenant 2.1 verbatim, with a short preamble saying what this
project actually wants: technical disagreement is welcome, say why something is
wrong and what you tested. The enforcement address doubles as the private
security address, so the file says plainly that a vulnerability is not a conduct
report and to label the email.

Issue forms rather than markdown templates, so the structure CONTRIBUTING.md
asks for is enforced instead of hoped for. The bug form requires the tool, the
exact command line including environment overrides, the distro, the commit, and
three confirmations — on current main, redacted, and not a security issue. It
names the environment variables harden-dns.sh reads, because a default-policy
bug and an override bug have different causes and the report rarely says which.

Blank issues are disabled: both routes out lead somewhere useful, SECURITY.md
for vulnerabilities and CONTRIBUTING.md for the diagnostic bundle.

The feature form asks for the outage rather than the feature. Every tool here
came from a real failure, and the manual commands someone ran to diagnose it by
hand are usually most of the tool.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RB5N5QU512AgakKKqCBKmN
Three new tools, and an installer that no longer assumes you have already
installed what the suite calls.

ech-build.sh builds an ECH-capable curl. No distribution ships one, because no
released OpenSSL implements Encrypted Client Hello. It compiles the OpenSSL ECH
branch into /opt/openssl-ech and curl against it into /usr/local -- neither
prefix is owned by a package manager, so system updates cannot overwrite the
result. OpenSSL is linked statically (no-shared) on purpose: a development TLS
stack must not end up on any other program's library search path. --verify runs
a live --ech hard handshake, which refuses to fall back to a cleartext SNI, so a
pass means the SNI was genuinely encrypted. Verified end to end against the
existing install on this machine, including that libcurl still resolves through
RUNPATH rather than a global ld.so.conf.d entry.

ech-browsers.sh finds every browser on the machine -- native, Flatpak and Snap,
Firefox-family and Chromium-family -- and enables ECH plus the secure DNS it
depends on. Enabling ECH alone accomplishes nothing: the browser must fetch the
site's HTTPS DNS record over a protected channel to learn the ECH key, and
Firefox will not attempt ECH at all with TRR off, so both are set together.
Firefox settings go to user.js (survives a preferences reset), Chromium to
Local State through a same-directory atomic replace. Verified idempotent over
three consecutive runs, and cleanly reverted.

Three behaviours worth calling out, each of which cost a bug:

  - It never touches Tor Browser or Mullvad Browser. Those resolve through
    their proxy circuit deliberately; pointing them at a DoH resolver would
    send lookups around it. That is a deanonymisation bug, not hardening.
  - It refuses to run under sudo, where it would find root's empty home and
    configure nothing while looking like it had succeeded.
  - It skips config directories left behind by uninstalled browsers, and skips
    a running Chromium rather than making an edit the browser overwrites on
    exit. Vivaldi and Opera number their own releases, so the "predates ECH
    support" check only judges version numbers plausibly on Chromium's scale.

panoptes-deps.sh identifies the distribution and package manager and installs
what is missing across dnf5/dnf/yum, apt, pacman, zypper and apk. Detection
reads /etc/os-release ID and ID_LIKE and never probes for a package-manager
binary -- this Fedora machine carries /usr/bin/pacman, and it is the arcade
game. Requirements are probed by capability (a command in PATH, a pkg-config
module, a Python import, a typelib file) rather than by package name; a failed
batch retries individually so the report names exactly what a distribution
lacks; and everything is re-probed afterwards so the exit status reflects
reality rather than the package manager's opinion.

install.sh runs it first, and gains --ech-only, --deps-only and --no-deps.

Clean under the repository's own gates: bash -n, shellcheck at style level
(stricter than the fatal warning gate), and the SPDX header check.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JELHhRZTALnm4ycDwv6VAW
…plain ECH

Running the tool for real on this machine surfaced three defects, one of which
meant an advertised safety property had never worked.

chromium_running tested [ -e SingletonLock ]. That lock is a symlink to
"hostname-pid", which is not a real path, so -e follows it and returns false
every time. The "will not edit a running Chromium" protection was decorative.
Only -L can see a dangling symlink.

Replacing it exposed the next two. Both detectors now look for an open file
descriptor under the profile directory, which is the only evidence that means
anything for a sandboxed browser -- a Flatpak or Snap browser writes its
namespace pid into the lock, and testing that against host pids is not merely
unreliable but actively wrong: the stale Flatpak lock on this box names pid 2,
and pid 2 is kthreadd, alive on every Linux system ever booted. That is why
LibreWolf was reported as running when it was closed. Lock files are now
consulted only for non-sandboxed profiles.

The descriptor scan then failed silently under pipefail. "find -print -quit |
grep -q ." lets grep close the pipe as soon as it matches, find dies of SIGPIPE
with status 141, and pipefail reports the pipeline as failed -- so the function
returned "not running" precisely when it had found something. It passed in
isolation because the shell I tested it in had no pipefail. Same family as the
CI loop bug already documented in lint.yml. Command substitution, no pipe.

Verified against a live file descriptor holder: refuses while held, applies once
released despite a stale SingletonLock left in place, and no longer reports the
closed LibreWolf as running.

Separately, applying the tool to profiles that already had ECH set by hand left
each pref defined twice. Harmless while the values agreed and a silent conflict
the moment they did not. Pre-existing copies are now commented out with a
PANOPTES-SUPERSEDED tag, and --revert restores them -- round-trip verified
byte-for-byte against the original file.

Tor Browser and Mullvad Browser tarball paths added to the skip table. Safety
never rested on that list, since the browser table is an allowlist and an
unlisted profile is never written to, but a skip you cannot see in the output
is not a skip anyone should have to take on faith.

README gains a section on what ECH is and why it matters: that HTTPS leaves the
hostname in the clear in the ClientHello, that encrypting DNS hides the question
while SNI still announces the answer, and that ECH and secure DNS are one
mechanism rather than two features. It also says plainly what ECH does not do --
the IP is still visible, the site has to publish a config, traffic analysis
survives -- because overselling it helps nobody.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JELHhRZTALnm4ycDwv6VAW
…ver (2.1.0)

Toggling WARP off left the resolver answering from a poisoned cache, which
reads as "no internet" while the network is fine.

Tearing the tunnel down kills every DNS lookup in flight over it. Those fail
DNSSEC validation with failed-auxiliary -- the transport carrying the DS and
DNSKEY chain vanished mid-lookup -- and systemd-resolved caches the failure.
Firefox's captive-portal probe is usually among the casualties, and one failed
probe is enough for it to declare the link down.

The tunnel teardown itself is clean, which I verified rather than assumed: with
WARP disconnected the nftables table, the ip rule and routing table 65743 are
all gone, the route falls back to the LAN gateway, and both ping and DNS work.
Only the cache is stale. warp-tray now runs resolvectl flush-caches and
reset-server-features after any state change, on a thread so the tray's event
loop is not blocked, and the killswitch menu path flushes too. Measured across
a teardown with lookups deliberately in flight: 4 of 12 probes failed without
the flush, 0 of 12 with it. One run, small sample -- directional, not a proof.

dns-toggle now appends Quad9 to DNS=, because FallbackDNS= is not a failover
and never was. Per resolved.conf(5) it is "only used if no other DNS server
information is known", meaning only when DNS= is empty; it is never consulted
because the servers in DNS= went quiet, which is exactly the case people assume
it covers. Both branches previously listed only one provider, so both entries
failed together. The trade-off is documented in the script: resolved sticks
with whichever server last worked, so after a failover you stay on Quad9 --
malware filtering, no ad blocking -- until it restarts.

Also fixes a packaging bug: both trays load their icons by absolute path from
~/.local/share/icons, but the repository never contained them. A fresh install
produced trays with no artwork, which looks like a crash. All four SVGs now
ship in share/icons and install.sh places them.

README gains a section on the two tray toggles with an annotated screenshot,
and the repo description was corrected from 14 tools to 17.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JELHhRZTALnm4ycDwv6VAW
2.1.0 fixed warp-tray and stopped there. Auditing every path in the suite that
changes WARP state turned up three more that needed the same treatment.

netmaster's `warp off` and `warp on` each have two branches: one delegating to
warp-killswitch, and a fallback for when the killswitch is not installed. The
killswitch branches were already fine, because warp-killswitch restarts
systemd-resolved, and a restart drops the cache and the learned per-server
feature grades together. The fallback branches, and the whole of `warp reset`,
brought the tunnel up or down and left the cache alone -- which is exactly the
failure 2.1.0 was supposed to fix.

Verified in dry-run that all three now emit the flush, and that every
`warp-cli connect` in the file is followed by either flush_resolver or a
systemd-resolved restart.

Audited and found already correct, recorded in the changelog so this does not
get re-checked: warp-killswitch down/up, netmaster's S5/S6 repair ladder,
dns-toggle, checkdns (read-only), and netcheck -- whose resolvectl flush-caches
is unrelated, since it exists to provoke a real upstream round-trip so the DoT
probe is not answered from cache.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JELHhRZTALnm4ycDwv6VAW
The "what ECH does not do" list said flatly that your IP address is still
visible. That is true of ECH standing alone and misleading for anyone running a
tunnel, which is a large share of the people this suite is aimed at -- it ships
a WARP tray and a WARP killswitch.

Corrected to the real shape: behind a VPN the destination IP travels inside the
tunnel and is out of the ISP's view, but the visibility moves rather than
disappears, because the tunnel operator sees both ends. With WARP that operator
is Cloudflare, who is already the far end of most ECH-enabled connections, so
the pairing buys less than it looks like it does.

Also flags split-tunnel excludes, which is the case people forget. Anything on
the exclude list travels outside the tunnel, so its destination IP is back on
the wire and ECH is the only thing still hiding the hostname -- on this machine
that covers Apple's ranges plus two explicitly excluded hosts.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JELHhRZTALnm4ycDwv6VAW
The suite shipped warp-tray, warp-killswitch and netmaster's WARP subcommands,
and no way to actually get WARP. On a fresh machine those installed fine and
then failed with no explanation, because warp-cli was not there and nothing
said so.

warp-setup.sh adds Cloudflare's own repository -- an RPM repo file with
gpgcheck=1, or an APT list with the key dearmoured into /usr/share/keyrings --
installs the client, registers the device and connects. Fedora/RHEL and
Debian/Ubuntu, which is what Cloudflare publishes for. Arch is told to build
cloudflare-warp-bin from the AUR and re-run with --register, rather than being
handed a command that will not work.

It sets tunnel_only mode by default, and that is the interesting decision.
WARP's other modes proxy DNS themselves, which fights every other tool here:
harden-dns.sh pins DNSSEC and DoT in systemd-resolved, dns-toggle switches the
resolver underneath it, and checkdns audits the result. tunnel_only carries
traffic and leaves resolution to resolved, so the two stop arguing. --mode
overrides it.

Registration asks before running, because it creates a device record on
Cloudflare's side rather than only changing local state. It flushes the
resolver after connecting, for the same reason warp-tray and netmaster do.

panoptes-deps.sh gains a `warp` group holding warp-cli, marked unpackaged
everywhere. Rather than the generic "install it yourself", it now says "no
distro packages WARP -- run: warp-setup.sh". Both branches tested against a
copy with the probe pointed at a name that does not exist.

Also documents something worth being explicit about: AdGuard needs no
installation and was never missing. It is a public resolver reached over DoT,
not software -- the DNS tools simply point systemd-resolved at 94.140.14.14.
WARP was the only component running a local daemon, which is why it was the
only gap.

Verified on this machine: --check reports the live install correctly, --dry-run
touches nothing and leaves WARP connected, the mode and argument guards reject
bad input, and verify confirms warp=on from Cloudflare's trace endpoint.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JELHhRZTALnm4ycDwv6VAW
The file was still the GitHub starter template with an empty
package-ecosystem, which Dependabot rejects -- so it was watching nothing.

github-actions is the only ecosystem that applies here. The workflow pins
actions/checkout@v4 three times and actions/setup-python@v5 once, and those are
the only version-pinned dependencies in the repository. Grouped into a single PR
rather than one per action, since two actions producing two PRs a week is noise.

Recorded in the file why the obvious second candidate is absent: pip would watch
nothing, because ruff is installed inline in the workflow with `pip install
ruff` and Dependabot does not parse `run:` steps. The comment carries the block
to paste in if ruff is ever pinned in a manifest.

Everything else the suite depends on is system packages, which no dependency bot
tracks. That is panoptes-deps.sh's job.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JELHhRZTALnm4ycDwv6VAW
@dependabot @github

dependabot Bot commented on behalf of github Aug 23, 2026

Copy link
Copy Markdown
Author

Labels

The following labels could not be found: dependencies. Please create it before Dependabot can add it to a pull request.

Please fix the above issues or remove invalid values from dependabot.yml.

doug445 and others added 6 commits August 23, 2026 18:20
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JELHhRZTALnm4ycDwv6VAW
The protection now enforced on this repository, as files rather than as
settings someone clicked once and cannot reproduce or review.

main: no deletion, no force-push. v* tags: no deletion, no moving, no
force-push -- creating new version tags is untouched.

bypass_actors is empty deliberately. A repository-admin bypass would mean
the rules do not bind the only person pushing, which is the entire point;
the README documents flipping enforcement to disabled for the rare case
that needs it.

The README also records the four rules left off and why -- pull_request,
required_status_checks, required_signatures and required_linear_history
all assume a workflow this repository does not have, and each would fail
in a way that looks like a bug rather than a policy.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JELHhRZTALnm4ycDwv6VAW
…atch

The README told you to flip enforcement with a single -f field. That call
succeeds and silently drops every rule, because PUT replaces the ruleset
rather than patching it. Send the whole body instead, and verify the rules
survived afterwards.

Also records what was actually tested rather than assumed: creating a v*
tag succeeded, deleting it was rejected with GH013, and a normal
fast-forward push to main was unaffected.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JELHhRZTALnm4ycDwv6VAW
Bumps the actions group with 2 updates in the / directory: [actions/checkout](https://github.com/actions/checkout) and [actions/setup-python](https://github.com/actions/setup-python).


Updates `actions/checkout` from 4 to 7
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](actions/checkout@v4...v7)

Updates `actions/setup-python` from 5 to 7
- [Release notes](https://github.com/actions/setup-python/releases)
- [Commits](actions/setup-python@v5...v7)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: actions
- dependency-name: actions/setup-python
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: actions
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot dependabot Bot changed the title ci: bump the actions group with 2 updates ci: bump the actions group across 1 directory with 2 updates Aug 24, 2026
@dependabot
dependabot Bot force-pushed the dependabot/github_actions/actions-e91bde37dc branch from 71a9769 to 20ba2ef Compare August 24, 2026 20:09
@doug445 doug445 closed this Aug 31, 2026
@dependabot @github

dependabot Bot commented on behalf of github Aug 31, 2026

Copy link
Copy Markdown
Author

This pull request was built based on a group rule. Closing it will not ignore any of these versions in future pull requests.

To ignore these dependencies, configure ignore rules in dependabot.yml

@dependabot
dependabot Bot deleted the dependabot/github_actions/actions-e91bde37dc branch August 31, 2026 04:46
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