Skip to content

OCPEDGE-2768: feat(edge-ic): add /morning daily briefing skill#198

Open
lucaconsalvi wants to merge 24 commits into
openshift-eng:mainfrom
lucaconsalvi:feat/edge-ic-morning-skill
Open

OCPEDGE-2768: feat(edge-ic): add /morning daily briefing skill#198
lucaconsalvi wants to merge 24 commits into
openshift-eng:mainfrom
lucaconsalvi:feat/edge-ic-morning-skill

Conversation

@lucaconsalvi

@lucaconsalvi lucaconsalvi commented Jun 22, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Add /morning skill to the edge-ic plugin — a daily briefing that aggregates QA tasks, sprint backlog, carry-over items, open PRs, review queue, RHEL verification queue, and quarterly
    reminders into a single prioritized terminal output
  • Includes first-run setup wizard, config format reference (MORNING_CONFIG_FORMAT.md), and output format reference (MORNING_OUTPUT_FORMAT.md)
  • Output uses retro block pixel title (▀▄█), » section markers, rounded box-drawing panels aligned at 60 columns

Files

File Purpose
plugins/edge-ic/skills/morning/SKILL.md Skill definition (422 lines) — setup wizard, 8 data gathering steps, deduplication, rendering
plugins/edge-ic/references/MORNING_CONFIG_FORMAT.md Config schema reference for $HOME/.config/edge-ic/morning.yaml
plugins/edge-ic/references/MORNING_OUTPUT_FORMAT.md Output template with block pixel character map, panel construction rules, progress bar spec

Test plan

  • Run /morning with no config — verify setup wizard runs
  • Run /morning with config — verify data gathering and output rendering
  • Verify block pixel title renders correctly for custom titles
  • Verify » section markers align at 60 columns
  • Verify empty sections are omitted (no empty boxes)
  • Verify error notes appear when JIRA/GitHub is unreachable

Summary by CodeRabbit

  • Documentation
    • Added edge-ic:morning configuration reference, including a full YAML schema, defaults, setup/first-run guidance, and daily-notes date/path placeholders.
    • Added edge-ic:morning output reference, specifying the complete briefing layout (panels, banners, section rules), formatting, omission behavior, and summary/error-note logic.
    • Added comprehensive edge-ic:morning skill docs covering the end-to-end flow (config handling, Jira QA task selection, sprint urgency, carry-over parsing, PR/review queues, quarter reminders, and optional RHEL verification).

@openshift-ci

openshift-ci Bot commented Jun 22, 2026

Copy link
Copy Markdown

Skipping CI for Draft Pull Request.
If you want CI signal for your change, please convert it to an actual PR.
You can still manually trigger a test run with /test all

@openshift-ci openshift-ci Bot added the do-not-merge/work-in-progress Indicates that a PR should not merge because it is a work in progress. label Jun 22, 2026
@openshift-ci

openshift-ci Bot commented Jun 22, 2026

Copy link
Copy Markdown

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: lucaconsalvi

The full list of commands accepted by this bot can be found here.

The pull request process is described here

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@openshift-ci openshift-ci Bot added the approved Indicates a PR has been approved by an approver from all required OWNERS files. label Jun 22, 2026
@coderabbitai

coderabbitai Bot commented Jun 22, 2026

Copy link
Copy Markdown
Contributor

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

Walkthrough

Three new documentation files are added for the edge-ic:morning skill: a YAML config schema reference (MORNING_CONFIG_FORMAT.md), a full rendered output format specification (MORNING_OUTPUT_FORMAT.md), and a comprehensive skill document (SKILL.md) covering setup wizard behavior, data-gathering steps, deduplication, rendering rules, edge cases, and usage examples.

Changes

edge-ic:morning Skill Documentation

