Skip to content

feat(boost): RHDHPLAN-1513 openspecs#3755

Open
gabemontero wants to merge 5 commits into
redhat-developer:mainfrom
gabemontero:rhdhplan-1513-openspecs
Open

feat(boost): RHDHPLAN-1513 openspecs#3755
gabemontero wants to merge 5 commits into
redhat-developer:mainfrom
gabemontero:rhdhplan-1513-openspecs

Conversation

@gabemontero

Copy link
Copy Markdown
Contributor

Hey, I just made a Pull Request!

These are the openspec markdowns through tasks.md for all the RHIDP epics / stories under RHDHPLAN-1513

✔️ Checklist

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

gabemontero and others added 2 commits July 14, 2026 15:37
…m alignment

Create OpenSpec changes covering all 4 epics and 13 stories under
RHDHPLAN-1513 (AI Catalog Ingestion Operations & Upstream Schema Alignment):

- ingestion-health-dashboard (RHIDP-15331): 5 stories, 3 specs, 7 files
  Health status API, admin health UI, error classification

- connector-config-hot-reload (RHIDP-15332): 3 stories, 3 specs, 7 files
  Zod config schemas, RuntimeConfigResolver hot-reload, config admin UI

- ingestion-audit-metrics (RHIDP-15333): 3 stories, 3 specs, 7 files
  Sync audit events, analytics REST API, Eval Hub integration

- upstream-schema-alignment (RHIDP-15334): 2 stories, 2 specs, 6 files
  Annotation specification document, dry-run migration-readiness tooling

Cross-references RHDHPLAN-1507 (entity model), RHDHPLAN-1508 (audit
logging pattern), RHDHPLAN-1510 (connectors), and upstream Backstage
RFCs #32062 and #33060.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: gabemontero <gmontero@redhat.com>
RHIDP-15333 (Ingestion Audit Logging & Metrics) closed and absorbed
by RHIDP-15277 (AI Catalog RBAC Audit Logging, RHDHPLAN-1508).

Closed epic openspec (ingestion-audit-metrics/):
- .openspec.yaml status → consolidated with absorbing epic metadata
- proposal.md, design.md, tasks.md: consolidation headers with story mapping
- specs/audit-events: status → Consolidated into RHIDP-15280
- specs/analytics-api: status → Consolidated into RHIDP-15277
- specs/eval-hub-integration: status → Consolidated into RHIDP-15277

Surviving epic openspecs (consolidation cross-references):
- ingestion-health-dashboard: proposal.md + design.md annotations
- connector-config-hot-reload: proposal.md + design.md annotations
- upstream-schema-alignment: proposal.md + design.md annotations

Jira updates:
- RHIDP-15343 → CONSOLIDATED into RHIDP-15280, closed as Duplicate
- RHIDP-15344 → CONSOLIDATED into RHIDP-15277 scope, closed as Duplicate
- RHIDP-15345 → CONSOLIDATED into RHIDP-15277 scope, closed as Duplicate
- Blocks links: RHIDP-15295→15338, RHIDP-15258→15346, RHIDP-15258→15347

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: gabemontero <gmontero@redhat.com>
@fullsend-ai-review

fullsend-ai-review Bot commented Jul 14, 2026

Copy link
Copy Markdown

🤖 Finished Review · ✅ Success · Started 7:51 PM UTC · Completed 8:02 PM UTC
Commit: a04cf01 · View workflow run →

@rhdh-qodo-merge

Copy link
Copy Markdown

PR Summary by Qodo

Add Boost OpenSpecs for RHDHPLAN-1513 epics (with audit-metrics consolidation)

📝 Documentation 🕐 40+ Minutes

Grey Divider

AI Description

• Add draft OpenSpec proposals/designs/specs/tasks for RHIDP-15331, RHIDP-15332, and RHIDP-15334.
• Document connector config hot-reload via RuntimeConfigResolver + AdminConfigService patterns.
• Mark RHIDP-15333 (ingestion audit/metrics) as consolidated into RHIDP-15277 (RHDHPLAN-1508).
Diagram

graph TD
  A["RHDHPLAN-1513 OpenSpecs"] --> B["Ingestion Health" (RHIDP-15331)] --> B1["Design/Specs/Tasks"]
  A --> C["Connector Hot-Reload" (RHIDP-15332)] --> C1["Design/Specs/Tasks"]
  A --> D["Schema Alignment" (RHIDP-15334)] --> D1["Annotation spec + CLI spec"]
  A --> E["Audit & Metrics" (RHIDP-15333)] --> F["Consolidated into RHIDP-15277"]
Loading
High-Level Assessment

The following are alternative approaches to this PR:

1. Replace consolidated RHIDP-15333 docs with a short redirect stub
  • ➕ Avoids maintaining duplicate/obsolete design/spec details after consolidation
  • ➕ Reduces review burden and future confusion about the source of truth
  • ➖ Loses historical context for why RHIDP-15333 was originally scoped
  • ➖ Readers may need to chase links to understand what moved where
2. Centralize common cross-epic patterns into a shared OpenSpec reference
  • ➕ Reduces repeated explanations of RuntimeConfigResolver TTL/invalidation and audit-event patterns
  • ➕ Encourages consistent terminology across epics (RBAC gating, cache TTL, reconciliation cycles)
  • ➖ Adds an extra document reviewers must consult
  • ➖ Requires ongoing curation to keep shared reference aligned with each epic

