Skip to content

deps(deps): bump the minor-updates group across 1 directory with 3 updates - #316

Merged
tis24dev merged 1 commit into
devfrom
dependabot/go_modules/dev/minor-updates-e032730585
Sep 21, 2026
Merged

tis24dev merged 1 commit into
devfrom
dependabot/go_modules/dev/minor-updates-e032730585

Conversation

@dependabot

@dependabot dependabot Bot commented on behalf of github Sep 14, 2026 •

Copy link
Copy Markdown
Contributor

Bumps the minor-updates group with 3 updates in the / directory: golang.org/x/crypto, golang.org/x/term and golang.org/x/text.

Updates golang.org/x/crypto from 0.56.0 to 0.57.0

Commits

Updates golang.org/x/term from 0.45.0 to 0.46.0

Commits
  • 6226200 go.mod: update golang.org/x dependencies
  • 7c2fb74 term: process bytes returned with a read error
  • 3963fce all: upgrade go directive to at least 1.26.0 [generated]
  • See full diff in compare view

Updates golang.org/x/text from 0.41.0 to 0.42.0

Commits
  • fafe4a0 go.mod: update golang.org/x dependencies
  • f53c316 unicode/norm: don't truncate runes in the recomposition map key
  • 37867f6 unicode/norm: let any starter block composition in compose
  • 0dd525f unicode/norm: compose non-Hangul runes after a Hangul syllable
  • bac26e5 unicode/norm: avoid improper ErrShortDst return in Form.transform
  • 4f55186 unicode/norm: simplify short source detection in Form.transform
  • a1b6c10 unicode/norm: prevent decomposeSegment from moving backwards
  • cd1cbc9 unicode/bidi: panic rather than log.Panicf
  • a459614 internal/export/idna: fix conformance with optional validation disabled
  • be70a61 internal/export/idna: drop trie field from Profiles
  • Additional commits viewable in compare view

@coderabbitai

coderabbitai Bot commented Sep 14, 2026 •

Copy link
Copy Markdown

Important

Review skipped

Bot user detected.

To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Advanced

Run ID: ee744ad8-f792-48d4-89d9-06b3908952db

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

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.

@github-actions

Copy link
Copy Markdown

Dependency Review

✅ No vulnerabilities or license issues or OpenSSF Scorecard issues found.

OpenSSF Scorecard

PackageVersionScoreDetails
gomod/golang.org/x/crypto 0.57.0 UnknownUnknown
gomod/golang.org/x/sync 0.23.0 UnknownUnknown
gomod/golang.org/x/sys 0.48.0 UnknownUnknown
gomod/golang.org/x/term 0.46.0 UnknownUnknown
gomod/golang.org/x/text 0.42.0 UnknownUnknown

Scanned Files

  • go.mod

@codecov

codecov Bot commented Sep 14, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

…dates