Layer / File(s) Summary
Configuration and output format references
plugins/edge-ic/references/MORNING_CONFIG_FORMAT.md, plugins/edge-ic/references/MORNING_OUTPUT_FORMAT.md
Documents the ~/.config/edge-ic/morning.yaml structure with all fields, required/default semantics, sections.\* toggles for QA tasks/review queue/RHEL verification, and supported date placeholder substitutions ({YYYY}, {MM}, {DD}, {YYYY-MM-DD}). Specifies block-pixel title banner and character map, complete multi-panel output template with placeholders for all sections, 60-column panel construction constraints, progress bar format (10-step red-to-green gradient with unfilled ), runtime formatting rules (empty-section omission, summary-line labeling, URL format, sprint urgency mapping), and the bottom error-notes panel with failure messages.
Skill metadata and setup wizard
plugins/edge-ic/skills/morning/SKILL.md (front-matter and Steps 0–1)
Defines skill front-matter with allowed tools (Jira MCP, GitHub, Bash), user-invocable: true, and --setup argument-hint. Documents config file discovery and YAML parse failure behavior. Specifies the interactive setup wizard that collects daily-notes enablement/path with today/yesterday existence validation, infers and confirms GitHub username and JIRA email, auto-discovers agile boards, captures toggles and filters for QA tasks (statuses, optional components), review queue, RHEL verification, and banner title, then writes the configuration to ~/.config/edge-ic/morning.yaml. Enforces parallel execution of Steps 2–8 after initialization.
Data gathering pipeline
plugins/edge-ic/skills/morning/SKILL.md (Steps 2–8)
Specifies eight conditional, optionally-parallel data-gathering steps with per-step enablement and failure handling. Step 2 gathers QA-ready JIRA issues (JQL with QA Contact currentUser() plus configured statuses, optional comment-scanning for request keywords when result set ≤3). Step 3 aggregates sprint backlog from active sprints (urgency computation for ≤3 days remaining, story point extraction with field fallback, grouping not-done issues by workflow status). Step 4 extracts yesterday's carry-over from daily notes (auto-format detection across org-mode/TODO/freeform, Monday lookback, macOS/BSD vs. Linux date handling). Step 5 fetches open PRs via gh search prs --author=@me``, filters by 200-day stale threshold, and counts unresolved review threads per PR using GitHub GraphQL. Step 6 retrieves PRs where user is review-requested with same stale filtering. Step 7 computes quarter-end using OS-specific date logic and emits reminders only within 14 days. Step 8 queries RHEL verification queue using Jira custom-field constraints with fixVersion and "Test Coverage is EMPTY" logic. All steps skip gracefully with error notes on upstream source failures.
Deduplication, rendering, and usage
plugins/edge-ic/skills/morning/SKILL.md (Steps 9–10 and examples)
Implements cross-section deduplication using a fixed priority order (QA Ready highest through RHEL Queue lowest), including detection of Jira keys embedded in carry-over text. Rendering pipeline loads the output-format reference and enforces rounded-box panel layout with 60-column constraints, renders always-present title banner and header panel with colored story-points progress bar (red-to-green, omitted when N/A), section panels in fixed order with empty-section omission, reminders panel with urgency and quarterly end logic, "Nothing on your plate" header-only fallback, and appended error-notes panel listing any skipped data sources. Includes CLI usage examples for /edge-ic:morning default invocation and /edge-ic:morning --setup forced wizard rerun.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~12 minutes


Caution

Pre-merge checks failed

Please resolve all errors before merging. Addressing warnings is optional.

  • Ignore

❌ Failed checks (1 error)

Check name Status Explanation Resolution
No-Sensitive-Data-In-Logs ❌ Error SKILL.md Step 1 contains echo "${JIRA_USERNAME:-}" which outputs the user's JIRA email address (PII) to stdout in an interactive setup prompt, potentially exposing it to shell history or terminal... Replace the echo statement with a masked display or secure prompt that doesn't expose the raw email to stdout/shell history, e.g., show only the domain or use a hidden input method.
✅ Passed checks (10 passed)
Check name Status Explanation
Title check ✅ Passed The title 'OCPEDGE-2768: feat(edge-ic): add /morning daily briefing skill' accurately and concisely summarizes the main change—introducing a new /morning skill for daily briefings.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
No-Weak-Crypto ✅ Passed PR adds only documentation files (MORNING_CONFIG_FORMAT.md, MORNING_OUTPUT_FORMAT.md, morning/SKILL.md). No weak crypto algorithms (MD5, SHA1, DES, RC4, 3DES, Blowfish, ECB), custom crypto implemen...
Container-Privileges ✅ Passed PR adds only documentation/configuration reference files for edge-ic:morning skill. No Kubernetes or container manifests present; check does not apply.
No-Hardcoded-Secrets ✅ Passed No hardcoded secrets, API keys, tokens, passwords, private keys, or suspicious base64 strings found. All sample data uses placeholder values (user@example.com, ghuser) or standard example domains.
No-Injection-Vectors ✅ Passed PR adds only documentation files with no injection vector vulnerabilities. User input escaping for JIRA JQL is explicitly documented (lines 121-122, 373).
Ai-Attribution ✅ Passed No mention of AI tool usage found in PR description, commit messages, or file contents; check not applicable as no AI attribution is required when AI usage is not disclosed.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 7

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@plugins/edge-ic/references/MORNING_CONFIG_FORMAT.md`:
- Around line 53-57: The `rhel_verification.enabled` configuration row is marked
as required (yes) in the MORNING_CONFIG_FORMAT.md table, but since it defaults
to false, it should be optional. Change the Required column value for the
`rhel_verification.enabled` row from "yes" to "no" to accurately reflect that
users can omit this configuration option unless they explicitly want to enable
RHEL verification.

In `@plugins/edge-ic/references/MORNING_OUTPUT_FORMAT.md`:
- Line 65: The progress bar in the template is being wrapped twice with the `▐`
and `▌` characters. The progress_bar variable is already defined with these
wrapper characters, but the template at line 65 wraps it again, creating double
wrapping `▐▐…▌▌`. Remove the outer `▐` and `▌` wrapper characters from around
the progress_bar placeholder in the template so it displays correctly as a
single wrapped bar. Apply the same fix to all similar occurrences mentioned in
lines 123-137 where the same double-wrapping issue exists.
- Around line 110-113: The content lines specification allows URLs and summaries
to overflow past the 60-column right border, which contradicts the strict
60-column guarantee established earlier in the document. In the content lines
description (currently stating that long content can overflow past the right
border), revise the wording to enforce that long content such as URLs and
summaries must be wrapped or truncated to maintain the 60-column alignment,
rather than being permitted to spill beyond the border.

In `@plugins/edge-ic/skills/morning/SKILL.md`:
- Around line 388-415: The Edge Cases and Gotchas sections are isolated from the
main workflow steps, which causes agents to miss critical failure handling
during execution. Integrate these notes directly into the relevant workflow
steps: merge the "No active sprint," "Board IDs not set," and "Legacy board_id
field" notes into Step 4 (where jira_get_sprints_from_board is called), merge
the "JIRA MCP unavailable" and story points field handling into Step 5, merge
the "PR dashboard unavailable" and run ID parsing notes into Step 7, and merge
the "macOS vs Linux date commands" note into Step 10. Place each failure policy
immediately before or after the relevant tool invocation so the agent encounters
the handling rules in context with the tool call.
- Around line 183-193: The bash code in the "Determine yesterday's workday"
section uses BSD/macOS-specific date syntax (date -v-*d) which will fail on
Linux systems. Replace this with portable date logic that works across both
Linux and macOS by detecting the operating system or using conditional date
syntax that handles both -d (GNU/Linux) and -v (BSD/macOS) flags. Include this
portable solution directly in the code block instead of deferring the
explanation to a separate Gotchas section. Apply the same portable date approach
to the equivalent code block referenced at lines 294-308.
- Around line 109-118: The JQL query construction in the morning skill is
vulnerable to injection attacks because configuration values like
jira.qa_statuses, jira.qa_components, rhel_verification.project,
rhel_verification.summary_filter, and rhel_verification.component are
interpolated directly into JQL strings without escaping. Implement JQL-compliant
string escaping (such as backslash-escaping special characters or using JQL
string literals) for all user-provided config values before they are substituted
into the JQL queries in both locations (lines 109-118 and lines 323-325). Create
a utility function or inline escaping logic that handles special characters like
quotes, asterisks, and backslashes before building the query strings.
- Around line 245-251: The `gh pr view` command uses the GitHub REST API, which
does not provide the `resolvedAt` field for tracking comment resolution state.
Replace this REST API query with a GraphQL query similar to the one already
correctly implemented in `plugins/pr-review/scripts/pr-comments.sh`. Query the
`reviewThreads` field from the GraphQL API and use the `isResolved` field at the
thread level to properly count unresolved review threads, rather than attempting
to use the non-existent `resolvedAt` field from the REST API response.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository YAML (base), Central YAML (inherited)

Review profile: CHILL

Plan: Enterprise

Run ID: bb367c61-f602-4787-8da2-526967feefb2

📥 Commits

Reviewing files that changed from the base of the PR and between b9b061f and c289b91.

📒 Files selected for processing (3)
  • plugins/edge-ic/references/MORNING_CONFIG_FORMAT.md
  • plugins/edge-ic/references/MORNING_OUTPUT_FORMAT.md
  • plugins/edge-ic/skills/morning/SKILL.md

Comment thread plugins/edge-ic/references/MORNING_CONFIG_FORMAT.md Outdated
Comment thread plugins/edge-ic/references/MORNING_OUTPUT_FORMAT.md Outdated
Comment thread plugins/edge-ic/references/MORNING_OUTPUT_FORMAT.md Outdated
Comment thread plugins/edge-ic/skills/morning/SKILL.md Outdated
Comment thread plugins/edge-ic/skills/morning/SKILL.md
Comment thread plugins/edge-ic/skills/morning/SKILL.md Outdated
Comment thread plugins/edge-ic/skills/morning/SKILL.md Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (2)
plugins/edge-ic/skills/morning/SKILL.md (2)

415-423: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Keep the notes panel when everything else is empty.

The Nothing on your plate branch reads like a terminal state, but line 417 still says upstream failures must surface in the notes panel. Make the header-only path conditional on "no items and no error notes" so failures don't disappear.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@plugins/edge-ic/skills/morning/SKILL.md` around lines 415 - 423, The
condition for displaying the header-only "Nothing on your plate" state is too
broad and contradicts the error notes requirement. Update the specification
around line 415 where it says "If all sections are empty" to be more specific:
the header-only view should only display when both all sections are empty AND no
error notes exist. This ensures that when data source failures occur, the error
notes panel is always visible even if there are no task items to display,
preventing failures from being silently hidden.

49-55: ⚠️ Potential issue | 🟡 Minor

Prompt for GitHub login explicitly if gh api user fails; don't use git config user.name.

The git config user.name fallback typically contains a display name, not the login. If the user accepts it, subsequent PR author filtering will fail because GitHub's HTML artifact uses login usernames. Ask the user directly instead.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@plugins/edge-ic/skills/morning/SKILL.md` around lines 49 - 55, The current
implementation uses git config user.name as a fallback when gh api user fails,
but this returns a display name rather than a login username, which will cause
GitHub filtering to fail later. Remove the git config user.name fallback from
the command chain and instead add explicit logic to prompt the user directly to
enter their GitHub login username if the gh api user command fails, ensuring the
value provided is the actual login identifier that GitHub uses.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@plugins/edge-ic/skills/morning/SKILL.md`:
- Around line 260-276: The GraphQL query for reviewThreads currently uses a
hardcoded first:100 parameter which will silently undercount unresolved reviews
on PRs with more than 100 threads. Fix this by either implementing cursor-based
pagination using pageInfo and endCursor to fetch all threads iteratively, or
simplify the query by removing the full nodes enumeration and using the
totalCount field instead to directly get the count of all review threads without
needing to fetch individual thread objects. Choose the simpler totalCount
approach unless you specifically need to filter threads by additional criteria
beyond resolution state.
- Around line 191-208: The capability check commands in the if statements are
outputting their date results to stdout before the actual assignment happens,
polluting the output. In both the macOS/BSD check (the if statement with date
-v-1d) and the Linux/GNU check mentioned at line 334, redirect stdout to
/dev/null in addition to the existing stderr redirection, so the probing
commands produce no output and only indicate success or failure through their
exit status.

---

Outside diff comments:
In `@plugins/edge-ic/skills/morning/SKILL.md`:
- Around line 415-423: The condition for displaying the header-only "Nothing on
your plate" state is too broad and contradicts the error notes requirement.
Update the specification around line 415 where it says "If all sections are
empty" to be more specific: the header-only view should only display when both
all sections are empty AND no error notes exist. This ensures that when data
source failures occur, the error notes panel is always visible even if there are
no task items to display, preventing failures from being silently hidden.
- Around line 49-55: The current implementation uses git config user.name as a
fallback when gh api user fails, but this returns a display name rather than a
login username, which will cause GitHub filtering to fail later. Remove the git
config user.name fallback from the command chain and instead add explicit logic
to prompt the user directly to enter their GitHub login username if the gh api
user command fails, ensuring the value provided is the actual login identifier
that GitHub uses.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository YAML (base), Central YAML (inherited)

Review profile: CHILL

Plan: Enterprise

Run ID: 83c7cb93-43ca-4fed-8540-0f81479ce5b9

📥 Commits

Reviewing files that changed from the base of the PR and between c289b91 and da1475c.

📒 Files selected for processing (3)
  • plugins/edge-ic/references/MORNING_CONFIG_FORMAT.md
  • plugins/edge-ic/references/MORNING_OUTPUT_FORMAT.md
  • plugins/edge-ic/skills/morning/SKILL.md
✅ Files skipped from review due to trivial changes (2)
  • plugins/edge-ic/references/MORNING_CONFIG_FORMAT.md
  • plugins/edge-ic/references/MORNING_OUTPUT_FORMAT.md

Comment thread plugins/edge-ic/skills/morning/SKILL.md
Comment thread plugins/edge-ic/skills/morning/SKILL.md Outdated
@lucaconsalvi lucaconsalvi marked this pull request as ready for review June 22, 2026 10:05
@openshift-ci openshift-ci Bot removed the do-not-merge/work-in-progress Indicates that a PR should not merge because it is a work in progress. label Jun 22, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (2)
plugins/edge-ic/skills/morning/SKILL.md (2)

255-298: ⚠️ Potential issue | 🔴 Critical

Fix 58 markdownlint violations and update the output format contract reference.

Per CONTRIBUTING.md, Markdown files must pass npx markdownlint-cli2 before committing. The file currently has 58 errors:

  • MD013/line-length: Lines 21, 38, 42, 48, 57, 69, 71, 77, 78, 82, 90, 105, 107, 113, 115, 118, 121, 129, 131, 133, 147, 149, 155, 168, 171, 174, 176, 181, 182, 195, 244, 246, 262, 265, 267, 282, 286, 306, 309, 311, 346, 364, 366, 371, 374, 385, 394, 400, 405, 407, 415, 416, 418, 420, 425, 429, 432 exceed 80 characters
  • MD034/no-bare-urls: Line 360 contains a bare URL that must be wrapped in markdown link syntax

Additionally, Step 5 sets days_idle and missing_labels to "?" but plugins/edge-ic/references/MORNING_OUTPUT_FORMAT.md (line 86) still documents the template placeholder as {labels} for missing labels. Either update MORNING_OUTPUT_FORMAT.md to explicitly show and explain the "?" placeholders in the template example, or refactor Step 5 to compute days_idle from the PR's createdAt timestamp and restore missing labels detection via an alternative data source.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@plugins/edge-ic/skills/morning/SKILL.md` around lines 255 - 298, Fix all 58
markdownlint violations in the SKILL.md file: break lines that exceed 80
characters (primarily affecting the gh command examples and descriptions in Step
5 and other sections) by rewrapping them to fit within the limit, wrap any bare
URLs in markdown link syntax (specifically the URL at line 360), and ensure all
markdown formatting complies with the markdownlint-cli2 standard. Additionally,
update the output format reference in
plugins/edge-ic/references/MORNING_OUTPUT_FORMAT.md to explicitly show and
explain that the days_idle and missing_labels fields now use "?" placeholders
instead of computed values, as documented in Step 5 where these fields are set
to "?" due to the CI dashboard no longer being fetched.