Recommendation: Current approach is acceptable because each epic remains self-contained and explicitly calls out the RHIDP-15333 consolidation. If duplication becomes a maintenance issue, prefer a lightweight RHIDP-15333 redirect stub plus a shared reference doc for recurring patterns (runtime config + audit logging).

Files changed (27) +2682 / -0

Documentation (24) +2673 / -0
design.mdDesign doc for connector configuration hot-reload +141/-0

Design doc for connector configuration hot-reload

• Defines the architecture and decisions for extending RuntimeConfigResolver to connector config, including configScope rules, propagation timing, and credential rotation expectations. Explicitly notes RHIDP-15333 consolidation impact on audit events.

workspaces/boost/openspec/changes/connector-config-hot-reload/design.md

proposal.mdProposal for connector configuration hot-reload epic +44/-0

Proposal for connector configuration hot-reload epic

• Motivates runtime connector config changes without redeploys and outlines planned schema, propagation, and admin UI work. Calls out the consolidation of audit-event responsibilities under RHIDP-15277/15280.

workspaces/boost/openspec/changes/connector-config-hot-reload/proposal.md

spec.mdSpec for admin UI managing connector config overrides +204/-0

Spec for admin UI managing connector config overrides

• Specifies admin UX and API interactions for toggles, endpoints, schedules, read-only secret refs, validation feedback, RBAC gating, and audit-backed change history.

workspaces/boost/openspec/changes/connector-config-hot-reload/specs/config-admin-ui/spec.md

spec.mdSpec for Zod connector config schemas + configScope enforcement +115/-0

Spec for Zod connector config schemas + configScope enforcement

• Defines required connector schema fields, YAML-vs-DB override rules, validation failures, schema versioning/migrations, and defaulting behavior.

workspaces/boost/openspec/changes/connector-config-hot-reload/specs/config-schemas/spec.md

spec.mdSpec for runtime override propagation via TTL + reconciliation cycles +148/-0

Spec for runtime override propagation via TTL + reconciliation cycles

• Documents expected behavior for enable/disable, endpoint, schedule, and credential rotation timing, plus cache invalidation semantics and provider transition behavior.

workspaces/boost/openspec/changes/connector-config-hot-reload/specs/hot-reload-propagation/spec.md

tasks.mdImplementation task breakdown for connector hot-reload +99/-0

Implementation task breakdown for connector hot-reload

• Adds a phased task plan covering schema creation, resolver extension, provider integration, admin UI work, AdminConfigService endpoints, and testing/documentation.

workspaces/boost/openspec/changes/connector-config-hot-reload/tasks.md

.openspec.yamlMark ingestion-audit-metrics OpenSpec as consolidated +8/-0

Mark ingestion-audit-metrics OpenSpec as consolidated

• Adds OpenSpec metadata with status set to consolidated and records the absorption into RHIDP-15277 (RHDHPLAN-1508) with rationale.

workspaces/boost/openspec/changes/ingestion-audit-metrics/.openspec.yaml

design.mdDesign doc for ingestion audit logging + analytics (now consolidated) +213/-0

Design doc for ingestion audit logging + analytics (now consolidated)

• Captures the original design for ingestion audit events, analytics REST endpoints, quality score storage, and Eval Hub integration. Clearly states the entire scope is now delivered under RHIDP-15277/15280.

workspaces/boost/openspec/changes/ingestion-audit-metrics/design.md

proposal.mdProposal doc for ingestion audit logging + metrics (now consolidated) +58/-0

Proposal doc for ingestion audit logging + metrics (now consolidated)

• Explains compliance/observability motivations for ingestion auditing and analytics APIs and enumerates intended impacts. Includes explicit consolidation mapping of stories into RHIDP-15277/15280.

workspaces/boost/openspec/changes/ingestion-audit-metrics/proposal.md

spec.mdAnalytics API spec marked as consolidated +75/-0

Analytics API spec marked as consolidated

• Defines scenarios for sync history, quality scores, match coverage, RBAC gating, pagination, and filtering, with a header stating consolidation into RHIDP-15277.

workspaces/boost/openspec/changes/ingestion-audit-metrics/specs/analytics-api/spec.md

spec.mdIngestion audit events spec marked as consolidated +72/-0

Ingestion audit events spec marked as consolidated

• Specifies scenarios for sync lifecycle and config-change audit event emission and formatting, with consolidation into RHIDP-15280.

workspaces/boost/openspec/changes/ingestion-audit-metrics/specs/audit-events/spec.md

spec.mdEval Hub integration spec marked as consolidated +85/-0

Eval Hub integration spec marked as consolidated

• Documents expected configuration, ingestion behavior, storage, distribution computation, and failure handling for Eval Hub quality scores, with consolidation into RHIDP-15277.

workspaces/boost/openspec/changes/ingestion-audit-metrics/specs/eval-hub-integration/spec.md

tasks.mdTask plan for ingestion audit/metrics (consolidated) +176/-0

Task plan for ingestion audit/metrics (consolidated)

• Provides a detailed implementation task list for audit events, analytics endpoints, DB storage, and Eval Hub ingestion, prefaced with consolidation guidance and cross-references for surviving epics.