Bumps the minor-updates group with 3 updates in the / directory: [golang.org/x/crypto](https://github.com/golang/crypto), [golang.org/x/term](https://github.com/golang/term) and [golang.org/x/text](https://github.com/golang/text).


Updates `golang.org/x/crypto` from 0.56.0 to 0.57.0
- [Commits](golang/crypto@v0.56.0...v0.57.0)

Updates `golang.org/x/term` from 0.45.0 to 0.46.0
- [Commits](golang/term@v0.45.0...v0.46.0)

Updates `golang.org/x/text` from 0.41.0 to 0.42.0
- [Release notes](https://github.com/golang/text/releases)
- [Commits](golang/text@v0.41.0...v0.42.0)

---
updated-dependencies:
- dependency-name: golang.org/x/crypto
  dependency-version: 0.57.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: minor-updates
- dependency-name: golang.org/x/term
  dependency-version: 0.46.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: minor-updates
- dependency-name: golang.org/x/text
  dependency-version: 0.42.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: minor-updates
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot dependabot Bot changed the title deps(deps): bump the minor-updates group with 3 updates deps(deps): bump the minor-updates group across 1 directory with 3 updates Sep 21, 2026
@dependabot
dependabot Bot force-pushed the dependabot/go_modules/dev/minor-updates-e032730585 branch from fa32efb to 6e365b5 Compare September 21, 2026 02:07
@tis24dev
tis24dev merged commit e6c3954 into dev Sep 21, 2026
12 of 13 checks passed
@dependabot
dependabot Bot deleted the dependabot/go_modules/dev/minor-updates-e032730585 branch September 21, 2026 13:02
tis24dev added a commit that referenced this pull request Sep 21, 2026
* test: pin the PVE-only host that a leftover PBS directory turns dual

Removing proxmox-backup-server takes away everything the package ships: its binary,
its share directory, its dpkg stanza. It does not take away /etc/proxmox-backup or
/var/lib/proxmox-backup. Those are created at runtime, belong to no package (dpkg -S
finds nothing for either, measured on PBS 3.4.9 and 4.2.0) and the server postrm
leaves them alone even on purge. The detection ladder ends on a directory rung, so
on a host in that state a directory that outlived its product is the only evidence
of PBS, and the verdict is dual.

The run then aborts on proxmox-backup-manager, a command the host does not have, and
the abort discards the PVE payload that was already collected (issue #315).

These tests state the verdict the host deserves and fail today. They cover the live
shape, the same host under SYSTEM_ROOT_PREFIX, the second candidate directory alone
(deleting /etc/proxmox-backup changed nothing because the ladder walks the whole
list), and an empty version file. Two of them are non-regressions rather than new
claims: a coinstalled host must stay dual (issue #197, the request that produced
dual support) and an installed PBS under a prefix must still be found without
running a command (issue #255).

DetectionStep.Residual and EnvironmentInfo.PVEResidual/PBSResidual land here so the
red is behavioural rather than a build failure. Nothing populates them yet.

No release note: this commit changes nothing an operator can observe.

* fix: a role needs the product installed, not the files it left behind

Detection walked a ladder of markers and returned at the first one that fired, with
every rung weighted the same. The last PBS rung is a directory, so on a host where
proxmox-backup-server had been removed the verdict was dual: /etc/proxmox-backup and
/var/lib/proxmox-backup are made at runtime, are owned by no package (dpkg -S finds
nothing for either on PBS 3.4.9 or 4.2.0) and the server postrm leaves them alone
even on purge. Everything the package ships had gone; what PBS itself created stayed,
and that was what decided.

The recipe then ran pbs_runtime_core, which treats proxmox-backup-manager as
critical, and the whole collection aborted on a command the host never had. The PVE
payload was already collected at that point and went out with the workspace, so the
host had no backup at all (issue #315).

A marker now either proves an install or it does not, and only the first kind ends a
ladder. Proving an install means the command answering, a dpkg stanza, a binary the
package ships, a package-owned share directory, or a version file with a version in
it. The rest are residue: a directory no package owns, an empty version file, and an
apt source, which was never evidence of an install and matches the pbs-client
repository Proxmox tells you to add on hosts that are not PBS.

Residue is recorded rather than dropped. It is the reason an operator expected the
other verdict, so the rungs are still walked, the trace marks them as residue instead
of a miss, EnvironmentInfo carries the first one per product, and a run reports it at
warning: a debug-only line does not reach the person reading an unexpected type. When
nothing at all is detected, the error now separates "residue but no install" from "no
Proxmox here", because under SYSTEM_ROOT_PREFIX the first usually means the mount
carries /etc but not the /usr and /var that hold the package evidence.

TestDetectionProvenanceNamesDecidingMarker asserted the old verdict and now asserts
this one. The "via sources" and "via directories" subtests did the same for each half
of the ladder and are inverted with them. Verified on pve-test (PVE 9.1.9 with PBS
4.2.0 coinstalled), which still reports dual with both halves decided by their
command and no residue.

* fix: restore reads the host type from the same check the backup uses

DetectCurrentSystem carried its own rule, and the rule had rotted. hasPBS was
`/etc/proxmox-backup` OR `/usr/sbin/proxmox-backup-proxy`, and that second path does
not exist on PBS 3.4.9 or on 4.2.0: the proxy is a systemd unit, not a binary on
PATH. So the OR was never a choice between two proofs. Every PBS decision on the
restore side rested on one directory, the same directory that turned a PVE-only host
into a dual backup in issue #315, and it rested on it with no ladder behind it: no
dpkg stanza, no version, no package-owned file.

That mattered beyond the label. SupportsPBS() gates the staged PBS apply, the PBS
access-control and notification paths, datastore directory recreation, the mount
guard, and NeedsPBSServices, which asks systemd to stop proxmox-backup-proxy and
proxmox-backup. The common `ssl` category lists ./etc/proxmox-backup/proxy.pem among
its paths and shouldStopPBSServices reads the category definition rather than the
archive, so selecting SSL on a host with leftovers was enough to send the restore
stopping services that host does not have.

It now delegates to environment.Detect, so a host cannot be one type while being
collected and another while being restored onto. detectEnvironment is the seam for
tests, mirroring compatFS.

The three table cases built their verdict by creating directories on the fake
filesystem, which is exactly the rule being removed; they now stub the verdict and
assert the mapping, and the rule itself stays covered where it lives. Two cases are
added for what this changes: a host whose only PBS evidence is residue restores as
PVE, and a nil verdict fails closed to unknown rather than to PVE.

* fix: the PBS validate brick stops concluding the host is PBS

pbs_validate ran a bare Stat on the PBS configuration directory and logged
"Detected %s, proceeding with PBS collection". That is a detection sentence, and the
directory it stats is the one no package owns and no removal deletes, so on the host
in issue #315 this was the third place in the codebase to conclude PBS from a
leftover. It agreed with a type that was already wrong and let 25 more bricks run
before the recipe hit the command that is not there.

The type is settled before any recipe runs. Reaching this brick means PBS is
installed, so a missing configuration directory is a genuine anomaly on a genuine PBS
node rather than evidence about what the host is, and the error says that instead of
"not a PBS system".

No release note: the type is already correct by the time this runs, so the message
only changes for an operator who is on a real PBS node with its configuration
directory missing.

* fix: a failed role no longer discards the other role and the system payload

Two independent losses, both visible on the host in issue #315.

CollectAll returned as soon as the role-specific collection failed, and the common
system collection sits after that switch. So a run that lost its PBS half also lost
the network, storage-stack and hardware snapshot, which have nothing to do with which
hypervisor the host is. The role error is now held until the common payload has been
collected, and then returned unchanged.

The dual recipe was PVE bricks and PBS bricks concatenated into one fail-fast list.
On that host 34 PVE bricks and 25 PBS bricks completed, the sixtieth aborted on a
command the host does not have, and the workspace holding all of it was deleted: the
node ended the night with no backup because of a role it does not run. The halves now
run as separate recipes over the shared state, and one failing leaves the other
standing. Both failing is still an error, because then there is no role payload to
keep and an archive of system files labelled dual would be worse than none.

A kept half is not a quiet half. The role that did not finish is reported twice at
warning and written into the manifest as incomplete_targets with its reason. Warning
rather than error is the exit code: an error marks the run a failed backup, and this
run produced an archive worth keeping, while a warning still promotes it off clean so
a monitor sees the night was not normal.

newDualRecipe has no caller left and goes, along with its entry in the recipe
well-formedness test; the two recipes it concatenated are already covered there.

* fix: the marker table reports both dpkg probes, present or not

The table is an inventory: every marker in it answers YES or NO. These two answered
only when the package was installed, which is the one case that needs no explaining.

On the host in issue #315 the table listed nine PBS markers, all of them NO, and
silently omitted the tenth. The omitted one was the decisive evidence: that
proxmox-backup-server is not installed at all. An absent line reads as a check that
never ran rather than as a negative answer, so the table said least exactly where it
mattered most, and the installed version goes on the line now too.

* chore: drop the three detection helpers only tests called

detectPVEViaSources, detectPBSViaSources and detectViaDirectories stopped being part
of detection when the ladder inlined its rungs, and nothing in the package has called
them since. Six tests kept calling them, so the package looked covered where
production code no longer ran: two of those tests only asserted that the function does
not panic.

The cases worth keeping are pointed at the helpers detection actually uses,
firstMatchingSource and firstExistingDir, so the same behaviour stays covered on the
code path that runs.

No release note: nothing an operator can observe.

* fix: a version command that answers late no longer costs the run its version

The command rung returned "installed, version unknown" when the probe failed, and
that stopped the ladder one step above dpkg, which holds the real version. So a run
reported a host with no version at all while the number sat in the next rung down.

It is not a rare path. pveversion takes 4.4 to 5.2 seconds on pve-test and
commandTimeout is 5, so it times out on nothing more unusual than a busy node. Before
this, the probe on that host printed PVEVersion "" and a combined version of the PBS
half alone; after it, pve=9.1.9,pbs=4.2.0.

The probes now report three outcomes instead of two. markerInstalledNoVersion says
the binary is on PATH, so the product IS installed, and this run did not produce a
version: the ladder keeps walking for one, and falls back to "unknown" only if every
later marker misses too. It is deliberately not markerResidual, which says the
opposite about whether the product is there.

Found while verifying the issue #315 fix on a real host, not part of that fix. It is
its own commit so it can be judged, or reverted, on its own.

* test: cover the residue warning, including the silence it has to keep

warnDetectionResidue landed with the detection fix and had no test. The case worth
pinning is the quiet one: detection returns at the first marker that proves an install
and never reaches the residue rungs, so a healthy host of either kind records nothing
and must print nothing. A line that fired on every run would be ignored by the time it
mattered, which is the run where the type is not what the operator expected.

Also pinned: one line per product that left something behind, and nil arguments, since
this runs on the bootstrap path before the main logger exists.

* fix: close the gaps an adversarial review found in the issue #315 work

An 81-agent review of the eight commits raised 38 claims; 28 survived two skeptics
each. This closes the ones that were about the code rather than about wording, plus
the wording that was wrong.

The one that mattered: incomplete_targets was recorded only in the collection
manifest, and that manifest carries a comment saying restore never opens it. The
record restore actually reads is the archive sidecar, so a dual archive that lost its
PBS half still declared targets pve+pbs and cleared ValidateCompatibility against a
dual host as a whole archive would, with the PBS categories offered and nothing behind
them. The gap now travels in the sidecar, and DetectBackupType subtracts it: a run
that lost a half ships an archive of the other half and is treated as one. Losing both
halves reports unknown rather than claiming a product.

Two defects in code this branch wrote:

- CollectAll returned the bare context error when a cancelled run reached the system
  phase, dropping roleErr, so the log said "context canceled" where the phase that
  died had a name. Both are joined now.
- The both-halves-failed error wrapped the PVE cause with %w and the PBS cause with
  %v, so the PBS cause was in the text but unreachable to errors.Is.

Provenance: the versionless-command rung is a hit that keeps walking, and decidedBy
returned the first hit, so PVESource named the probe that had failed while dpkg one
rung down supplied the version. Steps that keep walking are marked Continued and
skipped when naming the decider, falling back to the command when nothing else
answered.

The residue warning no longer declares the package absent. dpkgPackageInstalled
returns false both when the stanza says not-installed and when the status file cannot
be read, and under SYSTEM_ROOT_PREFIX the second is the usual case: a mount carrying
/etc but not the /var holding the package database. It now reports what was observed,
that nothing proved the product installed.

Also: WriteManifest read c.incomplete without the lock every other access takes; a
dual run that lost a half logged "collection completed"; the release note called a
warning a "notice" while it demotes the run to exit 1; an orchestrator test started
asking the build host what it is once DetectCurrentSystem began running real probes;
TestIncompleteTargetTravelsInTheManifest asserted an in-memory field and never wrote
a manifest; the PBS half of the versionless-command fix had no test; the rootPrefix
safety comment still claimed both setters are bootstrap-only, which the restore
delegation makes false; two comments named outcomes the code does not return; and the
restore and collector docs still presented the deleted DetectCurrentSystem body and
newDualRecipe as current. Three files this branch touched were not gofmt-clean.

* fix: report detection residue at info, so leftovers stop costing a run its exit code

A residue is recorded only when a product was NOT proved installed, and enumerating
every mount shape with both products installed shows that leaves exactly two
situations, never a third:

  - the verdict is pve, pbs or dual: the product is genuinely absent, the backup is
    complete and correct, and the leftovers are untidy filesystem rather than a fault.
  - the verdict is unknown: a real fault, and it already carries three warnings that
    decide the exit code between them - the detection error, which now names the
    residue itself, the host-backup mount warning, and the collector reporting that it
    is collecting generic system info only.

There is no mount shape that yields a confident wrong type alongside a residue, and
the reason is structural: /var/lib/dpkg/status is one file covering both products, so
it either proves both or neither. The asymmetry that would make a residue the only
hint of a missed half cannot arise.

So warning level bought nothing and cost plenty. It pinned an otherwise healthy host
at exit 1 on every run over leftovers its operator often cannot delete, since
/var/lib/proxmox-backup belongs to the PVE file-restore stack: a nightly monitor
gating on the exit code would alarm forever on a node whose backups are fine. The host
in issue #315 is exactly that host.

The test now pins the LEVEL rather than the line count, through ReplayConsoleSince,
which replays warning and worse only: putting Warning back makes it fail. Verified by
doing precisely that before committing. The release note no longer promises the exit 1
it was describing, and warnDetectionResidue is renamed reportDetectionResidue because
it no longer warns.

* deps(deps): bump the minor-updates group across 1 directory with 3 updates (#316)

Bumps the minor-updates group with 3 updates in the / directory: [golang.org/x/crypto](https://github.com/golang/crypto), [golang.org/x/term](https://github.com/golang/term) and [golang.org/x/text](https://github.com/golang/text).


Updates `golang.org/x/crypto` from 0.56.0 to 0.57.0
- [Commits](golang/crypto@v0.56.0...v0.57.0)

Updates `golang.org/x/term` from 0.45.0 to 0.46.0
- [Commits](golang/term@v0.45.0...v0.46.0)

Updates `golang.org/x/text` from 0.41.0 to 0.42.0
- [Release notes](https://github.com/golang/text/releases)
- [Commits](golang/text@v0.41.0...v0.42.0)

---
updated-dependencies:
- dependency-name: golang.org/x/crypto
  dependency-version: 0.57.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: minor-updates
- dependency-name: golang.org/x/term
  dependency-version: 0.46.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: minor-updates
- dependency-name: golang.org/x/text
  dependency-version: 0.42.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: minor-updates
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* ci: bump the actions-updates group across 1 directory with 4 updates (#321)

Bumps the actions-updates group with 4 updates in the / directory: [codecov/codecov-action](https://github.com/codecov/codecov-action), [github/codeql-action/init](https://github.com/github/codeql-action), [github/codeql-action/analyze](https://github.com/github/codeql-action) and [github/codeql-action/upload-sarif](https://github.com/github/codeql-action).


Updates `codecov/codecov-action` from 7.0.0 to 7.1.1
- [Release notes](https://github.com/codecov/codecov-action/releases)
- [Changelog](https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md)
- [Commits](codecov/codecov-action@fb8b358...303a32d)

Updates `github/codeql-action/init` from 4.37.9 to 4.38.1
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](github/codeql-action@cdf488f...1c5b675)

Updates `github/codeql-action/analyze` from 4.37.9 to 4.38.1
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](github/codeql-action@cdf488f...1c5b675)

Updates `github/codeql-action/upload-sarif` from 4.37.9 to 4.38.1
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](github/codeql-action@cdf488f...1c5b675)

---
updated-dependencies:
- dependency-name: codecov/codecov-action
  dependency-version: 7.1.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: actions-updates
- dependency-name: github/codeql-action/init
  dependency-version: 4.38.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: actions-updates
- dependency-name: github/codeql-action/analyze
  dependency-version: 4.38.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: actions-updates
- dependency-name: github/codeql-action/upload-sarif
  dependency-version: 4.38.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: actions-updates
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* fix: an unreadable dpkg status stops counting as proof a package is absent

dpkgPackageInstalled answers false for two different facts - the package is
absent, or the status file could not be read at all - and the marker table
printed "not installed" for both. On a SYSTEM_ROOT_PREFIX mount that carries
no /var/lib/dpkg/status, that line stated as checked something the run had
never been able to check, and the marker table is the whole explanation an
operator gets for a detection verdict.

markerLines now reads the status file once and separates the two: a read
error prints "not proven installed (<error>)", naming the path the read
failed on, and "not installed" keeps meaning exactly that. dpkgPackageInstalled
is left alone - it has three callers and two of them are the detection ladder,
which is not what this fixes.

Also realigns the DetectBackupType sample in RESTORE_TECHNICAL.md with the
function it documents. The prose above it already described subtracting
incomplete roles; the code block still showed the body from before that
change, in a file that declares itself the source of truth for restore
compatibility.

Both found by reviewers on the v0.39.0 release PR (#322).

* fix: the dpkg verdict comes from the read that was checked, not from a later one

The previous commit read the status file once to tell "absent" from "could not
read", then called dpkgPackageInstalled per package - which reads the file
again. Three reads, and the verdict printed came from a different read than
the one the check was based on. A status file that stopped being readable
after the check would have been reported as a package simply not installed:
exactly the claim the check exists to stop making.

markerLines now reads once and classifies both packages against that data.
dpkgPackageInstalled keeps its signature, so detectPVE and detectPBS - the
other two callers, and the detection ladder itself - are untouched; its parse
half moves into dpkgPackageInstalledIn, which is what markerLines calls.

TestMarkerTableClassifiesBothPackagesFromOneDpkgRead serves the status file
once and refuses every later read of it. Against the previous commit it fails
with "status exists: YES" directly above "dpkg pve-manager: not installed",
on a host where pve-manager is installed.

Also completes the DetectBackupType sample in RESTORE_TECHNICAL.md: the
comment said hostname heuristics and the body returned SystemTypeUnknown
without them, while the real function does check the hostname.

Both found by CodeRabbit on the v0.39.0 release PR (#322).

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant