Commit Graph

1941 Commits

Author SHA1 Message Date
pulse-triage[bot] aece6b5217 Keep copied API requests private, bounded and one-shot
Save every existing reference response privately, including errors and partial POST results. Preserve private header files, reject unsafe preparation and URLs, and stop on redirects or transport errors without retries. Exercise all eight copied GET/POST examples against real synthetic HTTP/TLS peers, including the old response exposure.

Contract-Neutral: Harden existing API documentation recipes and their shipped mirror with connected tests; no runtime, endpoint, authentication, scope, action, dependency or permission contract changes.
Change-source: pulse-maintainer
2026-10-05 01:52:58 +01:00
pulse-triage[bot] 50941e431a Compile the copied PBS request controls against addressable recipes
Retain the guide recipe array before selecting its request slice; the initial exact-source proof rejected a temporary array slice before running any tests.

Contract-Neutral: Correct test compilation only; existing PBS documentation and runtime contracts are unchanged.
Change-source: pulse-maintainer
2026-10-05 00:45:13 +01:00
pulse-triage[bot] bcbf7f0992 Keep PBS credentials, diagnostics and installer preparation private
Fail closed before editing unsafe credential paths, ignore curl configuration and retain diagnostic responses privately. Bound requests, reject redirects and publish the local installer path only after a complete HTTPS 200 download without overwriting existing files. Exercise the copied recipes against synthetic TLS peers and file failures.

Contract-Neutral: Harden existing PBS documentation recipes and their shipped mirror; no runtime, API, permission, installation contract or dependency change.
Change-source: pulse-maintainer
2026-10-05 00:41:26 +01:00
pulse-triage[bot] 1f0d12af85 Match safety fixtures to private responses and native platforms
PR2472 build run 37239183545 extracts no wrapped TrueNAS recipes; exercise all three current blocks and retain synthetic HTTP response bodies only in private files, including 201 save and error controls. Native run 37239183481 expects a Linux QGA capability on macOS and Windows; assert non-Linux agents do not advertise it and scope the connected PVE fixture to its actual Linux runtime. Production safety and documentation remain unchanged.

Contract-Neutral: Test-only reconciliation of already-reviewed private-response recipes and existing Linux-only guest-execution capability; no product contract change.
Change-source: pulse-maintainer
2026-10-05 00:08:47 +01:00
pulse-triage[bot] d589407a74 Keep optional TrueNAS parent controls independent of other proof inputs
Source proofs can supply unrelated input files. Retain recipe mutation controls while reading the exact parent only when its named guide was supplied; unrelated input directories must not become a new full-suite prerequisite.

Contract-Neutral: Test-only optional-input handling; no shipped guidance or product contract change.
Change-source: pulse-maintainer
2026-10-04 21:31:04 +01:00
pulse-triage[bot] cadfd1f4e1 Keep TrueNAS API setup credentials and responses private
Make the existing connection guide fail closed before editing credentials, ignore curl configuration, bound each single POST and retain sensitive responses in new private files. Explain actual test/save status and uncertain-save readback without retrying setup as diagnostics.

Contract-Neutral: Documentation-only credential handling and copied-recipe regression tests; no runtime API, TrueNAS polling, authentication or connection-management contract changes.
Change-source: pulse-maintainer
2026-10-04 21:21:27 +01:00
pulse-triage[bot] f00390f1fe Integrate reviewed credential-safe MSP diagnostics
Reviewed exact PI candidate 5e6d5af3b5. Existing guidance and shipped mirror now use private header files, verified HTTPS and bounded read-only checks. Retain source-e1x7r92a installer/vet, source-oypceg0j docs tests and Chromium/WebKit rendering evidence; no native tenant isolation or publication claim.

Change-source: pulse-maintainer
2026-10-04 20:58:45 +01:00
pulse-triage[bot] 405332ef21 Reconcile batch-start published Pulse main
Change-source: pulse-maintainer
2026-10-04 20:45:14 +01:00
pulse-triage[bot] 5e6d5af3b5 Make MSP isolation checks credential-safe and TLS-verified
Replace inline token arguments and certificate bypasses with private header files and verified HTTPS. Bound the read-only probes, discard bodies, preserve failed curl exits and distinguish an invalid token from a checked tenant boundary. Keep the shipped guide byte-synchronised. Exercise copied commands with a synthetic TLS peer, private-header canaries, hostile curl configuration and refusal/redirect controls; no customer endpoint is used.

Contract-Neutral: Existing diagnostic guidance and regression coverage only; no runtime, public API, token scope or tenant-isolation contract change.
Change-source: pulse-maintainer
2026-10-04 20:20:06 +01:00
pulse-triage[bot] c0b3ddf1e5 Prepare v6.5.0-rc.1
Release candidate cut from main at 2e9404504b. It carries every change merged since stable v6.4.5.

Contract-Neutral: Release-only v6.5.0-rc.1 version, notes and packet metadata generated by pulse-maintainer-release-metadata; no public install or runtime contract changes.
Change-source: pulse-maintainer
2026-10-04 20:04:59 +01:00
pulse-triage[bot] bd749254b5 Reconcile batch-start published Pulse main
Change-source: pulse-maintainer
2026-10-04 19:22:41 +01:00
pulse-triage[bot] 2e9404504b Restore backup-alert protection and keep guest, backup and Diagnostics evidence truthful (#2463)
## What changes and why
- Keep backup-age checks fast and make failed or partial evaluations
visible through one existing system warning, without clearing retained
age alerts. Indexed latest-observation reads preserve retention, schema
and the read budget. This responds to the recurring missed checks
reported in #2465; synthetic timing is not proof of relief on the
reporter's Pi.
- Defer guest-agent commands after uncertain HTTP results and require
same-target, unambiguous backup-lock evidence before guest reads. Keep
guest coverage truthful when only remembered versions or a parent-node
assignment exist. Preserve the original observation time/source of
retained memory through existing backend projections. These changes
advance #2439 safety, but do not establish native thaw or recovery.
- Attribute Proxmox backups using native connection/node and unique PBS
namespace evidence, retaining ambiguous artifacts rather than assigning
them by substring or display name. Show unreliable PBS capacity as
Unknown/Unavailable, while retaining valid measured zero and readable
phone warnings.
- Restore existing TrueNAS and VMware connection alerts using the
constructed runtime pollers. This does not resolve the distinct
monitoring cause reported in #2382.
- Keep safe report collection and attachment guidance self-contained,
and make manual backup pause/resumption precautions usable. Repair the
Diagnostics integration journey's outdated controls, download assertions
and session capability, without changing production authorization.

## Included source
Published base `61146105c74a5968d877691e02963c41f8e66076` → exact final
head `af73b0e6c618da83c4fc5e702ba464257481851c`.

The previous proposal head `dcde1d0157d5e3c4cd626d6b920a45016a3f0437`
and all reviewed ancestry remain unchanged. This advances the proposal
once after its workflows completed with demonstrated failures; it does
not interrupt a checking head.

Reviewed candidates include:
- Previous batch: guest HTTP `cd1e3ba12f`, runtime alerts `7f5c8a0cf1`,
safe intake `496ba1e73e`, PBS capacity/render sequence `8f09a59996`
through `d2f7e456b3a`.
- Manual pause `3fd44b8325`; native backup ownership `c5e83ceb3a` /
`6198a3ce22`; authoritative locks `b77e6908e6`; truthful guest coverage
`ba3e2d2c1c` / `8f9a9a6a1e` / `f9f53befbb`.
- Backup evaluation/query `5774b6bc4b` / `7a19a06631`; Diagnostics
sequence `ed168c8d7e` through `a3bbcae0c9`; memory provenance
`abee023634` through `80d8ad0f59`; self-contained intake `7c9922f55d`.
- Starting reviewed canonical tip
`8003a4037bf2e6628d47ca6c7da239a11096168e` is retained. Four additive
publication corrections (`745ddc982a` through `79091f7b03`) supply the
report-form contract, connected docsLinks regression and exact
historical completion pair. The first completion's section placement
failed the checker; its substantive-section correction passes. No
accepted commit was amended or recreated.

## Validation and remaining gates
The previous proposal's completed runs remain adverse: Build/Test
`37204956836` failed the documentation drift assertion; E2E
`37204956824` failed Diagnostics shards 3/6/8 (download/obsolete
Run-control timeouts). These warrant the admitted changed-source
repairs, not an unchanged retry.

Retained reviewed evidence includes guest transport/connected/race/build
(`source-5_ta7via`), runtime alert connected proof (`source-s0xmdftf`),
PBS source/render evidence (`source-_9ekxhcy`), manual-pause
source/render (`source-ifgmfzhw`), all-reader authoritative-lock proof
(`source-41amnzmb`), guest coverage's 1,901 connected tests/full
types/lint/build and inspected Chromium/WebKit desktop/phone renders
(`source-3y6kfagt`), backup recovery/alerts/monitoring/races/vet/real
builds (`source-vc1jlsz9`), and memory
models/unified-resource/alerts/monitoring/races/vet/types/real
embed/build (`source-5swnugj9`). Diagnostics retains nine passing
full-app journeys with matching source hashes; catalogue
`source-cyehgbio` discovers 916 test/project identities, including all
nine Diagnostics cases, but is not runtime acceptance. Intake
`source-stznewur` retains two intended parent failures and passing
policy/documentation/mirror checks.

Publication checks: provenance, clean retained ancestry, per-commit
canonical completion/history, registry/contract audits and final
browser-content coverage (nine changed production frontend files) pass.
Earlier proposal-head (`79091f7b`) offline VM proof `source-1fn6chab`
passes 36 docsLinks tests, formatting, 27 intake cases, 211 public
Markdown checks and 62 mirrors, with complete hash-matched output and
guest stop. Its line-index bound is explicit. Earlier `source-yj300mm2`
passed docsLinks but exited 1 when a browser script was mistakenly
invoked in a source VM without Playwright; no browser result is claimed
from that attempt. Earlier local preparation failures and prior
API/embed limitation remain evidence at their own bindings, not green
aggregate results.

Required exact-head CI must run the complete backend/build/frontend,
audit and protected E2E checks, with independent source review, before
landing. Existing sufficient connected/render proof was not repeated
solely for batching. This is source publication, not release
qualification, deployment, native appliance/guest acceptance or
completion of the linked reports. The containing all-main release, Pi
evaluation/failure/recovery, native backup/thaw/covered writes/liveness,
remaining memory drawer consumption and installed whole-panel/alert
results remain separate.

Related to #2465
Related to #2439
Related to #2382


[How Pulse handles
triage](https://github.com/rcourtman/Pulse/blob/main/docs/AI_TRANSPARENCY.md)

## Completed workflow reconciliation and additive smoke repair
The starting proposal head `79091f7b0317807fcc76e36cde52c4ee1cc4c928`
and every reviewed commit remain ancestors of this head. Build/Test
`37219920651` has now completed. All backend partitions, frontend,
governance, security and all eight E2E shards/verdict passed, but script
smoke failed two obsolete whole-guide assertions in
`test_vm_disk_diagnostics.py`; backend build was consequently skipped.

The reviewed manual backup precaution deliberately adds six server/timer
examples. The old passive-helper test counted all seven guide examples
and banned `systemctl` throughout the whole guide. This source mismatch
warrants changed-source repair, not an unchanged retry. Additive
test-only `c4a72995c6bf2465a6540a1b546a9dcd732944af` scopes
passive-helper execution to its named section and admits only the exact
six reviewed manual-pause blocks. Its first local run retained one
failure because a shell comment was mistaken for a heading. Additive
`af73b0e6c618da83c4fc5e702ba464257481851c` parses headings only outside
fenced blocks. All 17 diagnostics/safety controls now pass, including
missing/duplicate headings, shell comments and five prohibited-command
mutations. The passive helper still rejects active guest requests and
service mutations. Production and guidance bytes remain unchanged;
mirrored docs and connected intake checks pass. Both failed
correction/control observations remain recorded, not relabelled.

Final publication provenance, clean retained ancestry, additive
contract/registry audits and the unchanged nine-production-file
browser-content coverage pass. Lightweight confined fixture proof
supplies the full 17-case suite; existing heavy/render proof was not
repeated for this test-only delta. This proposal advances only after the
previous head's workflows completed. Exact new-head CI must rerun its
required checks before landing.

The completed advisory benchmark job is also adverse:
`RefreshPlatformScopes` 294.1 → 325.0 ns (+10.51%) and
`ClassifyResourceSensitivity` 67.68 → 77.20 ns (+14.07%), each p=0.000
with ten samples. Their implementation and benchmark source are
unchanged across the batch; that does not prove noise, intentional cost
or lack of regression. Delivery owns a bounded evidence-based
disposition through the existing lane handoff. No favourable repeat,
threshold change or performance/release approval is claimed.


[How Pulse handles
triage](https://github.com/rcourtman/Pulse/blob/main/docs/AI_TRANSPARENCY.md)
2026-10-04 18:07:16 +00:00
pulse-triage[bot] 5060e1b6b8 Integrate reviewed parsed report-intake safety proof
Retain both exact completion histories and combine their self-contained safety obligations with the parsed-YAML and connected docsLinks controls. Use the reviewed corrected f8c5e988 completion pair; guards and frontend source remain unchanged.

Change-source: pulse-maintainer
2026-10-04 18:59:12 +01:00
pulse-triage[bot] af73b0e6c6 Keep fenced shell comments inside the selected diagnostics section
The first publication correction retained the two original defects as history but its heading matcher treated the reviewed shell comment as a boundary. Parse headings only outside fenced blocks, and pin comment, duplicate-heading and missing-heading controls. All 17 passive diagnostics and safety-boundary fixtures now pass; no production or guidance bytes changed.

Change-source: pulse-maintainer
2026-10-04 18:43:10 +01:00
pulse-triage[bot] c4a72995c6 Keep passive VM diagnostics separate from planned server pause controls
The completed PR smoke job demonstrates two obsolete whole-guide assertions after the reviewed manual backup precaution added six server-control examples. Select the unique passive preflight section for helper execution, constrain planned pause examples exactly, and reject active probes or service operations outside that section. Production code and safe guidance remain unchanged.

Change-source: pulse-maintainer
2026-10-04 18:40:58 +01:00
rcourtman bd9063ed56 Cut 6.5 and later releases from main
Releases are cut from the head of main since 2 October, but three things
still made every release need hand edits before it could pass:

- the control plane routed 6.5.x to the abandoned release/v6.5 line;
- main lacked the published 6.4.4 to 6.4.6 packets, so rollback
  derivation on main still found 6.4.1;
- the packet tests pinned prose from old 6.4.x notes (named
  highlights, issue numbers, one release's mobile decision) and the
  per-release sentences in the deployment-installability contract,
  which changes several times a day on main.

Map 6.5 to main, carry the published packets over from release/v6.4,
and keep the packet tests to what the release tooling generates: version
pins, packet pointers, required sections and the rollback, signing and
mobile sentences.

Contract-Neutral: Release routing and release-packet test scope only; no runtime, install or public contract changes.
2026-10-04 18:37:43 +01:00
pulse-triage[bot] 79091f7b03 Bind report-form completion to its corrected substantive section
Use the exact additive completion that satisfies the unchanged canonical checker. Retain the earlier failed completion and every reviewed commit as history.

Change-source: pulse-maintainer
2026-10-04 18:11:53 +01:00
pulse-triage[bot] 12df32ad9d Bind reviewed report-form repair to its additive completion
Register the exact historical completion pair for governance CI; preserve the intermediate repair and all later accepted source unchanged. Completion checks still require ancestry, substantive contract text and registry-accepted proof.

Change-source: pulse-maintainer
2026-10-04 18:10:47 +01:00
pulse-triage[bot] 3fe74bf208 Bind report-intake completion to the corrected source proof
Keep the inherited report-form commit untouched and bind its additive completion to the tree with the actual optional attachment field IDs. The existing real guard still requires the contract and executable verification together; no release or runtime acceptance is asserted.

Change-source: pulse-maintainer
2026-10-04 18:04:59 +01:00
pulse-triage[bot] f8c5e98819 Bind report-intake verification to the actual attachment fields
The first exact-source suite reached an erroneous common evidence-field assumption: the bug form uses logs while the prerelease form uses evidence. Verify both real identities and their shared label without changing either form, requiring new diagnostics or weakening the optional-evidence assertion. Retain the original failed proof.

Change-source: pulse-maintainer
2026-10-04 17:59:41 +01:00
pulse-triage[bot] 37b271f4fc Bind retained report-intake history to its additive completion
Use the existing exact-commit completion registry and exercise its real guard, ancestry and substantive verification requirements. Preserve the original documentation-link commit and the final self-contained forms; no history is rewritten and no completion or release check is weakened.

Change-source: pulse-maintainer
2026-10-04 17:46:11 +01:00
pulse-triage[bot] 89b8151f19 Complete the retained report-intake safety contract and proof
Record self-contained collection and privacy safeguards for installed releases and parse both forms to protect their actual inline advice. This additively supplies the missing deployment-installability contract and accepted verification for the retained documentation-link correction without rewriting reviewed history or changing any runtime safeguard.

Change-source: pulse-maintainer
2026-10-04 17:45:03 +01:00
pulse-triage[bot] c7bb48f0b4 Clarify the existing webhook correlation contract
Keep canonical guidance aligned with the actual unchanged header and copied member-aware templates. Pin the correction in the same safety guard so a later maintainer does not restore permanent header-only deduplication.

Contract-Neutral: Documentation clarification and its verification only; webhook wire format, retry stability and runtime behaviour are unchanged.
Change-source: pulse-maintainer
2026-10-04 08:44:50 +01:00
pulse-triage[bot] 76430cc058 Check rendered webhook safety without incidental fixture assumptions
Normalise Markdown emphasis in the safety guard and observe optional runtime imports instead of requiring an auth call on every browser reload. Assert no other backend activity and preserve all console errors.

Contract-Neutral: Validation fixtures only; product and notification behaviour are unchanged.
Change-source: pulse-maintainer
2026-10-04 08:26:09 +01:00
pulse-triage[bot] 94a14c78c7 Keep webhook bridge guidance from discarding later alerts
The legacy correlation header omits occurrence start, severity and group members. Show receivers the existing full-precision member data, preserve later incidents and severity updates, and test the copyable templates through the actual signed sender. Keep the freshness verifier and runtime wire format unchanged.

Contract-Neutral: Help, executable examples, tests and sender comments only; notification behaviour, schemas and webhook headers are unchanged.
Change-source: pulse-maintainer
2026-10-04 08:16:23 +01:00
pulse-triage[bot] f312a70ae5 Integrate reviewed publication fixture isolation
Accept Delivery's exact same-major Node selector controls and caller-independent fake audit timing. Preserve the existing canonical browser workflow Node 24 selector and its focused regression. Production audit and release gates remain unchanged.

Change-source: pulse-maintainer
2026-10-04 07:14:53 +01:00
pulse-triage[bot] 903dc08d23 Keep browser release qualification on the governed Node line
PR #2456 run 37179468966 failed TestNodeToolchainParity because the new workflow selected a patch version instead of the existing governed Node 24 line. Match the other workflows and add a focused trust regression without weakening the parity contract.

Contract-Neutral: Correct a workflow toolchain selector to the existing repository contract; no application, permission or release gate changes.
Change-source: pulse-maintainer
2026-10-04 07:06:02 +01:00
pulse-triage[bot] 9213a6d75a Keep publication checks independent of selector and fixture formatting
Accept a stable exact Node pin only within the governed major instead of
comparing its entire string with the major selector. Keep all other lines,
ranges and unresolved selectors rejected. This repairs the deterministic
required-check failure on the published-RC browser workflow without removing
its exact Node pin.

Give fake npm audit tests their own default timing controls and exercise
poisoned caller environments while preserving explicit watchdog tests.
No production audit verdict, dependency graph, benchmark threshold or release
gate changes.

Change-source: pulse-maintainer
2026-10-04 06:41:04 +01:00
pulse-triage[bot] c0ceff6697 Keep TrueNAS safety assertions independent of Markdown wrapping
PR #2456 run 37175962472 rejected retained safety warnings only because of a line break and sentence capitalization. Normalize prose for these assertions without removing any required warning or diagnostic field.

Contract-Neutral: Documentation test presentation normalization only; no runtime, API or safety-guidance change.
Change-source: pulse-maintainer
2026-10-04 06:09:49 +01:00
pulse-triage[bot] b42563d966 Integrate reviewed narrow-identity release browser route
Retain exact Delivery candidate and its reviewed history. Offline packet, lifecycle and Tailnet controls pass; unchanged Chromium refusal receipts remain bound to their executed source. Native collection still requires protected publication, host activation and credential-administrator confirmation of dedicated tag:ci-deploy scope and self-only access.

Change-source: pulse-maintainer
2026-10-04 05:20:54 +01:00
pulse-triage[bot] 2fb4bf9eee Bind release browser qualification to the narrow CI identity
Use a dedicated Auth Keys write client restricted to tag:ci-deploy, never the broader demo registration. Reject missing configuration and validate the actual running Self tag and DNS before Serve. Keep exact-source, denial-stop, no-replay and cleanup contracts, with connected offline registration and Serve controls.

Change-source: pulse-maintainer
2026-10-04 04:57:17 +01:00
pulse-triage[bot] adcd0ddf01 Reject ambiguous configuration in passive VM disk preflight
Do not report an absent lock or agent setting after malformed current-configuration output. Preserve passive bounded host reads, private output, unknown well-formed fields and the distinction from guest responsiveness or thaw.

Contract-Neutral: The operator-only helper now enforces its existing incomplete-read failure semantics; polling, guest-agent admission, API and storage contracts are unchanged.
Change-source: pulse-maintainer
2026-10-04 04:46:02 +01:00
pulse-triage[bot] 30ca96816f Keep late browser refusal terminal during context cleanup
A denial arriving as the browser closes must leave a failed bounded receipt and suppress recovery authentication. Exercise real late HTTP401/403 responses alongside the earlier navigation and API controls.

Contract-Neutral: Enforces the existing all-response refusal contract through final context disposal; no new acceptance route or permission.
Change-source: pulse-maintainer
2026-10-04 03:55:53 +01:00
pulse-triage[bot] d855d322e8 Bind Chromium denial receipts to executed recovery guard proof
The browser sandbox has no jq. Retain all browser control receipts and execute the actual harness guard in the offline source-proof VM with their explicit input binding, checking denied and permitted process/auth preparation. Browser context cleanup failure also remains a failed receipt.

Contract-Neutral: Existing refusal, bounded evidence and cleanup contract is unchanged; this connects its proof across the browser and source-proof runtimes.
Change-source: pulse-maintainer
2026-10-04 03:49:31 +01:00
pulse-triage[bot] 73b790b89b Stop release browser access at every authenticated refusal
Bind anonymous probes at request start, record bounded navigation/API/SSE denial, close the page immediately and suppress recovery authentication when the upgrade receipt is refused or unavailable. Exercise real Chromium response controls through the actual shell recovery guard.

Change-source: pulse-maintainer
2026-10-04 03:44:51 +01:00
pulse-triage[bot] 729b2cf7b4 fix(release): omit redundant setup-node cache selection
Use the established setup-node disable contract: no explicit cache backend and package-manager-cache false. The empty cache value was rejected by the workflow trust guard; retain the guard and add an omission check.

Contract-Neutral: The exact published-RC browser, credential isolation and cache prohibition contract is unchanged; this fixes its setup-node representation.
Change-source: pulse-maintainer
2026-10-04 03:04:29 +01:00
pulse-triage[bot] 619133aa54 fix(release): admit real archive sizes and enforce workflow trust
Live stable and RC archive metadata exceed 256 MiB; retain a streaming bounded 512 MiB archive/16 KiB signature/1 GiB binary contract instead. Disable automatic setup caches in the CI credential job and encode derived command outputs with the reviewed writer. Add regressions; do not relax workflow or release guards.

Change-source: pulse-maintainer
2026-10-04 03:00:30 +01:00
pulse-triage[bot] fdf464578a test(release): exercise exact published RC through Tailscale browser
Reuse the signed-install lifecycle assertions on a fresh public hosted VM without Docker identity overrides. Bind immutable release assets/control, observe one real UI apply/SSE/modal journey, retain sanitised terminal evidence and stop access refusals without reauthentication. Update the deployment contract and execute its recovery-access guard; release judgment and gates are unchanged.

Change-source: pulse-maintainer
2026-10-04 02:15:25 +01:00
pulse-triage[bot] a131e4be7d Integrate reviewed billing-safe promotion controls
Merge exact Delivery candidate c5bd6f1d99. Resolve the overlapping test-only repair by retaining the union of existing and candidate read-only admission and billing-write prohibitions. No runtime or frontend changes.

Contract-Neutral: Test-only integration preserves production behaviour and release authority.
Change-source: pulse-maintainer
2026-10-04 01:20:15 +01:00
pulse-triage[bot] e597bb2a4b Keep release governance aligned with billing-safe demo profiles
PR2429 governance run 37161775883 still required the superseded entitlement rewrite after reviewed repair 7d739698 made profile admission read-only. Require the existing demo capability and reject the former integrity removal and billing rewrite instead. Retain runtime-setting, release and recovery guards unchanged.

Contract-Neutral: Test-only integration reconciliation; production billing and release admission are unchanged.
Change-source: pulse-maintainer
2026-10-04 01:04:36 +01:00
pulse-triage[bot] c5bd6f1d99 Align promotion controls with billing-safe demo profiles
PR2429 governance run 37161775883 still requires the removed demo entitlement rewrite and integrity clearing. Require the existing read-only capability gate instead, and reject billing writes or integrity removal. Keep all runtime profile, protected publication and exact-RC controls.

Contract-Neutral: Test-only alignment with the reviewed billing-preserving demo transaction; no runtime, API, deployment authority or release policy delta.
Change-source: pulse-maintainer
2026-10-04 00:56:16 +01:00
pulse-triage[bot] 888d918ba1 Integrate batch-start upstream frontier without dropping reviewed repairs
Merge exact upstream 99927467f5. Resolve only the agent-lifecycle contract append conflict by retaining both monitor recovery ownership and AI usage export clauses. Frontend auto-merges preserve reviewed final bytes; no runtime conflict correction or browser receipt rebinding.

Change-source: pulse-maintainer
2026-10-04 00:00:18 +01:00
rcourtman 06a68dbff3 Warn on inherited npm advisories when the lockfile is unchanged (#2442)
Since 3 October the required Frontend check has failed on every open
pull request, including Go-only ones, because of GHSA-vfj7-8cjw-p6xm
(`braces` <= 3.0.3, high, no patched release). `braces` reaches the
frontend graph only through dev-only `tailwindcss` 3 and `jscpd` 4. `npm
audit --omit=dev` is clean, so the shipped bundle is not affected.

A pull request that leaves `package.json` and `package-lock.json`
untouched has the same dependency graph as its base commit. It can
neither add a finding nor remove one, so failing it blocks every fix
without making anything safer.

## What changes

`scripts/npm-audit-retry.sh` now treats findings the same way it already
treated an unreachable advisory endpoint:

- **The change moves the dependency graph, or edits the runner**
(`NPM_AUDIT_REQUIRE_RESULT=true`): any finding at any severity fails, as
before. A missing answer also fails.
- **The graph is the base commit's** (`NPM_AUDIT_REQUIRE_RESULT=false`):
the run warns instead, still naming every finding. A missing answer also
only warns, as before.
- **Only an explicit `false` relaxes the verdict.** An empty or
unrecognised value stays strict. This also tightens the outage path,
which previously relaxed on any value other than `true`.

The scheduled `npm-audit` scan and the daily dependency advisory watch
keep the strict default. An inherited advisory therefore still fails
once a day until the graph is fixed; `test_dependency_advisory_watch.py`
now proves this. No severity threshold, allowlist or suppression is
added.

## Landing

This change edits the runner, so its own Frontend audit runs in strict
mode and fails on this same advisory. It cannot pass the required
checks, so it lands only by an explicit maintainer merge. That is
intentional: the policy is relaxed by a human decision, never by a
change passing its own check.

Removing `braces` for real means migrating to Tailwind 4 and jscpd
5.4.0; that is tracked separately. Dependency PRs (#2352, #2278) stay
blocked until that lands.

## Verification

- `scripts/tests/test-npm-audit-retry.sh`: 19 cases pass.
- `test_npm_audit_retry.py` and `test_dependency_advisory_watch.py`
pass.
- `TestFrontendDependencySecurityAuditsAreRequired` passes.
- `check_workflow_trust.py` passes.
- The real runner against main's lockfile exits 0 with the warning and
all 7 findings named when `NPM_AUDIT_REQUIRE_RESULT=false`, and exits 1
with `::error::` when it is `true`.
2026-10-03 22:41:14 +01:00
pulse-triage[bot] 9199676a2b Merge batch-start upstream browser receipt governance
Retain reviewed local source and upstream governance exactly. Resolve the retired shared receipt in favour of deletion; historical non-merge receipts remain available in Git.

Contract-Neutral: Integration only; no changed frontend runtime content or product contract.
Change-source: pulse-maintainer
2026-10-03 17:24:48 +01:00
rcourtman 1ebc8e071a Merge remote-tracking branch 'origin/main' into refactor/retire-shared-browser-receipt
Contract-Neutral: Merge of origin/main into this branch: brings in commits already landed on main and deletes the retired shared receipt, no new contract change

# Conflicts:
#	frontend-modern/browser-verification.json
2026-10-03 16:47:47 +01:00
rcourtman a9c3bc15ec Merge branch 'main' into refactor/browser-receipt-per-commit 2026-10-03 16:27:00 +01:00
rcourtman 2845cf1588 Merge branch 'main' into fix/npm-audit-inherited-advisory 2026-10-03 16:26:57 +01:00
pulse-triage[bot] 5ead0793b5 Compose dependency-safe upstream with reviewed monitoring and recovery repairs
Preserve all reviewed ancestors and published Tailwind 4 and jscpd 5 source. Resolve drawer conflicts by retaining reactive snapshots, access withdrawal and honest errors with upstream-equivalent radius, transparency and child selectors. Original browser receipts remain historical evidence; combined-source verification follows separately.

Change-source: pulse-maintainer
2026-10-03 16:06:49 +01:00
pulse-triage[bot] b62042798c Merge reviewed passive VM diagnostics and backup safety help
Change-source: pulse-maintainer
2026-10-03 15:23:44 +01:00
pulse-triage[bot] 5a7438c67a Merge reviewed release preparation guard repair
Change-source: pulse-maintainer
2026-10-03 15:23:31 +01:00