workspaces/boost/openspec/changes/ingestion-audit-metrics/tasks.md

design.mdDesign doc for ingestion health admin dashboard +123/-0

Design doc for ingestion health admin dashboard

• Defines the health data model (sync_attempts), derived health states, Force Sync mechanism, UI integration approach, disconnected-cluster UX, and Neo4j status panel decisions.

workspaces/boost/openspec/changes/ingestion-health-dashboard/design.md

proposal.mdProposal for ingestion health status API + admin UI +61/-0

Proposal for ingestion health status API + admin UI

• Motivates a connector health dashboard for incident response and air-gapped clusters, outlining APIs, UI, error classification, and Neo4j monitoring as planned deliverables.

workspaces/boost/openspec/changes/ingestion-health-dashboard/proposal.md

spec.mdSpec for admin health UI behaviors and states +166/-0

Spec for admin health UI behaviors and states

• Specifies PatternFly-based health cards, timestamps/metrics, error display, Force Sync UX, Neo4j panel behaviors, polling, and navigation integration.

workspaces/boost/openspec/changes/ingestion-health-dashboard/specs/admin-health-ui/spec.md

spec.mdSpec for connector error classification + guidance +154/-0

Spec for connector error classification + guidance

• Defines classification categories (auth/network/schema/rate-limit/unknown), diagnostic guidance requirements, extensibility for connector-specific patterns, and UI badge rendering expectations.

workspaces/boost/openspec/changes/ingestion-health-dashboard/specs/error-classification/spec.md

spec.mdSpec for ingestion health REST API + force-sync endpoints +135/-0

Spec for ingestion health REST API + force-sync endpoints

• Documents response shapes, status derivation rules, retention policy expectations, RBAC gating, force-sync lifecycle/polling, and Neo4j sync status/force-sync endpoints.

workspaces/boost/openspec/changes/ingestion-health-dashboard/specs/health-status-api/spec.md

tasks.mdImplementation task breakdown for ingestion health dashboard +121/-0

Implementation task breakdown for ingestion health dashboard

• Adds phased tasks for DB schema/repositories, API routes, error classifier, UI panel + navigation, Force Sync mechanics, Neo4j panel, and test coverage.

workspaces/boost/openspec/changes/ingestion-health-dashboard/tasks.md

design.mdDesign doc for upstream schema alignment readiness approach +107/-0

Design doc for upstream schema alignment readiness approach

• Defines a living mapping document from RHDH annotations/spec.type to draft upstream RFC kinds, plus a read-only dry-run CLI for migration readiness reporting.

workspaces/boost/openspec/changes/upstream-schema-alignment/design.md

proposal.mdProposal for annotation spec + migration-readiness tooling +58/-0

Proposal for annotation spec + migration-readiness tooling

• Positions the work as customer-facing assurance: document mappings to RFC #32062/#33060 and provide a read-only readiness assessment tool, explicitly deferring actual migration.

workspaces/boost/openspec/changes/upstream-schema-alignment/proposal.md

spec.mdSpec for the annotation specification document deliverable +111/-0

Spec for the annotation specification document deliverable

• Defines scenarios requiring complete documentation of rhdh.io/ai-asset-* annotations, all AI-related spec.type values, RFC mapping with confidence levels, and explicit future-work framing.

workspaces/boost/openspec/changes/upstream-schema-alignment/specs/annotation-specification/spec.md

spec.mdSpec for dry-run migration-readiness CLI scaffold +136/-0

Spec for dry-run migration-readiness CLI scaffold

• Specifies read-only catalog enumeration, per-entity mapping reports, transformation/warning reporting, and JSON/text output formats with future-work disclaimer.

workspaces/boost/openspec/changes/upstream-schema-alignment/specs/migration-readiness-tooling/spec.md

tasks.mdImplementation task breakdown for schema alignment readiness +63/-0

Implementation task breakdown for schema alignment readiness

• Adds tasks for writing the annotation spec, scaffolding the CLI tool, testing its mapping/output behavior, and documenting usage and confidence semantics.

workspaces/boost/openspec/changes/upstream-schema-alignment/tasks.md

Other (3) +9 / -0
.openspec.yamlRegister connector-config-hot-reload OpenSpec (draft) +3/-0

Register connector-config-hot-reload OpenSpec (draft)

• Adds OpenSpec metadata declaring this change set as spec-driven and in draft status.

workspaces/boost/openspec/changes/connector-config-hot-reload/.openspec.yaml

.openspec.yamlRegister ingestion-health-dashboard OpenSpec (draft) +3/-0

Register ingestion-health-dashboard OpenSpec (draft)

• Adds OpenSpec metadata declaring this change set as spec-driven and in draft status.

workspaces/boost/openspec/changes/ingestion-health-dashboard/.openspec.yaml

.openspec.yamlRegister upstream-schema-alignment OpenSpec (draft) +3/-0

Register upstream-schema-alignment OpenSpec (draft)

• Adds OpenSpec metadata declaring this change set as spec-driven and in draft status.

workspaces/boost/openspec/changes/upstream-schema-alignment/.openspec.yaml

@codecov

codecov Bot commented Jul 14, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 54.65%. Comparing base (a04cf01) to head (957f5b0).
⚠️ Report is 41 commits behind head on main.
✅ All tests successful. No failed tests found.

Additional details and impacted files
@@           Coverage Diff           @@
##             main    #3755   +/-   ##
=======================================
  Coverage   54.65%   54.65%           
=======================================
  Files        2360     2360           
  Lines       90140    90140           
  Branches    25214    25207    -7     
=======================================
  Hits        49270    49270           
- Misses      40598    40651   +53     
+ Partials      272      219   -53     
Flag Coverage Δ *Carryforward flag
adoption-insights 83.70% <ø> (ø) Carriedforward from b43cbe2
ai-integrations 67.53% <ø> (ø) Carriedforward from b43cbe2
app-defaults 69.79% <ø> (ø) Carriedforward from b43cbe2
augment 46.39% <ø> (ø) Carriedforward from b43cbe2
boost 73.13% <ø> (ø)
bulk-import 72.46% <ø> (ø) Carriedforward from b43cbe2
cost-management 14.10% <ø> (ø) Carriedforward from b43cbe2
dcm 61.81% <ø> (ø) Carriedforward from b43cbe2
extensions 61.53% <ø> (ø) Carriedforward from b43cbe2
global-floating-action-button 71.18% <ø> (ø) Carriedforward from b43cbe2
global-header 59.71% <ø> (ø) Carriedforward from b43cbe2
homepage 50.23% <ø> (ø) Carriedforward from b43cbe2
install-dynamic-plugins 56.77% <ø> (ø) Carriedforward from b43cbe2
konflux 91.49% <ø> (ø) Carriedforward from b43cbe2
lightspeed 69.02% <ø> (ø) Carriedforward from b43cbe2
mcp-integrations 85.46% <ø> (ø) Carriedforward from b43cbe2
orchestrator 43.74% <ø> (ø) Carriedforward from b43cbe2
quickstart 65.63% <ø> (ø) Carriedforward from b43cbe2
sandbox 79.56% <ø> (ø) Carriedforward from b43cbe2
scorecard 82.93% <ø> (ø) Carriedforward from b43cbe2
theme 61.26% <ø> (ø) Carriedforward from b43cbe2
translations 7.25% <ø> (ø) Carriedforward from b43cbe2
x2a 78.68% <ø> (ø) Carriedforward from b43cbe2

*This pull request uses carry forward flags. Click here to find out more.


Continue to review full report in Codecov by Harness.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update a04cf01...957f5b0. Read the comment docs.

🚀 New features to boost your workflow:
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@fullsend-ai-review

fullsend-ai-review Bot commented Jul 14, 2026

Copy link
Copy Markdown

Review

Verdict: Comment — medium-severity findings worth noting for spec accuracy, but none blocking for draft pre-implementation specifications.

Summary

This PR adds 27 new openspec documents (design, proposal, specs, tasks) for four RHDHPLAN-1513 feature areas under workspaces/boost/openspec/changes/. The documents follow the established openspec conventions in the repo (matching structure of existing specs like ai-chat-interaction-experience, platform-operations-deployment). The technical content is thorough and well-organized.

However, several specifications describe API surfaces that diverge from the existing codebase without acknowledging the gap. Since these specs describe "extending existing infrastructure," clarity about what's reused vs. new is important for implementation accuracy.

Findings

Medium

1. API surface assumptions diverge from existing RuntimeConfigResolver and AdminConfigService (connector-config-hot-reload/design.md, specs/config-schemas/spec.md, specs/hot-reload-propagation/spec.md)

The specs reference methods that don't exist on the current classes:

  • RuntimeConfigResolver.getConfig('connectors.jira') — actual method is resolve(key: BoostConfigKey)
  • RuntimeConfigResolver.invalidate('connectors.jira') with a key argument — actual invalidate() takes no arguments (invalidates entire cache, not per-key)
  • AdminConfigService.setConfig() — actual method is setOverride(key: BoostConfigKey, value: unknown)
  • POST /api/boost/admin/config — this route doesn't exist yet

The designs claim to "extend" and "reuse" existing infrastructure, but silently introduce new API surface. This gap could mislead implementers about the scope of changes needed.

Remediation: Add a section to design.md explicitly listing the new methods/routes that need to be added to RuntimeConfigResolver and AdminConfigService, or align the spec method names with the existing API.

2. BoostConfigKey type system requires extension (connector-config-hot-reload/specs/config-schemas/spec.md)

The specs assume RuntimeConfigResolver can resolve arbitrary string keys like 'connectors.jira'. The existing resolve() parameter is typed as BoostConfigKey — a union of literal strings from the boostConfigFields registry (e.g., 'boost.model.baseUrl'). No connectors.* keys exist in that registry. The type system would need to be extended to support dynamic connector-scoped keys.

Remediation: Document in the design that the boostConfigFields registry in schemas.ts must be extended, or the type system refactored to support dynamic key namespaces.

3. Permission name inconsistency across feature areas (ingestion-audit-metrics/design.md, ingestion-audit-metrics/specs/analytics-api/spec.md)

The ingestion-audit-metrics documents use ai-catalog.admin for RBAC gating, while connector-config-hot-reload uses boost.admin, and ingestion-health-dashboard uses "boost admin permissions" generically. The codebase defines boost.admin (in boost-common/src/permissions.ts) — ai-catalog.admin does not exist. Using different permission names across feature areas under the same plan creates an inconsistent RBAC model.

Remediation: Standardize on boost.admin (which already exists) across all four feature areas.

4. Health status "degraded" definition inconsistency (ingestion-health-dashboard/proposal.md vs design.md)

The proposal.md defines degraded as "last sync succeeded but recent failures" (most recent must have succeeded). The design.md defines it as "Mixed results (not all-success and not all-failure)" (broader — includes cases where most recent failed). The health-status-api/spec.md follows the design.md definition. These are materially different classifications.

Remediation: Align proposal.md with the design.md definition ("mixed results"), which is the more precise and consistently used definition.

Low

5. "EXISTING Requirements" label applied to non-existent features (connector-config-hot-reload/specs/config-admin-ui/spec.md, config-schemas/spec.md, hot-reload-propagation/spec.md)

Several spec files label their scenarios as "EXISTING Requirements" but describe behavior for Jira, GitHub, and GitLab connectors that don't exist in the codebase. The entity providers that exist are kagenti-entity-provider and llamastack-entity-provider. This labeling could confuse readers about what's already implemented.

6. Misleading worst-case propagation timing (connector-config-hot-reload/design.md)

The design states worst-case latency as "Cache TTL (30s) + reconciliation interval (5m) = 5m30s". But the same document describes immediate cache invalidation on DB write. The 30s TTL only applies as a safety net if invalidation fails. Normal-case latency is just the reconciliation interval (~5m).

7. SQL DECIMAL(5,3) doesn't enforce 0-1 range (ingestion-audit-metrics/design.md)

The boost_quality_scores.score column uses DECIMAL(5,3) which allows values up to 99.999, but the spec states scores are normalized to 0.000-1.000. A CHECK (score >= 0 AND score <= 1) constraint would enforce this at the database level.

8. db-only config fields omitted from connector schema spec (connector-config-hot-reload/specs/config-schemas/spec.md)

The design.md lists three db-only fields (lastSyncTimestamp, lastSyncOutcome, runStatus) in the configScope table, but the config-schemas spec scenarios omit them. Clarify whether these belong in the connector config Zod schema or are stored separately.

Dimensions Reviewed

Dimension Result
Correctness 4 medium, 4 low findings — API surface gaps, internal inconsistencies
Security No findings — clean docs-only diff, no secrets, no injection patterns
Intent & coherence PR follows established openspec patterns; JIRA plan reference (RHDHPLAN-1513) provides authorization context
Style & conventions New files match existing openspec structure (design/proposal/specs/tasks format)
Docs currency No staleness — referenced cross-links exist; no index needs updating
Cross-repo contracts Skipped — no exported interfaces modified

Labels: PR modifies only the boost workspace openspec documentation directory.

Previous run

Review

Verdict: Approve

This PR adds OpenSpec documentation for four feature areas under RHDHPLAN-1513: Connector Configuration Hot-Reload, Ingestion Audit Logging & Metrics, Ingestion Health Admin Dashboard, and Upstream Schema Alignment Readiness. All 27 files are documentation-only (markdown specifications and YAML metadata) with no code changes.

Assessment