1-17: ⚠️ Potential issue | 🔴 Critical

Add Edge Cases section documenting failure modes and skip conditions.

Per SKILL-GUIDELINES.md, orchestrator skills (multi-step workflows like this one with Steps 0–10) must include an Edge Cases section to document failure modes, guard checks, skip behavior, and any conditional rendering logic. This section is currently missing.

The edge cases to document include:

  • Behavior when JIRA MCP fails for QA tasks, sprint backlog, or RHEL queue (steps already handle gracefully by recording error notes; document this)
  • Behavior when config file is missing or malformed (Step 1 recovery flow)
  • Behavior when daily notes file does not exist (Step 4 silently skips)
  • Carry-over item format detection failure (Step 4 fallback to freeform)
  • PR stale-filtering logic (200-day cutoff in Steps 5–6)
  • Deduplication behavior (Step 9) when the same ticket appears in multiple sections
  • Empty briefing output (Step 10 renders a calm message instead of empty panels)

Frontmatter verification passed: name field is correct (edge-ic:morning), description is 234 chars (under 1024 limit) and starts with action verb, allowed-tools comprehensively covers all tools invoked in steps 2–8 (Bash, Read, Write, WebFetch, AskUserQuestion, all jira_* endpoints), and file is 448 lines (under 500 warning threshold). Markdown lint validation passed.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@plugins/edge-ic/skills/morning/SKILL.md` around lines 1 - 17, The
edge-ic:morning skill is missing a required Edge Cases section as per
SKILL-GUIDELINES.md for orchestrator skills. Add an Edge Cases section to the
SKILL.md file that documents the seven failure modes and skip conditions:
behavior when JIRA MCP endpoints fail for QA tasks, sprint backlog, or RHEL
queue (graceful error handling); behavior when the config file is missing or
malformed with recovery flow details from Step 1; behavior when the daily notes
file does not exist causing Step 4 to silently skip; the carry-over item format
detection fallback to freeform; the PR stale-filtering logic using the 200-day
cutoff threshold from Steps 5-6; the deduplication behavior in Step 9 when
tickets appear across multiple sections; and the empty briefing output handling
in Step 10 that renders a calm message instead of empty panels. This section
should be placed in the SKILL.md file after the frontmatter block to document
all edge cases and conditional behavior throughout the workflow steps.

Source: Coding guidelines

🧹 Nitpick comments (2)
plugins/edge-ic/skills/morning/SKILL.md (2)

100-108: 🧹 Nitpick | 🔵 Trivial | 💤 Low value

Clarify the step numbering convention.

The file uses "Step 0" (implicit), "Step 1", then "Steps 2-8" (grouped), then "Step 9", "Step 10". While this structure is functionally clear, it's non-standard and may confuse readers unfamiliar with the file. Consider documenting the structure upfront or renumbering for clarity (e.g., explicitly calling out "Step 1: Config", "Steps 2–8: Parallel Data Gathering", "Step 9: Dedup", "Step 10: Render").

This is a low-priority readability improvement and not a blocker.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@plugins/edge-ic/skills/morning/SKILL.md` around lines 100 - 108, The step
numbering structure in the SKILL.md file is unclear and non-standard, using
implicit Step 0, Step 1, grouped Steps 2-8, then Step 9 and Step 10. Add an
upfront section documenting the overall workflow structure explicitly, and
update each step reference to include a clear descriptive phase label (e.g.,
"Step 1: Config Setup", "Steps 2–8: Parallel Data Gathering", "Step 9:
Deduplication", "Step 10: Render Output"). This will help readers understand the
logical flow and dependencies without confusion.

109-142: 🧹 Nitpick | 🔵 Trivial

Escaping is documented as an agent requirement, but design relies on agent compliance rather than code enforcement.

The instruction at line 121 directs the agent: "Before interpolating any config value into JQL, escape backslashes as \\ and double-quotes as \"." This is repeated at line 374 for rhel_verification.* values. However, this skill is an instruction document for an LLM agent — there is no separate escaping function in code. Security depends entirely on Claude following the text directive during execution.

Since this architecture uses agent-directed instructions rather than code-enforced validation, consider:

  • Document explicitly in SKILL.md what the agent must validate (not just what to do)
  • Add concrete examples showing malicious config that breaks JQL if unescaped (helps the agent recognize edge cases)
  • If higher assurance is needed, move JQL construction to a helper tool with built-in escaping rather than relying on agent instruction compliance

The current approach is acceptable if the agent reliably follows text instructions, but harder to verify at code review time.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@plugins/edge-ic/skills/morning/SKILL.md` around lines 109 - 142, The escaping
requirement in Step 2 (Query JIRA for QA tasks) relies on agent compliance
without explicit validation. Enhance the SKILL.md documentation by adding
concrete examples that show how unescaped config values (containing
double-quotes or backslashes) would break the JQL query and potentially cause
injection issues. Include a clear "Validation Checklist" section that explicitly
lists what the agent must verify before executing the jira_search call, such as
confirming that all config values from jira.qa_statuses and jira.qa_components
have been properly escaped. Additionally, repeat this guidance for the
rhel_verification section (around line 374) to maintain consistency across the
document.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Outside diff comments:
In `@plugins/edge-ic/skills/morning/SKILL.md`:
- Around line 255-298: Fix all 58 markdownlint violations in the SKILL.md file:
break lines that exceed 80 characters (primarily affecting the gh command
examples and descriptions in Step 5 and other sections) by rewrapping them to
fit within the limit, wrap any bare URLs in markdown link syntax (specifically
the URL at line 360), and ensure all markdown formatting complies with the
markdownlint-cli2 standard. Additionally, update the output format reference in
plugins/edge-ic/references/MORNING_OUTPUT_FORMAT.md to explicitly show and
explain that the days_idle and missing_labels fields now use "?" placeholders
instead of computed values, as documented in Step 5 where these fields are set
to "?" due to the CI dashboard no longer being fetched.
- Around line 1-17: The edge-ic:morning skill is missing a required Edge Cases
section as per SKILL-GUIDELINES.md for orchestrator skills. Add an Edge Cases
section to the SKILL.md file that documents the seven failure modes and skip
conditions: behavior when JIRA MCP endpoints fail for QA tasks, sprint backlog,
or RHEL queue (graceful error handling); behavior when the config file is
missing or malformed with recovery flow details from Step 1; behavior when the
daily notes file does not exist causing Step 4 to silently skip; the carry-over
item format detection fallback to freeform; the PR stale-filtering logic using
the 200-day cutoff threshold from Steps 5-6; the deduplication behavior in Step
9 when tickets appear across multiple sections; and the empty briefing output
handling in Step 10 that renders a calm message instead of empty panels. This
section should be placed in the SKILL.md file after the frontmatter block to
document all edge cases and conditional behavior throughout the workflow steps.

---

Nitpick comments:
In `@plugins/edge-ic/skills/morning/SKILL.md`:
- Around line 100-108: The step numbering structure in the SKILL.md file is
unclear and non-standard, using implicit Step 0, Step 1, grouped Steps 2-8, then
Step 9 and Step 10. Add an upfront section documenting the overall workflow
structure explicitly, and update each step reference to include a clear
descriptive phase label (e.g., "Step 1: Config Setup", "Steps 2–8: Parallel Data
Gathering", "Step 9: Deduplication", "Step 10: Render Output"). This will help
readers understand the logical flow and dependencies without confusion.
- Around line 109-142: The escaping requirement in Step 2 (Query JIRA for QA
tasks) relies on agent compliance without explicit validation. Enhance the
SKILL.md documentation by adding concrete examples that show how unescaped
config values (containing double-quotes or backslashes) would break the JQL
query and potentially cause injection issues. Include a clear "Validation
Checklist" section that explicitly lists what the agent must verify before
executing the jira_search call, such as confirming that all config values from
jira.qa_statuses and jira.qa_components have been properly escaped.
Additionally, repeat this guidance for the rhel_verification section (around
line 374) to maintain consistency across the document.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository YAML (base), Central YAML (inherited)

Review profile: CHILL

Plan: Enterprise

Run ID: 16c0077a-b9e9-4004-831d-268e619f990d

📥 Commits

Reviewing files that changed from the base of the PR and between cdae6fc and f286af4.

📒 Files selected for processing (1)
  • plugins/edge-ic/skills/morning/SKILL.md

@openshift-ci openshift-ci Bot added the ready-for-human-review Indicates a PR has been reviewed by automated tools and is ready for human review label Jun 22, 2026
lucaconsalvi and others added 18 commits June 25, 2026 09:47
…and story points

Three fixes from test-run findings:

1. QA section: use "QA Contact" (customfield_10470) instead of assignee
   to find tickets where user is the tester, not the developer. Remove
   the watch_statuses setup question — sprint backlog always shows
   non-Done tasks, no status filter needed.

2. Sprint backlog: use JQL search (assignee = currentUser() AND sprint =
   {id}) instead of jira_get_sprint_issues, which silently fails to
   paginate on large boards (100+ issues).

3. Story points: try customfield_10028 ("Story Points") first, then
   customfield_10016 ("Story point estimate"). The board uses 10028.

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

- Replace Calvin S box-drawing title with block pixel font (▀▄█ half-blocks)
- Replace emoji section markers (🟣🔵🔄📋👀🔧⏰) with ASCII » prefix
- Simplify border alignment: all borders now uniformly 60 raw chars
- Fix I glyph (was identical to T with ▀█▀ serifs, now single █ column)
- Update config format docs to match new title style

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- MORNING_CONFIG_FORMAT.md: mark rhel_verification.enabled as optional (no)
- MORNING_OUTPUT_FORMAT.md: remove double progress-bar wrapper (▐▐…▌▌ → single)
- MORNING_OUTPUT_FORMAT.md: clarify overflow rule — summaries wrap, URLs may extend
- SKILL.md: add JQL escaping note at both interpolation sites (QA + RHEL steps)
- SKILL.md: replace macOS-only date syntax with portable OS-detect at both call sites
- SKILL.md: replace REST resolvedAt with GraphQL reviewThreads.isResolved for unresolved PR count
- SKILL.md: inline Edge Cases and Gotchas into their respective workflow steps; remove separate sections

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
- J: add bottom hook (▀▄▄▀)
- L: trim base to 3-wide (▀▀▀)
- Q: add tail (▀▀▀▄) to distinguish from O
- X: fix bottom spread (▄▀ ▀▄) to mirror top

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
…s uses gh fallback

- Progress bar now explicitly represents story points completion, not sprint days elapsed
- Step 5 supplements CI dashboard with `gh search prs --author=@me` to catch recent PRs
  not yet indexed by the periodic notifier job; results are merged and deduplicated

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
…oard, lazy comment scan

- Instruct agent to batch all Steps 2-8 tool calls in a single turn for true parallelism
- Remove CI dashboard WebFetch (slow, periodic lag); gh search prs is now the sole PR source
- Skip per-ticket jira_get_issue comment scan when >3 QA tickets to avoid serial roundtrips

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
…panel by assignment

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
@lucaconsalvi lucaconsalvi force-pushed the feat/edge-ic-morning-skill branch from ccd0517 to 2e0bb36 Compare June 25, 2026 07:50
lucaconsalvi and others added 6 commits June 25, 2026 09:51
…ects, make configurable

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
…ngle-query sprint fetch

- Batch all PR review thread GraphQL calls into one query (N round-trips → 1)
- Combine authored + review-requested gh search into one Bash call
- Replace per-board sprint discovery with single openSprints() JQL query

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
…s for unassigned, inline rendering, drop GraphQL

- Split QA into two queries: your QA (limit 20) and unassigned (limit 10, requires qa_components)
- Without component filter, unassigned query returned 50+ tickets (~12k tokens) causing 6+ min render time
- Inline all rendering rules in Step 10, pre-render default title — no more reading output format reference
- Drop per-PR GraphQL review thread fetch entirely

Total execution time reduced from ~9min to ~2.5min.

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
…nd lists

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
LVMS plugin.json bump, README update, and run-integration-tests skill
were accidentally included. Revert them to match origin/main.

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
Accidentally included in earlier commit, belongs in a separate PR.

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

approved Indicates a PR has been approved by an approver from all required OWNERS files. ready-for-human-review Indicates a PR has been reviewed by automated tools and is ready for human review

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant