Skip to content

Compare release-2.1 with main - #5235

Draft
its-mitesh-kumar wants to merge 291 commits into
release-2.1from
main
Draft

its-mitesh-kumar wants to merge 291 commits into
release-2.1from
main

Conversation

@its-mitesh-kumar

Copy link
Copy Markdown
Member

Hey, I just made a Pull Request!

✔️ Checklist

  • A changeset describing the change and affected packages. (more info)
  • Added or Updated documentation
  • Tests for new functionality and regression tests for bug fixes
  • Screenshots attached (for UI changes)

asmasarw and others added 30 commits October 7, 2026 12:06
)

Signed-off-by: dependabot[bot] <support@github.com>
…dMetrics is configured for Scorecard (#5089)

* fix(scorecard): exclude disabled metrics from `getLatestEntityMetrics`

Signed-off-by: Ihor Mykhno imykhno@redhat.com
Co-authored-by: Cursor <cursoragent@cursor.com>

* docs(scorecard): clarify disabled metrics behavior for entity cards vs stored data

Signed-off-by: Ihor Mykhno <imykhno@redhat.com>

---------

Signed-off-by: Ihor Mykhno imykhno@redhat.com
Signed-off-by: Ihor Mykhno <imykhno@redhat.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
…rs (#5119)

* fix(intelligent-assistant): disable MCP Enabled toggle on Status errors

Keep the configure modal from accepting enable/save actions when Status
shows a tools or validation error, and surface organization-mode Save
failures with the API error text. Enabled tooltip matches Status text.

Fixes: https://redhat.atlassian.net/browse/RHDHBUGS-3881

Assisted-by: Claude
Signed-off-by: Yi Cai <yicai@redhat.com>
Co-authored-by: Cursor <cursoragent@cursor.com>

* chore(intelligent-assistant): bump yarnPath to 4.18.1

Align workspace yarnPath with the committed Yarn release after the
repo-wide Yarn 4.18.1 bump so CI can resolve yarn.

Assisted-by: Claude
Signed-off-by: Yi Cai <yicai@redhat.com>
Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Signed-off-by: Yi Cai <yicai@redhat.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
* fix(fullsend): align RHDH harnesses with v0.45.0

* chore(fullsend): keep Renovate policy separate from v0.45 upgrade

Removed disabled Fullsend workflow configuration from Renovate settings.
…887) (#5118)

* fix(x2a): show full rule text in create-project rules field (FLPATH-4887)

The create-project rules checklist truncated each rule description to 100
characters with no way to read the rest, so long rules were never fully
visible before acceptance. Add a "Read more" link that opens a read-only
dialog with the complete text, mirroring the full-text access the admin
rules table already has via its edit dialog.

- Keep the compact 100-char preview in the checklist row
- "Read more" opens a dialog with the untruncated description
- Guard the link so opening it does not toggle the acceptance checkbox
- Add readMore/close translation keys (ref + de/es/fr/it/ja)
- Add RulesAcceptance tests covering truncation, the dialog, short
  descriptions, and the no-toggle guard

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Signed-off-by: Yaron Dayagi <ydayagi@redhat.com>

* docs(x2a): add changeset for rules read-more fix (FLPATH-4887)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Signed-off-by: Yaron Dayagi <ydayagi@redhat.com>

* fix(x2a): update API reports for new translation keys (FLPATH-4887)

The readMore/close keys added to the public x2aPluginTranslationRef changed
the plugin's public API surface; regenerate report.api.md and
report-alpha.api.md via 'yarn build:api-reports'.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Signed-off-by: Yaron Dayagi <ydayagi@redhat.com>

---------

Signed-off-by: Yaron Dayagi <ydayagi@redhat.com>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
….6 in /workspaces/theme (#5140)

Signed-off-by: dependabot[bot] <support@github.com>
…ge (#5142)

* test(intelligent-assistant): add OKP product-docs RAG citation coverage

Fixes: https://redhat.atlassian.net/browse/RHIDP-14132
Signed-off-by: HusneShabbir <husneshabbir447@gmail.com>
Co-authored-by: Cursor <cursoragent@cursor.com>

* test(intelligent-assistant): drop redundant OKP citation coverage

Keep L1 offline mapping and one e2e for online+offline hrefs; remove
overlap with existing BYOK no-citation and SourcesChip suites.

Signed-off-by: HusneShabbir <husneshabbir447@gmail.com>
Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Signed-off-by: HusneShabbir <husneshabbir447@gmail.com>
Co-authored-by: HusneShabbir <husneshabbir447@gmail.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
* fix(homepage): pass widget props on a read-only NFS homepage

* reverted to customizable

* read-only now support multiple same copies of widgets with own props

* update readme
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* ci: auto-approve rhdh-bot chore/automated PRs

Match the rhdh auto-approve workflow for branches such as
chore/automated-yarn-bump, then enable squash auto-merge. This repo
has no OpenShift merge bot.

https://redhat.atlassian.net/browse/RHIDP-17563

Generated-by: cursor
Co-authored-by: Cursor <cursoragent@cursor.com>

* ci: keep auto-approve token read-only

openshift-merge-robot merges from lgtm and approved. Drop contents:
write and gh pr merge so this job only labels and approves.

https://redhat.atlassian.net/browse/RHIDP-17563

Generated-by: cursor
Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Co-authored-by: rhdh-bot service account <rhdh-bot@redhat.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
…kills connector (OpenSpec task 2.1) (#5057)

* feat(RHIDP-17324): add public Quay organization discovery

Add paginated public Quay organization discovery to the
skill-image-connector-backend plugin (OpenSpec task 2.1).

A new `skillImageConnector.quayDiscovery` configuration section
allows operators to specify a public Quay organization. On startup,
the plugin discovers all repositories in the organization via the
Quay public API, selects the configured tag (defaulting to `latest`),
and feeds discovered image references into the existing acquisition
path alongside explicit image configurations. Duplicate references
are deduplicated. The existing `/images` raw-content response format
is preserved.

Changes:
- New QuayDiscovery service with paginated Quay API listing, cycle
  detection, and page limits per design D7
- Updated plugin initialization to merge discovered repositories
  with explicit image configs before processing
- New `quayDiscovery` section in config.d.ts with backend visibility
- Updated README with discovery configuration and usage docs
- Tests for single page, multi-page, empty discovery, custom tag,
  listing failure, invalid response, pagination cycle detection,
  and config reading

Related to RHIDP-17324

Assisted-by: claude-opus-4-6

* skill-image-connector-backend prettier fix

* update changeset

* fix: address review feedback on PR #5057

- Log warning when discovered repos are silently dropped by MAX_CONFIGURED_IMAGES cap
- Track discovery failure state; set processingStatus to 'failed' when
  discovery-only configuration fails at runtime instead of reporting 'ready'
- Check off task 2.1 in openspec tasks.md (implemented by this PR)
- Add client-side verification that repo.namespace matches configured org
  in Quay discovery responses
- Extract mergeDiscoveredRefs into a testable function with test coverage
  for the MAX_CONFIGURED_IMAGES cap enforcement during merge
- Add test for already-aborted AbortSignal on discoverQuayRepositories
- Add aggregate mutable-tag warning for discovered images
- Move QuayDiscoveryConfig to services/types.ts (codebase convention)
- Use separate zero-based counter for discovered image IDs

Addresses #5057

Assisted-by: Claude Opus 4.6

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: address review feedback on PR #5057 (iteration 2)

- Add retry logic with exponential backoff to discoverQuayRepositories
  for transient API failures (fetchPageWithRetry)
- Update audit.md timestamp and content to reflect task 2.1 completion
- Add explicit check for missing/undefined namespace in repo filtering
- Add lightweight repo name format validation (REPO_NAME_PATTERN)
- Validate quayDiscovery.registry against OCI_REGISTRY_PATTERN
- Fix import ordering in plugin.ts (alphabetical: OciClient, QuayDiscovery,
  SkillImageService)
- Fix import ordering in QuayDiscovery.ts (type import before value import)
- Remove re-export of QuayDiscoveryConfig from QuayDiscovery.ts
- Remove export from QuayRepository interface (internal only)
- Add tests for registry validation, retry behavior, and invalid name
  filtering

Addresses #5057

Assisted-by: Claude Opus 4.6

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix(ai-integrations): share OCI acquisition handling and limits

Harden RHIDP-17324 Quay discovery and OCI image acquisition for PR #5057
while keeping the OpenSpec implementation scoped to task 2.1.

- Extract shared HTTP helpers for redirect validation, cross-origin
  credential stripping, response cleanup, bounded body reads, and request
  deadlines spanning authentication, redirects, and body consumption.
- Share transient-error classification and cancellation-aware retry
  backoff. Give each discovery retry a fresh timeout; retry complete image
  acquisitions without adding nested retries to individual OCI requests.
- Centralize defaults and validate optional backend configuration for
  fetchTimeoutMs, maxBlobSizeBytes, maxAggregateContentSizeBytes,
  maxDiscoveryResponseSizeBytes, maxImages, maxRetries, and retryBaseDelayMs.
  Preserve defaults when omitted and allow zero retries.
- Apply the configured blob/decompression and retained UTF-8 content
  budgets. Validate discovery tags and bound Quay JSON responses.
- Make the combined explicit/discovered candidate cap configurable, with
  a default of 25, explicit-image priority, and duplicate elimination.
  Larger inventories can be processed without changing concurrency.
- Log discovered-image 404s only at debug level while preserving error
  diagnostics for explicit images, organization listing, and other
  failures. Preserve token-endpoint 404 status and API failure accounting.
- Add regression and integration coverage for timeouts, cancellation,
  redirects, retries, limits, 404 reporting, and a 75-repository inventory.
- Update config documentation, the changeset, and OpenSpec artifacts.
  Comment out local Quay enablement and tuning examples in app-config.yaml.

Validation:
- yarn install --immutable (scripts disabled); yarn dedupe
- yarn tsc:full; yarn build:all
- Connector tests: 205 passed across 10 suites with --watchAll=false
- Connector lint; yarn prettier:check; git diff --check
- yarn build:api-reports:only --ci
- Strict OpenSpec validation

Fixes: https://redhat.atlassian.net/browse/RHIDP-17324
Co-authored-by: Codex <noreply@openai.com>
Signed-off-by: gabemontero <gmontero@redhat.com>

* fix(ai-integrations): address review feedback on PR #5057

- Use signal?.throwIfAborted() instead of manual aborted check in
  QuayDiscovery for consistency with HttpClient and Retry
- Remove needless requestSignal alias in fetchWithRedirects since
  signal is a required AbortSignal parameter
- Remove export from abortAwareDelay which has no consumers outside
  Retry.ts
- Add JSDoc to quayDiscovery.organization noting it is effectively
  required for discovery to function

Addresses #5057

Assisted-by: Claude Opus 4.6

* enable in config with new connection related params

* feat(ai-integrations): discover all active Quay skill image tags

Treat an omitted, null, or blank quayDiscovery.tag as all active tags
instead of implicitly selecting latest. Explicit tags remain exact OCI
tag filters; setting tag: latest preserves the former default.

- Enumerate active repository tags through Quay's paginated tag API.
  Reuse shared HTTP validation, response bounds, request deadlines,
  retries, and cancellation for repository and tag pages.
- Apply one 100-page budget across both listing types, detect repeated
  repository tokens and tag pagination without progress, and return
  deterministic, deduplicated repository:tag candidates.
- Preserve different tags even when they share the same manifest digest.
  Count each tagged candidate against maxImages alongside explicit
  images, retaining explicit-reference priority.
- Reject invalid tag syntax and non-string values instead of silently
  broadening discovery. Keep wildcard and regex matching unsupported.
- Revise the OpenSpec proposal, design, scenarios, and pending tasks to
  require a separate catalog entry per valid OCI skill-image tag.
  Use registry/repository:tag as the stable key: moving a tag keeps its
  identity, same-digest aliases stay separate, and non-skills emit no
  catalog entry. Normalization and catalog publication remain pending.
- Align shared contract fixtures and identity tests with tagged keys.
  Document the changed default, migration, request limits, and the
  existing raw /images response limitations.
- Preserve the maintainer's tested app-config.yaml settings as supplied.

Validation:
- 233 connector tests and 166 shared-library tests passed with
  --watchAll=false; independent verification passed.
- Workspace type checking/build, affected-package lint, formatting,
  API-report checks, dependency install/dedupe, and strict OpenSpec
  validation passed during implementation.
- Maintainer subsequently reported successful testing.
- Pre-commit formatting, OpenSpec validation, and diff checks passed.

Refs: https://redhat.atlassian.net/browse/RHIDP-17324
Co-authored-by: Codex <noreply@openai.com>
Assisted-by: GPT-6
Signed-off-by: gabemontero <gmontero@redhat.com>

* fix(ai-integrations): clarify discovery defaults and contract migration

Address the agreed Fullsend review feedback for PR #5057 while preserving
the accepted all-active-tag discovery and per-tag identity behavior.

- Mark the ai-skills-common changeset as minor and document migration
  from repository-only keys to exact repository/tag keys. Clarify that
  hashing and validators are unchanged and upgrading the library alone
  does not migrate caller-supplied keys or existing catalog entities.
- Rename configurable fallback constants with DEFAULT_ prefixes and
  separate them from fixed ceilings without changing values or config
  keys. Document the effective blob limit as options.maxBlobSizeBytes.
- Consolidate discovery configuration tests and clarify size-limit test
  names. Document the synchronous aggregate-budget check, increment and
  insertion that prevents promise continuations from exceeding the cap.
- Correct the README's DNS-rebinding protection claim. Track validation
  of the connected destination and DNS-change coverage explicitly in D7,
  the OCI specification and pending task 2.4; runtime hardening stays in
  that follow-up task.
- Refresh the OpenSpec audit and journal with the review disposition,
  validation results and maintainer acceptance.

Validation:
- 233 connector tests passed with --watchAll=false --runInBand.
- Workspace tsc:full and build:all passed.
- Connector lint, workspace prettier:check, immutable dependency install,
  strict OpenSpec validation and git diff --check passed.
- Maintainer reported successful sanity testing.

Refs: https://redhat.atlassian.net/browse/RHIDP-17324
Refs: #5057
Co-authored-by: Codex <noreply@openai.com>
Assisted-by: GPT-6
Signed-off-by: gabemontero <gmontero@redhat.com>

* fix(ai-integrations): clarify discovery logging and test completion order

Address the agreed follow-up review findings for PR #5057 without changing
discovery behavior, configuration defaults or the accepted tag contract.

- Rename the internal warnOnNotFound flag to logNotFoundAsError across
  the processing path, tests, README and OpenSpec design. Preserve error
  diagnostics for explicit references and debug logging for discovered
  image 404s, including explicit-reference precedence during merging.
- Clarify that an omitted or blank quayDiscovery.organization skips
  discovery with a warning. Keep the schema field optional and preserve
  explicit image processing when discovery is disabled.
- Add controlled integration coverage that holds an explicit image result
  pending while a discovered image completes first. Verify retained UTF-8
  bytes stay within the aggregate budget, the later explicit result is
  rejected, and only that rejected extraction is cleaned up. Release the
  pending promise even when an assertion fails so shutdown can finish.
- Refresh the OpenSpec audit and journal with the review decisions,
  completed checks and maintainer test acceptance. Keep connection safety
  in task 2.4 and partial-discovery handling in task 2.5.

Validation:
- 234 connector tests passed with --watchAll=false --runInBand.
- Workspace tsc:full and build:all passed.
- Connector lint, workspace prettier:check, immutable dependency install,
  strict OpenSpec validation and git diff --check passed.
- Maintainer reported successful testing.

Refs: https://redhat.atlassian.net/browse/RHIDP-17324
Refs: #5057
Co-authored-by: Codex <noreply@openai.com>
Assisted-by: GPT-6
Signed-off-by: gabemontero <gmontero@redhat.com>

* fix(ai-integrations): distinguish missing manifests from token errors

Keep discovery quiet for expected missing manifest tags while retaining image-reference diagnostics for bearer-token and blob 404 failures.

- Identify manifest HTTP failures explicitly and limit 404 suppression to that type.
- Add regression coverage for manifest, bearer-token, and blob 404 reporting.
- Document the retry defaults noted in the PR review.

Validation: 92 focused tests, tsc:full, prettier:check, build:all, and diff checks passed. Maintainer reported successful cluster testing.

Refs: https://redhat.atlassian.net/browse/RHIDP-17324
Refs: #5057
Co-authored-by: Codex <noreply@openai.com>
Assisted-by: GPT-6
Signed-off-by: gabemontero <gmontero@redhat.com>

* fix(ai-integrations): deduplicate registry hostname casing

Compare skill image references using case-insensitive registry hostnames so
explicit and discovered duplicates do not consume extra maxImages slots.
Preserve the first explicit reference, credentials, and reporting policy;
keep repository paths, tag casing, and distinct registry ports unchanged.

- Share hostname-only comparison keys across explicit config and discovery merging.
- Add regression tests for mixed-case hostnames, configuration precedence,
  candidate limits, distinct tag casing, ports, and oci:// references.
- Rename DEFAULT_MAX_CONFIGURED_IMAGES to DEFAULT_MAX_IMAGES without changing
  the default limit of 25.
- Clarify initial-request DNS validation limitations in the README and retain
  connection-level destination validation under OpenSpec task 2.4.

Validation: 242 connector tests passed with --watchAll=false --runInBand.
yarn install, yarn dedupe, yarn tsc:full, yarn prettier:check, yarn build:all,
and git diff --check completed successfully. Maintainer cluster testing passed.

Refs: https://redhat.atlassian.net/browse/RHIDP-17324
Refs: #5057
Co-authored-by: Codex <noreply@openai.com>
Assisted-by: GPT-6
Signed-off-by: gabemontero <gmontero@redhat.com>

* docs(ai-integrations): clarify acquisition configuration and task scope

Document the acquisition configuration and supporting utilities already
included in OpenSpec task 2.1 without changing runtime behavior.

- Include the seven optional acquisition settings and shared HTTP/retry
  utilities in the task 2.1 description.
- State the existing safe-integer and timer ranges in configuration JSDoc.
- Explain why numeric option parsing is separate from configuration parsing
  that reuses OCI reference, tag, and token-realm validators.
- Update the focused OpenSpec audit and interaction journal to record the
  maintainer-approved Fullsend review dispositions and documentation checks.

Connection-level destination validation remains task 2.4. Task completion
status, runtime validation, defaults, and the minor changeset are unchanged.

Validation: strict OpenSpec validation, journal checks, targeted Prettier
checks, and git diff --check passed. Workspace-wide Prettier reports only
the maintainer's existing app-config.yaml formatting; that file is excluded.
Maintainer reviewed the documentation and authorized this local commit.

Refs: https://redhat.atlassian.net/browse/RHIDP-17324
Refs: #5057
Co-authored-by: Codex <noreply@openai.com>
Assisted-by: GPT-6
Signed-off-by: gabemontero <gmontero@redhat.com>

---------

Signed-off-by: gabemontero <gmontero@redhat.com>
Co-authored-by: fullsend-code <278716306+fullsend-ai-coder[bot]@users.noreply.github.com>
Co-authored-by: gabemontero <gmontero@redhat.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: Codex <noreply@openai.com>
* fix(IA): model-length-trimmed

Signed-off-by: rohitratannagar <rohitratannagar2003@gmail.com>

* fix(IA/global-header): gloabl-header-highlight-issue

Signed-off-by: rohitratannagar <rohitratannagar2003@gmail.com>

* addressing comments

Signed-off-by: rohitratannagar <rohitratannagar2003@gmail.com>

---------

Signed-off-by: rohitratannagar <rohitratannagar2003@gmail.com>
#5144)

* fix(intelligent-assistant): update disclaimer copy, prompt placeholder, and card icons

Signed-off-by: rohitratannagar <rohitratannagar2003@gmail.com>

* remove custom welcome prompt

Signed-off-by: rohitratannagar <rohitratannagar2003@gmail.com>

---------

Signed-off-by: rohitratannagar <rohitratannagar2003@gmail.com>
…leBlueprint (#4094)

Fixes: https://redhat.atlassian.net/browse/RHDHBUGS-3521

Signed-off-by: its-mitesh-kumar <itsmiteshkumar98@gmail.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Signed-off-by: its-mitesh-kumar <itsmiteshkumar98@gmail.com>
Signed-off-by: teknaS47 <sanketsaikia13@gmail.com>
…5081)

* fix(scorecard): allow a custom aggregationId on NFS homepage cards

* fix(scorecard): replace fixed NFS homepage widgets with one configurable card

* fix e2e

* fix api report

* fix api report

* fix(scorecard): adopt homepage 3.1.0 for the NFS and legacy apps

* fix(scorecard): format app-config.yaml for Prettier

Signed-off-by: Eswaraiahsapram <esapram@redhat.com>
Co-authored-by: Cursor <cursoragent@cursor.com>

* fix onboarding section order

---------

Signed-off-by: Eswaraiahsapram <esapram@redhat.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
)

* fix(scorecard): remove redundant /alpha re-export of translations

Fixes: https://redhat.atlassian.net/browse/RHDHBUGS-3522
Signed-off-by: its-mitesh-kumar <itsmiteshkumar98@gmail.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Signed-off-by: its-mitesh-kumar <itsmiteshkumar98@gmail.com>
Co-authored-by: Cursor <cursoragent@cursor.com>

* updating readme

Signed-off-by: its-mitesh-kumar <itsmiteshkumar98@gmail.com>

---------

Signed-off-by: its-mitesh-kumar <itsmiteshkumar98@gmail.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
…-defaults) (#5108)

* fix(theme): align PF shell chrome and SidebarPage with full-width masthead

Keep shell backgrounds consistent via branding chrome tokens, size the
content well under the global header, square left border-box clips under
the drawer while preserving content-edge corner masks, and stabilize the
sidebar scrollbar gutter.

Fixes: https://redhat.atlassian.net/browse/RHIDP-15742
Signed-off-by: Yi Cai <yicai@redhat.com>
Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(global-header): full-width PF masthead with sidebar offset

Span the masthead across the viewport, show the company logo by default,
publish --rhdh-global-header-height, and offset the fixed Backstage sidebar
drawer below the header.

Fixes: https://redhat.atlassian.net/browse/RHIDP-15742
Signed-off-by: Yi Cai <yicai@redhat.com>
Co-authored-by: Cursor <cursoragent@cursor.com>

* feat(app-defaults): sectioned NFS sidebar with masthead-aware settings

Split the sidebar into default, optional-plugin, and admin/settings
sections; hide Settings/logo by default when the global header is present;
gate Administration; offset the drawer below the masthead; stabilize the
menu scrollbar gutter.

Fixes: https://redhat.atlassian.net/browse/RHIDP-15742
Signed-off-by: Yi Cai <yicai@redhat.com>
Co-authored-by: Cursor <cursoragent@cursor.com>

* fix: stop stacking masthead offset on sidebar root and drawer

Offset only the fixed sidebar-root below the global header and keep the
absolute drawer filling the root so hashed JSS class names cannot leave a
gap under the masthead.

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Signed-off-by: Yi Cai <yicai@redhat.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Bumps [handlebars](https://github.com/handlebars-lang/handlebars.js) from 4.7.9 to 4.7.10.
- [Release notes](https://github.com/handlebars-lang/handlebars.js/releases)
- [Changelog](https://github.com/handlebars-lang/handlebars.js/blob/v4.7.10/release-notes.md)
- [Commits](handlebars-lang/handlebars.js@v4.7.9...v4.7.10)

---
updated-dependencies:
- dependency-name: handlebars
  dependency-version: 4.7.10
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…rill-down (#5145)

* Fix aggregation vs entities thresholds for drill down and WeightedStatusScore

Signed-off-by: Dominika Zemanovicova <dzemanov@redhat.com>

* Update mocks

Signed-off-by: Dominika Zemanovicova <dzemanov@redhat.com>

* Export threshold mocks to dedicated constant files or import from common

Signed-off-by: Dominika Zemanovicova <dzemanov@redhat.com>

---------

Signed-off-by: Dominika Zemanovicova <dzemanov@redhat.com>
Signed-off-by: rohitratannagar <rohitratannagar2003@gmail.com>
renovate Bot and others added 29 commits November 9, 2026 11:13
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
…in the root scan (RHIDP-16221) (#5473)

* test(install-dynamic-plugins): cover catalog-index.ts and lost+found in the root scan (RHIDP-16221)

catalog-index.ts had no test file of its own. Add catalog-index.test.ts
for extractCatalogIndex, extractCatalogIndexLayers, the unsafe
subdirectory guard (absolute paths, traversal), tar entry filtering,
the entry size cap and cleanupCatalogIndexTemp. Add
installer-root-entries.test.ts for RHDHBUGS-1573: lost+found and stray
files in dynamic-plugins-root are skipped by the installed-plugin scan.

A malformed manifest.json surfaced as a bare SyntaxError and a corrupt
layer as a bare TAR_BAD_ARCHIVE error, neither naming the image. Both now
raise an InstallException that names the image (and the layer digest).

Each new test was checked against a mutation of the code it guards;
all 20 mutations are killed. catalog-index.ts coverage goes from
74.6% statements / 62.7% branches to 100% / 95.1%.

Refs: RHIDP-16221, RHDHBUGS-2786, RHDHBUGS-1573

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(install-dynamic-plugins): fail on a layer missing from the catalog index download

The ticket asks that a missing layer raise an InstallException naming the
image. A blob listed in manifest.json but absent after `skopeo copy` was
skipped silently: the primary index then failed later with an unrelated
"dynamic-plugins.default.yaml not found", and an extra index reported
success with a warning. It now fails with the digest and the image.

Review follow-ups:
- Read manifest.json outside the try so an I/O error is not reported as
  "Malformed manifest.json".
- Cover a truncated layer as well as a non-tar one.
- Drop tests that re-ran branches already covered in
  extra-catalog-index.test.ts; move the absolute-name parse cases into
  that file's existing it.each.
- Drop the unused `exists` stub, rename promise variables from `err` to
  `extraction`, make the cleanup loop assert it ran, and note that the
  0o000 lost+found case only differs for a non-root user.

Refs: RHIDP-16221

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* refactor(install-dynamic-plugins): move layer extraction out of the loop

Resolve every layer blob up front with one concurrent existence check, so a
missing layer fails before anything is written instead of after the earlier
layers were extracted. Extraction moves into extractLayer() and is chained
in manifest order, since later layers must overwrite earlier ones.

This removes the two await-in-loop findings Sonar raised on the PR and the
no-loop-func suppression the old closure needed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* test(install-dynamic-plugins): pin fail-before-extract on a missing layer

The previous commit moved the missing-layer check ahead of extraction, but
no test asserted that nothing is written when it fires. The missing-layer
case now also checks the destination stays empty; reverting to the
per-layer check fails it.

OciManifest typed layer digests as required while the code and the fixtures
treat them as optional; the type now says so.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(install-dynamic-plugins): validate catalog index manifest shape and layer paths

Review findings on the catalog-index changes:

- JSON.parse accepted `null` or `{"layers":"x"}` and the code then failed
  with a bare TypeError that did not name the image. The manifest must now
  be an object whose `layers`, when present, is an array; entries that are
  not objects with a string digest are skipped like digest-less ones.
- A digest such as `sha256:../../x` made the blob path resolve outside the
  download directory, so tar would read an arbitrary local file as a layer.
  Such a digest is now refused before anything is extracted.
- The tar latch is named `pending` again with the comment explaining why it
  exists, matching tar-extract.ts; LayerBlob.path is now `file` so it no
  longer shadows the path module, and resolveLayerPaths became
  resolveLayerBlobs since it returns blobs.
- The cleanup test is split so a failure names the path that broke.

The changeset now describes the full behaviour change.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(install-dynamic-plugins): fail on a catalog index layer entry with no usable digest

Review feedback: a manifest layer entry that is not an object, has a
non-string digest, or has no algorithm prefix was dropped silently, so a
manifest of only such entries extracted nothing and resolved. The primary
index then blamed the image with "dynamic-plugins.default.yaml not found"
and an extra index exited 0. Such an entry now raises an InstallException
naming the entry index and the image, before any layer is extracted.

The malformed-manifest tests now assert the distinguishing part of each
message (the JSON.parse error text, and "expected an object with a layers
array"), so the two guards can no longer be swapped unnoticed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: John Collier <jcollier@redhat.com>
Assisted-by: OpenAI GPT-6

Signed-off-by: Jordan Dubrick <jdubrick@redhat.com>
…5450)

Read upstream error bodies as text before parsing JSON so plain-text failures retain their original message. Cover the plain-text regression and assert that JSON error details remain intact.


Assisted-by: OpenAI GPT-6

Signed-off-by: Jordan Dubrick <jdubrick@redhat.com>
…data (#5447)

Remove duplicate owner, name, description, and timestamp keys from a copy of session metadata before storage. Cover conflicts, retained metadata, and input preservation in one focused regression.


Assisted-by: OpenAI GPT-6

Signed-off-by: Jordan Dubrick <jdubrick@redhat.com>
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
* fix(orchestrator): reduce Data Index queries for workflow pages.

for https://redhat.atlassian.net/browse/RHDHBUGS-4075

* squash: adding changeset

* squash: sonarcube update
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
…5474)

* docs(RHIDP-18761): reconcile OpenSpecs with agreed 2.2 minimum scope

Curate recovered RHDHPLAN-1507 specifications to match the agreed
RHDH 2.2 minimum baseline. This removes summer requirements that
were mixed into the reusable SDK contracts and separates stretch
goals from minimum implementation obligations.

Changes:
- Archive neo4j-knowledge-graph, oci-skill-registry, and
  oci-skill-connector change directories (status: archived).
- Remove air-gapped-deployment spec from active minimum specs
  (configuration examples preserved in connector-shared-infrastructure
  change).
- Remove Neo4j adapter interface (Decision 7) and SkillBundle
  metadata contract (Decision 8) from design and tasks.
- Remove skill-bundle from the mandatory annotation category values
  (seven to six: agent, skill, rule, mcp-server, ai-model,
  model-server).
- Remove legacy SkillImage/skillcard payload assumptions from the
  common SDK contract (entity-provider-sdk spec).
- Separate 5,000-entity load/SLA acceptance as stretch (tracked
  under RHIDP-15294). Keep per-entity fault isolation as minimum.
- Note deferred items in delta-sync-framework: durable storage,
  invalid-cursor orchestration, incremental entity providers.
- Update migration-readiness mappings: remove skill-bundle rows,
  refresh category counts. Sign-off remains pending.
- Update CURRENT.md and annotation-specification.md references.

Related to RHIDP-18761

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* docs(RHIDP-18761): clarify minimum scope and delta helper responsibilities

Separate five minimum categories from existing rule compatibility, reconcile consumer-owned refresh behavior, and update audit coverage and migration links.

Verified OpenSpec validation (15/15), formatting, local documentation links and anchors, and whitespace checks.

Assisted-by: GPT-6
Signed-off-by: gabemontero <gmontero@redhat.com>

* docs(RHIDP-18761): remove obsolete provider planning and dependent examples

Remove retired POC provider references, cancelled tasks, configuration and annotation examples, and dependent capability-matching analytics plans from non-archived OpenSpecs.

Verified 15 OpenSpec items, formatting, whitespace checks, and zero remaining case-insensitive references in the non-archived Boost OpenSpec tree.

Assisted-by: GPT-6
Signed-off-by: gabemontero <gmontero@redhat.com>

* docs(RHIDP-18761): address follow-up review findings

Remove remaining retired-provider text from companion documentation, preserve individual deferred load-task entries, and replace the obsolete air-gap dependency with surviving specification links.

Verified 15 OpenSpec items, formatting, 13 local links and anchors, original task descriptions and deferral markers, whitespace checks, and zero retired-provider references in active OpenSpecs and specifications.

Assisted-by: GPT-6
Signed-off-by: gabemontero <gmontero@redhat.com>

* docs(boost): address Fullsend review feedback

Signed-off-by: gabemontero <gmontero@redhat.com>

* docs(openspec): reconcile completed task checklists

Signed-off-by: gabemontero <gmontero@redhat.com>

* docs(RHIDP-18761): settle agent mapping and refresh audit notes

Signed-off-by: gabemontero <gmontero@redhat.com>

* docs(RHIDP-18761): reconcile scoped audit findings

* docs(RHIDP-18761): correct current browse taxonomy references

Signed-off-by: gabemontero <gmontero@redhat.com>

* docs(RHIDP-18761): correct annotation source cross-references

Signed-off-by: gabemontero <gmontero@redhat.com>

---------

Signed-off-by: gabemontero <gmontero@redhat.com>
Co-authored-by: fullsend-code <278716306+fullsend-ai-coder[bot]@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: gabemontero <gmontero@redhat.com>
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
)

Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
…#5514)

Signed-off-by: dependabot[bot] <support@github.com>
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Signed-off-by: Rohit Rai <rohitkrai03@gmail.com>
* docs(RHIDP-18929): triage inherited OpenSpec findings for SDK reconciliation

Triage all 26 inherited observations from the RHIDP-18761 cross-artifact
audit. Record a disposition for each entry and apply spec corrections
where confirmed.

Corrections applied:
- AiResource casing: update AIResource to AiResource for skill/rule rows
  in entity-model design, upstream-schema-alignment proposal/design, and
  annotation-specification spec (AGENTS.md canonical naming)
- Entity ref casing: update skill:default/code-review to
  airesource:default/code-review in eval-hub-integration spec
- Scenario heading discipline: restructure orphan ## Scenario headings to
  #### Scenario under ### Requirement blocks in annotation-specification
  and migration-readiness-tooling specs
- Proposal capabilities: add ## Capabilities sections to entity-model and
  upstream-schema-alignment proposals following the installed schema pattern
- Error normalization: normalize caught unknown values before reading
  constructor/message/stack in connector design examples
- Fault-isolation scoping: scope bucket-empty assertion to first startup
- Delta operations: replace EXISTING with ADDED in ca-bundle-resolution
  and fault-isolation specs
- Task clarity: separate malformed PEM from expired cert in CA task,
  require real backends in integration test task
- Scenario step discipline: move non-testable process prerequisites from
  scenario steps to prose in asset-version-policy spec
- Secret redaction: add redaction assertion for config-change audit events
  consistent with existing failure-event assertion (SDK prerequisite)
- Broken references: fix agent-creation-discovery links to point to
  RHDH-2-1-Legacy-Content path

SDK-readiness decision: one SDK prerequisite identified (audit-events
secret redaction, finding #17), resolved in this commit. All other
findings are spec corrections, deferred design, or owning-feature
follow-ups that do not block RHIDP-18762.

Related to RHIDP-18929

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* docs(RHIDP-18929): correct triage evidence and SDK handoff

Signed-off-by: gabemontero <gmontero@redhat.com>

* docs(RHIDP-18929): clarify prerequisite placement and triage scope

Signed-off-by: gabemontero <gmontero@redhat.com>

---------

Signed-off-by: gabemontero <gmontero@redhat.com>
Co-authored-by: fullsend-code <278716306+fullsend-ai-coder[bot]@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: gabemontero <gmontero@redhat.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* chore(RHIDP-18801): split boost changeset fixed version group

Reduce the fixed group in workspaces/boost/.changeset/config.json
to only ai-catalog-common and ai-catalog-connector-utils. Remove
ai-catalog, ai-catalog-entity-provider-sdk, and ogx-entity-provider
so the SDK, frontend, and OGX provider version independently.

The existing updateInternalDependencies: "patch" setting preserves
normal dependency propagation — consumers still receive range
updates when their dependencies publish a new version. No package
versions are changed by this commit.

Closes RHIDP-18801

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* docs(RHIDP-18801): document version grouping and release-plan checks

Assisted-by: GPT-6

---------

Co-authored-by: fullsend-code <278716306+fullsend-ai-coder[bot]@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: gabemontero <gmontero@redhat.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
@sonarqubecloud

Copy link
Copy Markdown

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.