Structure & conventions: All four feature areas follow the established OpenSpec pattern already in the repository (.openspec.yaml + proposal.md + design.md + tasks.md + specs/*/spec.md). The directory structure is consistent with existing changes like platform-operations-deployment and agent-creation-discovery.

Consolidation handling: The ingestion-audit-metrics area correctly marks its .openspec.yaml with status: consolidated and includes structured consolidation metadata (absorbed_by, plan, reason, date). Individual specs within this area also carry consolidation banners pointing to the absorbing epics (RHIDP-15277, RHIDP-15280). This is well-handled.

Cross-references: RHDHPLAN and RHIDP ticket references are consistent throughout. The consolidation notes in each design/proposal document correctly describe which stories migrated where, and surviving epics are identified.

Spec quality: The specifications are thorough — design docs include clear decisions with rationale, scenarios use GIVEN/WHEN/THEN format, and task breakdowns include JIRA story references and priority levels. The connector-config-hot-reload design, for example, documents the configScope annotation strategy with a clear rationale for which fields are yaml-only vs db-overridable.

Low-severity finding

db-only configScope undocumented (connector-config-hot-reload): In tasks.md section 8.2, the documentation task lists three configScope values: yaml-only, db-overridable, db-only. However, the design.md and spec files only define and use two values: yaml-only and db-overridable. The db-only value appears nowhere else in the specifications. This should be either documented in the design/spec or removed from the tasks list to avoid confusion during implementation.

Summary

This is a well-structured documentation PR that follows established repository conventions. The specifications provide comprehensive coverage of four feature areas with clear design decisions, rationale, and task breakdowns. The one minor inconsistency noted above does not block approval.


Labels: PR adds OpenSpec documentation for boost workspace ingestion features

Previous run (2)

Review — Comment

This PR adds openspec design documents for four feature areas under RHDHPLAN-1513: connector-config-hot-reload, ingestion-audit-metrics (consolidated), ingestion-health-dashboard, and upstream-schema-alignment. All 27 files are new markdown/YAML documentation — no production code changes.

The openspec structure follows the established pattern in the repo (proposal.md → design.md → specs/ → tasks.md) and the referenced components (RuntimeConfigResolver, AdminConfigService, AdminLayout.tsx) all exist in the codebase. The documents are thorough and well-organized.

However, several internal consistency issues across the specification documents could mislead implementers. These are worth addressing before the specs are used as implementation guides.

Findings

Cross-document inconsistencies

  1. Credential rotation latency mismatch (connector-config-hot-reload/design.md vs specs/hot-reload-propagation/spec.md) — design.md Decision 4 states: "Effective credential rotation = mount propagation delay (≤60s) + resolver TTL (30s) = ≤90s worst case." But the spec's credential rotation scenario correctly calculates: "total credential rotation latency ≤ 60s kubelet delay + 5m reconciliation interval = ~6 minutes." The spec is right — credentials are read from mounted files during reconciliation, so the dominant latency is the reconciliation interval, not the 30s cache TTL. The ≤90s claim in design.md and the Risks section is incorrect and would mislead implementers about actual rotation latency.

  2. API endpoint pattern inconsistency (connector-config-hot-reload specs) — Three different endpoint patterns are used for the same connector config save operation across files:

    • POST /admin/config/connectors.jira (toggle/form scenarios in config-admin-ui/spec.md — missing /api/boost prefix)
    • POST /api/boost/admin/config with key-value body (DB Override Save in config-admin-ui/spec.md)
    • POST /api/boost/admin/config/connectors/:connectorId (in tasks.md)

    Implementers won't know which contract to build. Recommend standardizing on the RESTful pattern from tasks.md.

  3. Disabled connector filtering conflict (ingestion-health-dashboard) — design.md Decision 4 states disabled connectors "don't consume health API response space" (never returned), but health-status-api/spec.md defines ?includeDisabled=true support, and admin-health-ui/spec.md renders disabled connectors with grey badges. The UI can't render what the API doesn't return.

SQL schema issues

  1. PostgreSQL-incompatible INDEX syntax (ingestion-audit-metrics/design.md and ingestion-health-dashboard/design.md) — Both CREATE TABLE statements use MySQL-style inline INDEX syntax (INDEX idx_name (column)) inside the table definition, but the schemas use PostgreSQL types (SERIAL, TIMESTAMPTZ, JSONB). In PostgreSQL, indexes must be created with separate CREATE INDEX statements. Since implementers may copy-paste these schemas, this would produce parse errors.

Health status derivation gaps

  1. Undefined health state (ingestion-health-dashboard/design.md) — The health derivation defines Healthy (all 3 succeeded), Degraded (last succeeded + prior failures), and Failing (all 3 failed). But if the most recent attempt failed while earlier ones succeeded (e.g., [success, success, failure]), it matches none of the defined states. This creates a gap where some 3-attempt combinations have no status.

  2. Underspecified edge cases (health-status-api/spec.md) — The fewer-than-3-attempts fallback says "e.g., 1 success = Healthy" but doesn't cover: 1 failure, 2 mixed results, or 0 attempts (new connector never synced). The design.md doesn't address fewer-than-3 at all.

Minor inconsistencies

  1. Missing tls.caFile from schema specdesign.md Decision 2 configScope table includes tls.caFile as yaml-only, but config-schemas/spec.md Jira schema scenario omits this field entirely.

  2. Orphaned db-only configScope valueproposal.md introduces a third configScope db-only ("runtime-only state"), but it never appears again in any design, spec, or task file. Either define it with concrete fields or remove it.

  3. Inconsistent UI propagation messages — The toggle scenario says "within 30 seconds" while other scenarios correctly say "within 30 seconds + next reconciliation cycle." The 30-seconds-only claim is misleading since the reconciliation interval (up to 5 minutes) is the dominant factor.

Security

No security findings. All example URLs use safe example.com domains. No hardcoded secrets, injection patterns, or prompt injection attempts detected. Permission/RBAC specifications are appropriately restrictive.

Intent & Scope

The PR scope is appropriate — adding openspec design documents for the RHDHPLAN-1513 feature areas. The structure follows established patterns in the repo. No unauthorized code changes or unexpected files.


🤖 Generated with Fullsend

@fullsend-ai-review fullsend-ai-review Bot added the requires-manual-review Review requires human judgment label Jul 14, 2026
@rhdh-qodo-merge

Copy link
Copy Markdown

Code Review by Qodo

🐞 Bugs (1) 📘 Rule violations (2) 🔗 Cross-repo conflicts (0) 📜 Skill insights (0)

Context used
✅ Compliance rules (platform): 37 rules
✅ Cross-repo context
  Not relevant to this PR: redhat-developer/rhdh
  Not relevant to this PR: redhat-developer/rhdh-chart
  Not relevant to this PR: redhat-developer/rhdh-operator
  Not relevant to this PR: redhat-developer/rhdh-local

Grey Divider


Action required

1. connectors.jira missing boost. prefix 📘 Rule violation ⚙ Maintainability
Description
New OpenSpec docs define/use configuration keys like connectors.jira and security.mode that do
not start with boost., which violates the required config key namespace convention. This can lead
to inconsistent configuration naming and implementation drift when these specs are turned into code.
Code

workspaces/boost/openspec/changes/connector-config-hot-reload/design.md[50]

+  await runtimeConfigResolver.getConfig('connectors.jira');
Relevance

⭐⭐⭐ High

Boost config keys are consistently namespaced (e.g., boost.security.mode/boost.model.*); docs
inconsistencies were previously fixed.

PR-#3521
PR-#3292

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
PR Compliance ID 2401 requires configuration keys/usages in changed files to start with boost..
The added specs/docs include non-namespaced keys such as connectors.jira (and security.mode)
which contradict this rule.

Rule 2401: Configuration keys must use the boost.* namespace
workspaces/boost/openspec/changes/connector-config-hot-reload/design.md[49-60]
workspaces/boost/openspec/changes/security-safety-governance/design.md[39-42]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
OpenSpec documentation introduces configuration keys/usages that do not start with `boost.` (e.g., `connectors.jira`, `security.mode`), violating the required `boost.*` namespace.

## Issue Context
The compliance rule requires all app behavior configuration keys in changed files to be under the `boost.*` namespace to keep naming consistent across YAML, runtime overrides, and code.

## Fix Focus Areas
- workspaces/boost/openspec/changes/connector-config-hot-reload/design.md[50-50]
- workspaces/boost/openspec/changes/security-safety-governance/design.md[41-41]
- workspaces/boost/openspec/changes/connector-config-hot-reload/specs/config-admin-ui/spec.md[102-108]
- workspaces/boost/openspec/changes/connector-config-hot-reload/specs/config-schemas/spec.md[37-46]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools



Informational

2. README status mismatch 🐞 Bug ⚙ Maintainability
Description
workspaces/boost/README.md states all OpenSpec changes are in draft status, but this PR adds
ingestion-audit-metrics with status: consolidated, making the workspace documentation
inconsistent and potentially misleading.
Code

workspaces/boost/openspec/changes/ingestion-audit-metrics/.openspec.yaml[R1-3]

+schema: spec-driven
+created: 2026-07-08
+status: consolidated
Relevance

⭐⭐⭐ High

Team has accepted README/doc consistency fixes when workspace docs drift from actual
metadata/versions.

PR-#3621

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
The README makes a blanket claim that all specs are draft, but the newly added OpenSpec metadata
sets the ingestion-audit-metrics change to consolidated, contradicting that claim.

workspaces/boost/README.md[34-39]
workspaces/boost/openspec/changes/ingestion-audit-metrics/.openspec.yaml[1-8]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The Boost workspace README claims all OpenSpec changes are currently in **draft** status, but the PR introduces an OpenSpec change explicitly marked `status: consolidated`, so the README statement is no longer true.

## Issue Context
A consolidated/closed change is valid, but the README should not imply every change directory is draft after this PR.

## Fix Focus Areas
- workspaces/boost/README.md[34-39]
- workspaces/boost/openspec/changes/ingestion-audit-metrics/.openspec.yaml[1-8]

## What to change
- Update the README sentence to reflect that most/active specs are draft, while some may be consolidated/closed (or explicitly exclude/list consolidated changes).

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


3. Non-boost.* permission identifiers 📘 Rule violation ⚙ Maintainability
Description
New OpenSpec docs introduce permission identifiers such as ai-catalog.admin,
ai-catalog.asset.read.usage-docs, and chat.read that do not start with boost.. This violates
the required permission naming prefix and will create inconsistent RBAC identifiers if implemented
as written.
Code

workspaces/boost/openspec/changes/ingestion-audit-metrics/design.md[17]

+- Analytics REST API RBAC-gated with `ai-catalog.admin` permission
Relevance

⭐ Low

Repo already uses non-boost permission names like ai-catalog.admin in merged docs; naming prefix not
enforced historically.

PR-#3703

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
PR Compliance ID 2409 requires all permission identifiers in changed files to start with boost..
The added OpenSpec documents reference several permissions that omit the prefix (e.g.,
ai-catalog.admin, ai-catalog.asset.read.usage-docs, chat.read).

Rule 2409: Permission identifiers must use the boost.* naming prefix
workspaces/boost/openspec/changes/ingestion-audit-metrics/design.md[15-18]
workspaces/boost/openspec/changes/ai-catalog-frontend/design.md[51-54]
workspaces/boost/openspec/changes/security-safety-governance/tasks.md[5-9]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
OpenSpec docs/specs/tasks define permission identifiers that do not start with the required `boost.` prefix (e.g., `ai-catalog.admin`, `ai-catalog.asset.read.usage-docs`, `chat.read`).

## Issue Context
The compliance rule requires all permission identifiers used in changed files to begin with `boost.` to ensure consistent RBAC naming across the system.

## Fix Focus Areas
- workspaces/boost/openspec/changes/ingestion-audit-metrics/design.md[17-17]
- workspaces/boost/openspec/changes/ai-catalog-frontend/design.md[51-54]
- workspaces/boost/openspec/changes/ai-catalog-frontend/specs/entity-extensions/spec.md[65-73]
- workspaces/boost/openspec/changes/security-safety-governance/tasks.md[5-9]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

Qodo Logo

@rhdh-qodo-merge rhdh-qodo-merge Bot added documentation Improvements or additions to documentation enhancement New feature or request labels Jul 14, 2026
@gabemontero

Copy link
Copy Markdown
Contributor Author

Thanks for the thorough review. Addressing all 9 findings:

1. Credential rotation latency mismatch — Agreed. The spec correctly calculates ~6 minutes (60s kubelet + 5min reconciliation). The ≤90s claim in design.md Decision 4 incorrectly used the 30s cache TTL instead of the reconciliation interval as the dominant factor. Updating design.md to match the spec.

2. API endpoint pattern inconsistency — Agreed. Standardizing all admin config save calls on POST /api/boost/admin/config with key-value body ({ key: "connectors.jira", value: {...} }), consistent with the existing AdminConfigService "DB Override Save" scenario. Fixes missing /api/boost prefix in toggle scenarios and design.md.

3. Disabled connector filtering conflict — Agreed. Updating design.md Decision 4 to clarify that disabled connectors are excluded by default but available via ?includeDisabled=true (matching the spec and UI).

4. PostgreSQL-incompatible INDEX syntax — Agreed. Replacing MySQL-style inline INDEX with separate CREATE INDEX statements in both ingestion-audit-metrics/design.md and ingestion-health-dashboard/design.md.

5. Undefined health state — Agreed. Redefining health derivation: Healthy = all N succeeded, Degraded = mixed (not all-success and not all-failure), Failing = all N failed. This covers all combinations including [success, success, failure].

6. Underspecified edge cases — Agreed. Adding explicit derivation for fewer-than-3 attempts: 0 = Unknown (never synced), 1+ all-success = Healthy, all-failure = Failing, mixed = Degraded.

7. Missing tls.caFile from schema spec — Agreed. Adding tls.caFile (string, yaml-only) to the Jira connector config schema in config-schemas/spec.md.

8. Orphaned db-only configScope — Agreed. Removing from proposal.md — no concrete fields use this scope.

9. Inconsistent UI propagation messages — Agreed. Updating "within 30 seconds" to "within 30 seconds + next reconciliation cycle" for consistency with the propagation spec.

gabemontero and others added 2 commits July 14, 2026 16:35
Rebase consistency fix: update stale skill entity references to match
confirmed category taxonomy (skill → AIResource kind, spec.type: skill).

- proposal.md: Skill row Resource/ai-skill → AIResource/skill
- annotation-specification/spec.md: ai-skill (Resource kind) → skill (AIResource kind)
- ingestion-audit-metrics/design.md: spec.type: ai-skill → spec.type: skill (2 locations)

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

Addresses all 9 findings from fullsend review agent on PR redhat-developer#3755:

1. Credential rotation latency: fix ≤90s claim → ~6 minutes (60s kubelet
   + 5min reconciliation) in design.md Decision 4 and Risks section
2. API endpoint pattern: standardize on POST /api/boost/admin/config with
   key-value body; fix missing /api/boost prefix in toggle scenarios
3. Disabled connector filtering: reconcile design.md with spec — excluded
   by default, available via ?includeDisabled=true
4. PostgreSQL INDEX syntax: replace MySQL-style inline INDEX with separate
   CREATE INDEX statements in both design.md files
5. Health derivation gap: redefine as Healthy/Degraded/Failing/Unknown
   covering all attempt combinations including [success, success, failure]
6. Fewer-than-3 edge cases: explicit derivation for 0-2 attempts using
   same rules as 3-attempt case
7. Missing tls.caFile: add to Jira connector config schema in spec
8. Orphaned db-only configScope: remove from proposal.md
9. Propagation messages: fix 'within 30 seconds' → 'within 30 seconds +
   next reconciliation cycle'

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: gabemontero <gmontero@redhat.com>
@fullsend-ai-review

fullsend-ai-review Bot commented Jul 14, 2026

Copy link
Copy Markdown

🤖 Review · ❌ Terminated · Started 8:41 PM UTC · Ended 8:47 PM UTC
Commit: a04cf01 · View workflow run →

fullsend-ai-review[bot]

This comment was marked as outdated.

@fullsend-ai-review fullsend-ai-review Bot added ready-for-merge All reviewers approved — ready to merge and removed requires-manual-review Review requires human judgment labels Jul 14, 2026
@fullsend-ai-review

Copy link
Copy Markdown

🤖 Finished Review · ✅ Success · Started 8:41 PM UTC · Completed 8:47 PM UTC
Commit: a04cf01 · View workflow run →

…ly state

Re-add db-only to proposal.md configScope list (reverses earlier removal).
Add concrete db-only fields (lastSyncTimestamp, lastSyncOutcome, runStatus)
to design.md Decision 2 table with rationale paragraph explaining these are
pure runtime state with no YAML baseline.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: gabemontero <gmontero@redhat.com>
@sonarqubecloud

Copy link
Copy Markdown

@fullsend-ai-review

fullsend-ai-review Bot commented Jul 16, 2026

Copy link
Copy Markdown

🤖 Finished Review · ✅ Success · Started 10:00 PM UTC · Completed 10:13 PM UTC
Commit: 73bbfe1 · View workflow run →

@fullsend-ai-review fullsend-ai-review Bot added requires-manual-review Review requires human judgment workspace/boost Boost workspace (Backstage AI plugin) and removed ready-for-merge All reviewers approved — ready to merge labels Jul 16, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation enhancement New feature or request requires-manual-review Review requires human judgment workspace/boost Boost workspace (Backstage AI plugin)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant