15907 Commits

Author SHA1 Message Date
pulse-triage[bot] 0c0532e843 Interpret byte-throughput benchmark changes in the right direction (#3260)
SetBytes benchmarks report B/s beside time and allocation costs. Treat
lower byte throughput as adverse, retain lower-is-better cost metrics,
and include each finding's unit so scaled values are not ambiguous. Keep
the significance, sample and magnitude gates unchanged.

Contract-Neutral: CI benchmark verdict parsing and registered regression
controls only; no product runtime or subsystem contract change.

---
Fleet candidate `20261025T111654Z-delivery-trust` from the
`delivery-trust` lane. Reviewed tip
`296b128254243218a65b34f25ae65ee984d62b94` on `main`.

[How Pulse handles
triage](https://github.com/rcourtman/Pulse/blob/main/docs/AI_TRANSPARENCY.md)
2026-10-25 12:37:11 +00:00
pulse-triage[bot] 1e53b1d708 Keep configuration-transfer feedback in its active dialog (#3259)
**Keep configuration-transfer feedback in its active dialog**

Repeated transfer refusals duplicated persistent dialog feedback in
foreground, inert toasts that obscured phone forms. Keep errors, token
validation and saved-token status with the active dialog, allow its
contents to scroll, and retain an original-workspace completion notice
instead of hiding it. Preserve explicit-only dispatch, scope checks,
uncertain-outcome guidance and closed-dialog success confirmations.
Registered consuming tests and desktop/narrow browser proof cover the
complete interaction.

**Use supported Testing Library role options in transfer tests**

Remove the three Playwright-only exact options from DOM Testing Library
queries. String role names already match exactly there; the controls,
assertions and runtime bytes are unchanged. The full registered suite
passed before TypeScript identified this test-only API mismatch.

Contract-Neutral: Test-only query option correction; no runtime or
subsystem contract change.

---
Fleet candidate `20261025T111654Z-web-product` from the `web-product`
lane. Reviewed tip `6bbc3815a060e230e01aff1c693cbfd7bf616ade` on `main`.

[How Pulse handles
triage](https://github.com/rcourtman/Pulse/blob/main/docs/AI_TRANSPARENCY.md)
2026-10-25 12:28:12 +00:00
pulse-triage[bot] 019545785c Keep future backup dates out of current protection (#3258)
A negative backup or verification age is clock uncertainty, not evidence
of a recent protected backup. Retain provider dates and artifacts,
explain the uncertainty, and preserve access boundaries and ordinary
clock correction through poll and posture reads.

---
Fleet candidate `20261025T111414Z-core-runtime` from the `core-runtime`
lane. Reviewed tip `d7f138cea6f82523a84ffa4924b4effb7f2a18ef` on `main`.

[How Pulse handles
triage](https://github.com/rcourtman/Pulse/blob/main/docs/AI_TRANSPARENCY.md)
2026-10-25 12:17:55 +00:00
pulse-triage[bot] 6bbc3815a0 Use supported Testing Library role options in transfer tests
Remove the three Playwright-only exact options from DOM Testing Library queries. String role names already match exactly there; the controls, assertions and runtime bytes are unchanged. The full registered suite passed before TypeScript identified this test-only API mismatch.

Contract-Neutral: Test-only query option correction; no runtime or subsystem contract change.
Change-source: pulse-maintainer
2026-10-25 11:53:12 +00:00
rcourtman db4fb58fad Keep phone guest rows on one line with the backup shield (#3256)
On phone and narrow Workloads tables the guest name cell stacked the
backup shield on its own line under the name. Its 24px touch target then
made that line taller still, so every guest row on a 375px phone grew
from 32px to 43.5px just to show a 14px icon.

The shield now sits on the name's line, after the name, and the name
truncates first. Negative margins let the 24px target overhang the 14px
icon, so the row stays one line tall and the name loses only the icon's
width.

Measured on a mock stack, Proxmox overview, 36 guest rows:

| Width | Row height before | Row height after | Names truncated before
| Names truncated after |
| --- | --- | --- | --- | --- |
| 375px | 43.5px | 32px | 3 | 9 |
| 430px | 43.5px | 32px | – | 4 |

- Tapping the shield still opens the backup evidence dialog. Tapping the
row still opens the guest drawer.
- Locks keep their separate line below the name.
- Tablet and desktop layouts are unchanged.
2026-10-25 11:51:51 +00:00
pulse-triage[bot] cebe1ae356 Keep configuration-transfer feedback in its active dialog
Repeated transfer refusals duplicated persistent dialog feedback in foreground, inert toasts that obscured phone forms. Keep errors, token validation and saved-token status with the active dialog, allow its contents to scroll, and retain an original-workspace completion notice instead of hiding it. Preserve explicit-only dispatch, scope checks, uncertain-outcome guidance and closed-dialog success confirmations. Registered consuming tests and desktop/narrow browser proof cover the complete interaction.

Change-source: pulse-maintainer
2026-10-25 11:30:01 +00:00
pulse-triage[bot] 296b128254 Interpret byte-throughput benchmark changes in the right direction
SetBytes benchmarks report B/s beside time and allocation costs. Treat lower byte throughput as adverse, retain lower-is-better cost metrics, and include each finding's unit so scaled values are not ambiguous. Keep the significance, sample and magnitude gates unchanged.

Contract-Neutral: CI benchmark verdict parsing and registered regression controls only; no product runtime or subsystem contract change.
Change-source: pulse-maintainer
2026-10-25 11:25:52 +00:00
rcourtman d73e65ad46 Keep phone guest rows on one line with the backup shield
On phone and narrow Workloads tables the guest name cell stacked the
backup shield on its own line under the name, and its 24px touch
target made that line taller still. Every guest row on a 375px phone
grew from 32px to 43.5px just to show a 14px icon, breaking the
one-line compact rows the tables are built around.

The shield now sits on the name's line, after the name, which
truncates first. Negative margins let the 24px target overhang the
14px icon, so the row keeps its single-line height and the name loses
only the icon's width. Tapping the shield still opens the backup
evidence dialog and tapping the row still opens the guest drawer.
Locks keep their separate line below the identity. Tablet and desktop
layouts are unchanged.
2026-10-25 11:22:51 +00:00
pulse-triage[bot] d7f138cea6 Keep future backup dates out of current protection
A negative backup or verification age is clock uncertainty, not evidence of a recent protected backup. Retain provider dates and artifacts, explain the uncertainty, and preserve access boundaries and ordinary clock correction through poll and posture reads.

Change-source: pulse-maintainer
2026-10-25 11:20:39 +00:00
pulse-triage[bot] 7cdf408449 State configuration recovery's limits before transfer (#3255)
**State configuration recovery's limits before transfer**

Remove the overview's all-connections and merge promises. Disclose the
selected-workspace export's exclusions and destination-backup warning
before opening either existing dialog, with the shipped migration guide
and registered consuming coverage. Desktop and narrow browser proof
preserves the existing actions and transfer scope.

**Align Recovery verification-policy regression coverage**

Keep the seven remaining settings shells under framing proof, and assert
transfer-specific membership for Recovery, its dialogs and its flow.
Confirm dedicated proofs match and generic settings architecture cannot
satisfy transfer safety. This repairs PR 3249's reproducible
governance-test failure without changing the guard or weakening the
registry.

**Align subsystem lookup with dedicated transfer verification**

Complete the same Recovery policy move in lookup coverage, including all
three transfer surfaces and their exact proof list. The broader
governance run exposed this stale framing expectation after the first
repair; no runtime, registry or enforcement changes are required.

**Keep Recovery overview proof separate from transfer safety**

Restore the existing dialog/flow verification policy unchanged and give
the Recovery overview its own direct-test requirement. Pin rejection of
cross-surface substitutes, cumulative proof for mixed edits and truthful
forward/reverse lookup routes without changing frontend bytes or
imported history.

---
Fleet candidate `20261025T103613Z-web-product` from the `web-product`
lane. Reviewed tip `77350524c4abb16252b00d35da4cc778b171f69b` on `main`.

[How Pulse handles
triage](https://github.com/rcourtman/Pulse/blob/main/docs/AI_TRANSPARENCY.md)
2026-10-25 11:12:41 +00:00
pulse-triage[bot] f20d5cdfbb Keep canonical protection aligned with recognised Proxmox subjects (#3254)
**Keep canonical protection aligned with recognised Proxmox subjects**

Use the same subject normalisation as recovery rollups when deriving
protection. Fresh points carrying recognised legacy node-scoped
identities must not disappear from a canonical guest's posture. Cover
stale-plus-fresh histories, incomplete/running/task evidence,
independent estates and the real poll/async-ingest path. This does not
establish the cause of issue #3248.

**Publish the canonical subject in persisted protection posture**

The real poll regression caught a second identity boundary: selecting
the newest point's raw subject still made canonical reads miss the
derived posture. Reuse recovery's recognised subject resolver for the
persisted projection, and verify both canonical requested reads and
state-filtered lists. No schema, driver, policy or identity resolver
change.

---
Fleet candidate `20261025T100027Z-core-runtime` from the `core-runtime`
lane. Reviewed tip `b0d76d7cea27f9d612e365809e3147e11383aa06` on `main`.

[How Pulse handles
triage](https://github.com/rcourtman/Pulse/blob/main/docs/AI_TRANSPARENCY.md)
2026-10-25 11:05:06 +00:00
pulse-triage[bot] 7a62ddd6bf Do not infer failing versions from upgrade transitions (#3253)
**Do not infer failing versions from upgrade transitions**

A source-to-target sequence in a declared version or version-leading
title does not identify the failing executable or prove an upgrade
completed. Leave it ambiguous while retaining explicit current-version
declarations and Community-owned labels; exercise the real metadata
consumer without public contact or release inference.

Contract-Neutral: community metadata only; no product runtime or
subsystem contract delta

**Keep upgrade-version intake within the existing guide contract**

The metadata parser repair already implements the guide's existing
chronology rule. Remove its redundant guide addition rather than leave
source and shipped help out of sync; preserve both mirror checks and all
original upgrade safety guidance unchanged.

Contract-Neutral: Restore unchanged guide content; no subsystem or
rendered product contract delta

---
Fleet candidate `20261025T093632Z-product-intelligence` from the
`product-intelligence` lane. Reviewed tip
`3c5503eba94ba8ef2d4c09c322ecc91e08c15501` on `main`.

[How Pulse handles
triage](https://github.com/rcourtman/Pulse/blob/main/docs/AI_TRANSPARENCY.md)
2026-10-25 10:48:15 +00:00
pulse-triage[bot] 77350524c4 Keep Recovery overview proof separate from transfer safety
Restore the existing dialog/flow verification policy unchanged and give the Recovery overview its own direct-test requirement. Pin rejection of cross-surface substitutes, cumulative proof for mixed edits and truthful forward/reverse lookup routes without changing frontend bytes or imported history.

Change-source: pulse-maintainer
2026-10-25 10:39:21 +00:00
pulse-triage[bot] 85abbc3f55 Retain Recovery disclosure candidate for bounded proof-policy correction
Change-source: pulse-maintainer
2026-10-25 10:37:16 +00:00
pulse-triage[bot] 3f6560cd2e Keep isolated issue-triage changes on their dedicated CI path (#3252)
The proposed-source triage suite already exercises the locked parser and
silent-mutation consumers. Pure helper edits still queued unrelated
application suites for more than twenty minutes. Recognise only the six
exact triage inputs from a complete tree diff; mixed, missing and
control-path changes retain full application checks. Keep workflow
output outside the fixture source tree so real-diff controls do not
stage it.

Contract-Neutral: CI admission for isolated issue-event inputs only;
locked triage tests, secret scanning, governance and mixed-source
runtime checks remain enforced, with no product contract or permission
change.

---
Fleet candidate `20261025T085429Z-delivery-trust` from the
`delivery-trust` lane. Reviewed tip
`e404c2fe07096fcf9b733f307a5a834719a966c5` on `main`.

[How Pulse handles
triage](https://github.com/rcourtman/Pulse/blob/main/docs/AI_TRANSPARENCY.md)
2026-10-25 10:23:36 +00:00
pulse-triage[bot] 3c5503eba9 Keep upgrade-version intake within the existing guide contract
The metadata parser repair already implements the guide's existing chronology rule. Remove its redundant guide addition rather than leave source and shipped help out of sync; preserve both mirror checks and all original upgrade safety guidance unchanged.

Contract-Neutral: Restore unchanged guide content; no subsystem or rendered product contract delta
Change-source: pulse-maintainer
2026-10-25 10:19:38 +00:00
rcourtman c1fc30c0d1 Fix cluster member links and safe-profile hostnames (#3251)
Two fixes from one support report.

- Link unpinned cluster members to their Proxmox address. Under strict
TLS a member without its own certificate pin is dialed by its bare node
name, and the frontend then guessed a browser address from the node
interfaces, picking a bridge every member shares (a report had the
newest node open 172.16.0.1). The runtime link now uses the address
Proxmox reports for that member, keeping the dial scheme and port.
Dialing is unchanged.
- Keep the system hostname when migrating to the safe profile. Migration
pinned hostname -f, so migrated hosts switched to their FQDN while
root-profile hosts kept the short name. It now pins the system hostname
the agent already reports. An explicit --hostname still wins. Hosts
migrated earlier keep their stored name.
2026-10-25 10:19:25 +00:00
pulse-triage[bot] b0d76d7cea Publish the canonical subject in persisted protection posture
The real poll regression caught a second identity boundary: selecting the newest point's raw subject still made canonical reads miss the derived posture. Reuse recovery's recognised subject resolver for the persisted projection, and verify both canonical requested reads and state-filtered lists. No schema, driver, policy or identity resolver change.

Change-source: pulse-maintainer
2026-10-25 10:15:52 +00:00
pulse-triage[bot] b10c8dc553 Align subsystem lookup with dedicated transfer verification
Complete the same Recovery policy move in lookup coverage, including all three transfer surfaces and their exact proof list. The broader governance run exposed this stale framing expectation after the first repair; no runtime, registry or enforcement changes are required.

Change-source: pulse-maintainer
2026-10-25 10:13:17 +00:00
pulse-triage[bot] 38655aae50 Keep canonical protection aligned with recognised Proxmox subjects
Use the same subject normalisation as recovery rollups when deriving protection. Fresh points carrying recognised legacy node-scoped identities must not disappear from a canonical guest's posture. Cover stale-plus-fresh histories, incomplete/running/task evidence, independent estates and the real poll/async-ingest path. This does not establish the cause of issue #3248.

Change-source: pulse-maintainer
2026-10-25 10:09:43 +00:00
pulse-triage[bot] bc27f34b70 Align Recovery verification-policy regression coverage
Keep the seven remaining settings shells under framing proof, and assert transfer-specific membership for Recovery, its dialogs and its flow. Confirm dedicated proofs match and generic settings architecture cannot satisfy transfer safety. This repairs PR 3249's reproducible governance-test failure without changing the guard or weakening the registry.

Change-source: pulse-maintainer
2026-10-25 10:02:45 +00:00
pulse-triage[bot] 8030d2f0b5 Restore reviewed configuration recovery guidance on current main
Change-source: pulse-maintainer
2026-10-25 10:01:14 +00:00
pulse-triage[bot] 119bf288b5 Prevent configuration-import replays from overwriting newer edits (#3250)
**Prevent configuration-import replays from overwriting newer edits**

Keep one active import per workspace through persistence and runtime
apply. Reject equal committed archive/passphrase requests for ten
minutes, including after lost responses or failed apply, rather than
repeat writes/reloads or report a cached success. Bound process-local
admission without evicting live protection and release uncommitted
failures for corrected retries. Preserve existing authentication, CSRF,
tenant scope and complete legacy archives. Cover the real handler with
response-loss, overlap, newer-edit, router and admission controls.

**Complete synthetic node credentials in import-replay controls**

The real loader correctly requires both token name and value, including
for disabled fixture nodes. Supply the missing synthetic names so the
controls reach runtime apply rather than fail validation. No runtime
behavior or assertion is changed.

**Use a non-empty backup in scoped replay contract controls**

Keep the existing empty-node wipe defence intact. The contract fixture
targets populated tenants, so give its shared archive a fully
authenticated disabled synthetic node rather than expect an empty export
to remove their inventory. Runtime and admission logic are unchanged.

---
Fleet candidate `20261025T081822Z-core-runtime` from the `core-runtime`
lane. Reviewed tip `d2ae24d62d15f79932f8ec8b9452605604d3bc2e` on `main`.

[How Pulse handles
triage](https://github.com/rcourtman/Pulse/blob/main/docs/AI_TRANSPARENCY.md)
2026-10-25 09:58:08 +00:00
pulse-triage[bot] bbc300116b Do not infer failing versions from upgrade transitions
A source-to-target sequence in a declared version or version-leading title does not identify the failing executable or prove an upgrade completed. Leave it ambiguous while retaining explicit current-version declarations and Community-owned labels; exercise the real metadata consumer without public contact or release inference.

Contract-Neutral: community metadata only; no product runtime or subsystem contract delta
Change-source: pulse-maintainer
2026-10-25 09:49:46 +00:00
rcourtman 5ad599fc98 Keep the system hostname when migrating to the safe profile
Safe-profile migration pinned the output of hostname -f as the agent's
reported name, so every migrated host switched to its FQDN while
root-profile hosts kept the short system hostname the agent reads. Pin
the system hostname instead. An explicit --hostname still wins, and the
server's authority check already accepts short and FQDN forms of the
bound name. Hosts migrated earlier keep their stored name.

Contract-Neutral: Safe-profile migration now pins the system hostname the agent already reports; no agent-lifecycle or deployment-installability clause names the hostname -f choice, and the new install_sh_test.go case proves the behaviour.
2026-10-25 09:43:39 +00:00
rcourtman 95bc267bfd Link unpinned cluster members to their Proxmox address
Under strict TLS a cluster member without its own certificate pin is
dialed by its bare node name, which is what happens to a node that joins
after the others were pinned. Its runtime link was left empty, so the
frontend swapped the bare name for an address guessed from the node's
interfaces and picked a bridge every member shares. A support report
had the newest node's web interface link open 172.16.0.1 instead of
the node's management address.

When neither the member nor the connection has a link override and the
dial URL is a bare label, use the address Proxmox reports for that
member, keeping the dial scheme and port. Dialing is unchanged.
2026-10-25 09:43:39 +00:00
pulse-triage[bot] e404c2fe07 Keep isolated issue-triage changes on their dedicated CI path
The proposed-source triage suite already exercises the locked parser and silent-mutation consumers. Pure helper edits still queued unrelated application suites for more than twenty minutes. Recognise only the six exact triage inputs from a complete tree diff; mixed, missing and control-path changes retain full application checks. Keep workflow output outside the fixture source tree so real-diff controls do not stage it.

Contract-Neutral: CI admission for isolated issue-event inputs only; locked triage tests, secret scanning, governance and mixed-source runtime checks remain enforced, with no product contract or permission change.
Change-source: pulse-maintainer
2026-10-25 09:04:08 +00:00
pulse-triage[bot] d2ae24d62d Use a non-empty backup in scoped replay contract controls
Keep the existing empty-node wipe defence intact. The contract fixture targets populated tenants, so give its shared archive a fully authenticated disabled synthetic node rather than expect an empty export to remove their inventory. Runtime and admission logic are unchanged.

Change-source: pulse-maintainer
2026-10-25 09:03:40 +00:00
pulse-triage[bot] be1125fbc8 State configuration recovery's limits before transfer
Remove the overview's all-connections and merge promises. Disclose the selected-workspace export's exclusions and destination-backup warning before opening either existing dialog, with the shipped migration guide and registered consuming coverage. Desktop and narrow browser proof preserves the existing actions and transfer scope.

Change-source: pulse-maintainer
2026-10-25 09:02:33 +00:00
pulse-triage[bot] c6666e9b94 Release v6.6.0 (#3247)
Release preparation for `v6.6.0`. After this merges, the release
workflow runs at this exact head
`76da9cfbbaec64ebd5fe76395bdd53eaaca6867a`.
2026-10-25 09:02:28 +00:00
pulse-triage[bot] 29c3359163 Preserve document reference links during issue classification (#3246)
Keep the locked parser's document-wide reference definitions when
classifying extracted version, feedback and topic fields. Match visible
link labels without reading destinations as evidence or fetching them.
Exercise all three fields and the silent label consumer, preserving
Community state and unknown or copied evidence.

Contract-Neutral: Silent issue-label metadata only; no product runtime,
rendered frontend, dependency, access or canonical subsystem contract
delta.

---
Fleet candidate `20261025T080016Z-product-intelligence` from the
`product-intelligence` lane. Reviewed tip
`2b3d5605287e4b6bcf8d8066271feca7e1697a2d` on `main`.

[How Pulse handles
triage](https://github.com/rcourtman/Pulse/blob/main/docs/AI_TRANSPARENCY.md)
2026-10-25 08:58:55 +00:00
pulse-triage[bot] 5a0549a65d Bind configuration transfers to their confirmed workspace (#3245)
**Bind configuration transfers to their confirmed workspace**

Capture the target before file or CSRF preparation, freeze submitted
inputs and use the existing strict non-retrying API path. Keep one
operation pending, suppress late downloads/reloads after scope changes
or teardown, and require explicit resubmission after token entry.

An unconfirmed import may have applied: retain that warning rather than
claiming no work occurred. Browser reset controls show transport-level
replay despite one application fetch; server-side single-application
protection remains a separate Core assessment.

**Check configuration recovery's actual reload timers**

Track the scheduled 2000 ms reload and its exact cancellation handle
instead of asserting the total fake-clock task count. Unrelated queued
timer observations must neither fail nor stand in for the real no-reload
and cleanup proofs.

**Keep configuration reload timer assertions typed**

Use the concrete timeout function for the Vitest spy so callback
arguments retain their types under strict type checking.

**Keep configuration-transfer ownership in registry order**

Insert the two transfer files into the existing case-insensitive sorted
ownership list so the real registry audit accepts the candidate.
Membership, path policies, proof requirements and frontend content are
unchanged.

**Keep configuration-transfer guidance within copy-style checks**

Repair the two user-visible semicolons rejected by PR 3241's frontend CI
without weakening checks or changing transfer behaviour. Protect the
messages with consuming tests and fresh desktop/narrow browser proof.

Contract-Neutral: Copy-only configuration-transfer CI repair. Scope,
authority and transfer behaviour are unchanged.

---
Fleet candidate `20261025T080021Z-web-product` from the `web-product`
lane. Reviewed tip `f4d8913008476e7df96172cb40b97f6068cea40e` on `main`.

[How Pulse handles
triage](https://github.com/rcourtman/Pulse/blob/main/docs/AI_TRANSPARENCY.md)
2026-10-25 08:46:56 +00:00
pulse-triage[bot] 76da9cfbba Prepare v6.6.0
Promote v6.6.0-rc.6 to stable after its 24-hour soak. Only release metadata changes.

Contract-Neutral: Release-only v6.6.0 version, release notes and distribution metadata; no public install or runtime contract changes.
Change-source: pulse-maintainer
v6.6.0 helm-chart-6.6.0
2026-10-25 08:39:03 +00:00
pulse-triage[bot] c26dd6d765 Complete synthetic node credentials in import-replay controls
The real loader correctly requires both token name and value, including for disabled fixture nodes. Supply the missing synthetic names so the controls reach runtime apply rather than fail validation. No runtime behavior or assertion is changed.

Change-source: pulse-maintainer
2026-10-25 08:33:56 +00:00
pulse-triage[bot] 3e6207804a Prevent configuration-import replays from overwriting newer edits
Keep one active import per workspace through persistence and runtime apply. Reject equal committed archive/passphrase requests for ten minutes, including after lost responses or failed apply, rather than repeat writes/reloads or report a cached success. Bound process-local admission without evicting live protection and release uncommitted failures for corrected retries. Preserve existing authentication, CSRF, tenant scope and complete legacy archives. Cover the real handler with response-loss, overlap, newer-edit, router and admission controls.

Change-source: pulse-maintainer
2026-10-25 08:29:34 +00:00
pulse-triage[bot] 2b3d560528 Preserve document reference links during issue classification
Keep the locked parser's document-wide reference definitions when classifying extracted version, feedback and topic fields. Match visible link labels without reading destinations as evidence or fetching them. Exercise all three fields and the silent label consumer, preserving Community state and unknown or copied evidence.

Contract-Neutral: Silent issue-label metadata only; no product runtime, rendered frontend, dependency, access or canonical subsystem contract delta.
Change-source: pulse-maintainer
2026-10-25 08:11:05 +00:00
pulse-triage[bot] f4d8913008 Keep configuration-transfer guidance within copy-style checks
Repair the two user-visible semicolons rejected by PR 3241's frontend CI without weakening checks or changing transfer behaviour. Protect the messages with consuming tests and fresh desktop/narrow browser proof.

Contract-Neutral: Copy-only configuration-transfer CI repair. Scope, authority and transfer behaviour are unchanged.
Change-source: pulse-maintainer
2026-10-25 08:05:51 +00:00
pulse-triage[bot] fbfaea4eab Reproduce partial recovery when guest metadata cannot be imported (#3244)
**Reproduce partial recovery when guest metadata cannot be imported**

Cover false-success metadata failures, whole-file rollback and restored
absence, plus HTTP failure audit and unchanged runtime controls.

Contract-Neutral: Adds regression controls for the existing
configuration recovery transaction; no runtime, archive format, API or
access contract changes.

**Commit guest metadata with configuration recovery**

Stage guest metadata with the archive's settings and credentials,
publish the live cache only after a successful commit, and serialize it
with pending identity snapshots. Restore newly created targets and an
original moved aside before a failed replacement. Preserve
normalization, scope, archive compatibility and ordinary metadata-writer
ownership.

Contract-Neutral: Repairs the existing all-or-nothing configuration
recovery behaviour; archive formats, API response shape, tenant
authority and normal metadata mutation contracts are unchanged.

**Keep recovery backups and legacy settings inside the import
transaction**

The full preservation controls exposed backup writes outside staging.
Stage node and API-token backups, delay pruning until every section
commits, and include the legacy settings-file update. Preserve normal
non-import save behaviour and successful import backup retention; verify
prior backups and settings survive failed recovery.

Contract-Neutral: Completes failure preservation for the existing
configuration import transaction without changing archive formats, API
response shape, tenant scope or ordinary save and backup-retention
contracts.

---
Fleet candidate `20261025T063939Z-core-runtime` from the `core-runtime`
lane. Reviewed tip `a16f19c370e3d390eec3fd49566528e43221721f` on `main`.

[How Pulse handles
triage](https://github.com/rcourtman/Pulse/blob/main/docs/AI_TRANSPARENCY.md)
2026-10-25 08:05:04 +00:00
pulse-triage[bot] 22a0aa113f Merge reviewed configuration-transfer safety candidate for CI repair
Change-source: pulse-maintainer
2026-10-25 08:00:57 +00:00
pulse-triage[bot] 517fac49bb Bound signed manual-update bootstrap downloads (#3243)
**Bound signed manual-update bootstrap downloads**

Keep both bootstrap requests within curl's connection and whole-request
deadlines, without ambient retry settings. Arm cleanup before allocation
so a second mktemp failure cannot strand the first input. Exercise the
emitted helper's signed success, partial download failures, allocation
failures and signature rejection without native or production execution.

**Keep native recovery proof aligned with bounded manual downloads**

Admit only the manual helper's exact new curl envelope in the existing
closed transport fixture. Require a signed emitted-helper round trip and
reject altered deadlines, retries and TLS flags through the registered
installer suite; do not widen the adapter or execute a native journey.

**Preserve each configuration-backup safety control's deadline**

The containing installer suite exhausted a single 30-second Python-class
budget after eleven controls and killed the last. Use the existing
serial discovery runner with all twelve required methods, retaining each
control's 30-second bound and the existing inner shell bounds rather
than treating cumulative class time as a safety deadline.

---
Fleet candidate `20261025T062429Z-delivery-trust` from the
`delivery-trust` lane. Reviewed tip
`b6618c19a3f2925fff019db2651d885ad1ede9b8` on `main`.

[How Pulse handles
triage](https://github.com/rcourtman/Pulse/blob/main/docs/AI_TRANSPARENCY.md)
2026-10-25 07:54:16 +00:00
pulse-triage[bot] 23d08f81e5 Keep feedback classification bound to the visible selection (#3242)
Read only the selected feedback option rather than bug-like words in
link destinations, titles, prose or withdrawn examples. Preserve all
current dropdown choices, legacy Bug and Regression values, maintainer
classifications and unrelated Community labels. Registered consumer
controls exercise the silent label delta without contact or release
inference.

Contract-Neutral: Silent issue-label metadata only; no product runtime,
frontend, dependency, access or canonical subsystem contract delta.

---
Fleet candidate `20261025T064010Z-product-intelligence` from the
`product-intelligence` lane. Reviewed tip
`41acf9ca6f261bf7355369cad498cff90a1e504d` on `main`.

[How Pulse handles
triage](https://github.com/rcourtman/Pulse/blob/main/docs/AI_TRANSPARENCY.md)
2026-10-25 07:40:13 +00:00
pulse-triage[bot] a16f19c370 Keep recovery backups and legacy settings inside the import transaction
The full preservation controls exposed backup writes outside staging. Stage node and API-token backups, delay pruning until every section commits, and include the legacy settings-file update. Preserve normal non-import save behaviour and successful import backup retention; verify prior backups and settings survive failed recovery.

Contract-Neutral: Completes failure preservation for the existing configuration import transaction without changing archive formats, API response shape, tenant scope or ordinary save and backup-retention contracts.
Change-source: pulse-maintainer
2026-10-25 07:08:04 +00:00
pulse-triage[bot] ae2d3ff41f Commit guest metadata with configuration recovery
Stage guest metadata with the archive's settings and credentials, publish the live cache only after a successful commit, and serialize it with pending identity snapshots. Restore newly created targets and an original moved aside before a failed replacement. Preserve normalization, scope, archive compatibility and ordinary metadata-writer ownership.

Contract-Neutral: Repairs the existing all-or-nothing configuration recovery behaviour; archive formats, API response shape, tenant authority and normal metadata mutation contracts are unchanged.
Change-source: pulse-maintainer
2026-10-25 06:51:41 +00:00
pulse-triage[bot] 41acf9ca6f Keep feedback classification bound to the visible selection
Read only the selected feedback option rather than bug-like words in link destinations, titles, prose or withdrawn examples. Preserve all current dropdown choices, legacy Bug and Regression values, maintainer classifications and unrelated Community labels. Registered consumer controls exercise the silent label delta without contact or release inference.

Contract-Neutral: Silent issue-label metadata only; no product runtime, frontend, dependency, access or canonical subsystem contract delta.
Change-source: pulse-maintainer
2026-10-25 06:51:38 +00:00
pulse-triage[bot] b6618c19a3 Preserve each configuration-backup safety control's deadline
The containing installer suite exhausted a single 30-second Python-class budget after eleven controls and killed the last. Use the existing serial discovery runner with all twelve required methods, retaining each control's 30-second bound and the existing inner shell bounds rather than treating cumulative class time as a safety deadline.

Change-source: pulse-maintainer
2026-10-25 06:49:45 +00:00
pulse-triage[bot] c794556acf Reproduce partial recovery when guest metadata cannot be imported
Cover false-success metadata failures, whole-file rollback and restored absence, plus HTTP failure audit and unchanged runtime controls.

Contract-Neutral: Adds regression controls for the existing configuration recovery transaction; no runtime, archive format, API or access contract changes.
Change-source: pulse-maintainer
2026-10-25 06:44:49 +00:00
pulse-triage[bot] 5d748986b3 Keep native recovery proof aligned with bounded manual downloads
Admit only the manual helper's exact new curl envelope in the existing closed transport fixture. Require a signed emitted-helper round trip and reject altered deadlines, retries and TLS flags through the registered installer suite; do not widen the adapter or execute a native journey.

Change-source: pulse-maintainer
2026-10-25 06:38:18 +00:00
pulse-triage[bot] 923431692e Keep configuration-transfer ownership in registry order
Insert the two transfer files into the existing case-insensitive sorted ownership list so the real registry audit accepts the candidate. Membership, path policies, proof requirements and frontend content are unchanged.

Change-source: pulse-maintainer
2026-10-25 06:37:10 +00:00
pulse-triage[bot] b239891b75 Bound signed manual-update bootstrap downloads
Keep both bootstrap requests within curl's connection and whole-request deadlines, without ambient retry settings. Arm cleanup before allocation so a second mktemp failure cannot strand the first input. Exercise the emitted helper's signed success, partial download failures, allocation failures and signature rejection without native or production execution.

Change-source: pulse-maintainer
2026-10-25 06:33:50 +00:00
pulse-triage[bot] 4d704391b0 Keep configuration reload timer assertions typed
Use the concrete timeout function for the Vitest spy so callback arguments retain their types under strict type checking.

Change-source: pulse-maintainer
2026-10-25 06:25:36 +00:00