Skip to content

chore: sync workflow templates - #5645

Merged
stranske-keepalive[bot] merged 1 commit into
phase-3from
sync/workflows-0ab0029407c1
Jun 23, 2026
Merged

chore: sync workflow templates#5645
stranske-keepalive[bot] merged 1 commit into
phase-3from
sync/workflows-0ab0029407c1

Conversation

@stranske

@stranske stranske commented Jun 23, 2026

Copy link
Copy Markdown
Owner

Sync Summary

Files Updated

  • autofix.yml: Autofix workflow - automatically fixes lint/format issues
  • agents-issue-intake.yml: Issue intake - processes new issues for agent assignment
  • agents-80-pr-event-hub.yml: PR event hub - consolidates PR meta, bot comments, and verify-to-issue handlers
  • agents-81-gate-followups.yml: Gate followups hub - consolidates keepalive and autofix followups
  • agents-keepalive-sweep.yml: Keepalive sweep (Codex bootstrap for #1687 #2267) - periodic level-based resync; dispatches the loop for open agent PRs so silent zero-commit stalls resurface
  • agents-keepalive-loop-reporter.yml: Keepalive reporter - posts summary when keepalive run fails or cancels
  • agents-71-codex-belt-dispatcher.yml: Codex belt dispatcher - selects issues and creates agent branches for work
  • agents-72-codex-belt-worker.yml: Codex belt worker - executes agent on issues with full prompt and context
  • agents-72-codex-belt-worker-dispatch.yml: Codex belt worker dispatch wrapper - allows workflow_dispatch for the worker
  • agents-73-codex-belt-conveyor.yml: Codex belt conveyor - orchestrates belt worker execution and handles completion
  • agents-autofix-dispatcher.yml: Autofix dispatch bridge - acknowledges legacy Gate repository_dispatch events; agents-81-gate-followups handles repair work
  • agents-verifier.yml: Verifier - validates agent work meets acceptance criteria
  • list-llm-models.yml: List LLM Models - helper to show available models for verifier
  • agents-issue-optimizer.yml: Issue optimizer - LangChain-based issue formatting and optimization (Phase 1)
  • agents-verify-to-new-pr.yml: Verify to new PR - creates follow-up issue and immediately dispatches auto-pilot to prepare a replacement PR (bridge inlined)
  • agents-auto-label.yml: Auto-label - suggests/applies labels based on semantic matching (Phase 5A)
  • agents-capability-check.yml: Capability check - pre-flight agent feasibility gate (Phase 3A)
  • agents-decompose.yml: Task decomposition - breaks large issues into sub-tasks (Phase 3B)
  • agents-dedup.yml: Duplicate detection - flags similar open issues (Phase 3C)
  • agents-guard.yml: Agents guard - enforces agents workflow protections (Health 45)
  • agents-pr-health.yml: PR health scanner - periodic conflict resolution and failing check re-dispatch
  • agents-auto-pilot.yml: Auto-pilot - end-to-end automation orchestrator (format → optimize → agent → verify)
  • agents-weekly-metrics.yml: Weekly metrics - aggregates auto-pilot, keepalive, autofix and verifier metrics into summary reports
  • maint-coverage-guard.yml: Coverage guard - daily baseline monitoring with automatic issue creation
  • maint-76-claude-code-review.yml: Claude Code review (opt-in) - runs only on labeled PRs or manual dispatch
  • reusable-pr-context.yml: Reusable PR context workflow - centralized PR data fetching via GraphQL
  • backplane-conformance.yml: Backplane conformance caller stub - calls reusable-backplane-conformance.yml@main to validate a repo's emitted run-contract/v1 envelope (producer) or ingested object (consumer). No-op for non-participants (opt-in). Template lives under templates/consumer-repo/.github/workflows/.
  • keepalive_next_task.md: Keepalive prompt - instructs Codex on next task in PR
  • autofix_from_ci_failure.md: Autofix prompt - instructs Codex to fix CI/Gate failures
  • fix_ci_failures.md: CI fix prompt - general CI failure resolution instructions
  • fix_bot_comments.md: Bot comments prompt - instructs Codex to address bot review comments
  • verifier_acceptance_check.md: Verifier prompt - acceptance criteria validation
  • fix_merge_conflicts.md: Conflict resolution prompt - instructs Codex to resolve merge conflicts
  • sync_dev_dependencies.py: Syncs dev dependency versions from autofix-versions.env to pyproject.toml
  • check_agents_md_freshness.py: Warns when the generated Orchestrator AGENTS.md playbook section cites stale repo paths or commands
  • resolve_mypy_pin.py: Resolves mypy version pinning - required by reusable CI workflow
  • requirements-llm.txt: Pinned LLM dependencies - exact-sync guarded for agent workflows
  • coverage_trend.py: Generates coverage trend summaries - required by reusable CI workflow
  • coverage_guard.py: Checks coverage guard artifacts - required by maint-coverage-guard.yml
  • init.py: Tools package marker for Python helpers imported by synced workflows
  • ci_failure_triage.py: Classifies CI failure logs - required by pr-00-gate.yml summary generation
  • post_ci_summary.py: Builds consolidated Gate summary comments - required by pr-00-gate.yml
  • state_fingerprint.py: Computes workflow state fingerprints for unchanged-state skip gates
  • check_deliberate_break.py: Opt-in Gate helper that proves named deliberate-break acceptance tests fail against the base implementation
  • reference_packs.py: Validates and resolves reference pack configuration for shared runner prompt assembly
  • orchestrator_skill.py: Validates and resolves exported Orchestrator skill context for remote Codex lanes
  • runner_lib/ (3 files): Shared runner prompt assembly, output parsing, and dispatch debounce helpers
  • aggregate_agent_metrics.py: Aggregates downloaded weekly agent metrics - required by agents-weekly-metrics.yml
  • coverage_history_append.py: Appends coverage data to history file - required by reusable CI workflow
  • ci_metrics.py: Collects CI metrics for dashboard - required by reusable CI workflow
  • ci_history.py: Manages CI history data - required by reusable CI workflow
  • ci_coverage_delta.py: Computes coverage delta between runs - required by reusable CI workflow
  • reusable_ci_scope.py: Selects changed-input reusable CI scenarios - required by reusable CI workflows
  • sync_test_dependencies.py: Syncs test dependency pins - required by reusable CI workflow
  • check_test_dependencies.sh: Checks test dependencies match - required by reusable CI workflow
  • autopilot_step_timer.py: Emits step timing timestamps for auto-pilot workflows - required by agents-auto-pilot.yml
  • autopilot_metrics_collector.py: Collects and appends structured auto-pilot metrics to NDJSON log - required by agents-auto-pilot.yml
  • decode_raw_input.py: Decodes raw input from ChatGPT connector
  • parse_chatgpt_topics.py: Parses ChatGPT conversation into issue topics
  • fallback_split.py: Fallback topic splitting when parsing fails
  • detect-changes.js: Detects changed files for CI path-based filtering
  • agents-guard.js: Health 45 agents guard logic used by the workflow protections
  • coverage-normalize.js: Normalizes coverage data across different report formats
  • maint-post-ci.js: Post-CI maintenance tasks and cleanup
  • gate-docs-only.js: Gate check for docs-only changes to skip full CI
  • checkout_source.js: Source checkout utilities for CI workflows
  • package.json: Node package manifest for .github scripts (vendored minimatch)
  • registry.yml: Agent registry - source of truth for agent keys and runner workflow mapping
  • agent_registry.js: Agent registry helper - loads registry and resolves agent key from labels
  • agent_delegation_policy.js: Agent delegation policy - system-driven routing for agent:auto label
  • minimatch/ (53 files): Vendored minimatch dependency for .github scripts
  • brace-expansion/ (13 files): Vendored brace-expansion dependency (transitive dep of minimatch)
  • balanced-match/ (13 files): Vendored balanced-match dependency (transitive dep of brace-expansion)
  • issue_pr_locator.js: Locates PRs associated with issues
  • source_context.js: Classifies PR workflow source context for issue, local, automation, sync, Dependabot, review follow-up, and direct GitHub work
  • issue_context_utils.js: Utilities for issue context extraction
  • terminal_disposition.js: Machine-readable terminal disposition records and source summaries
  • terminal_disposition_coverage.js: Warning-only terminal disposition source coverage preflight
  • bot_comment_auth_coverage.js: Warning-only bot-comment App auth coverage preflight
  • coverage_monitor_summary.js: Machine-readable weekly coverage monitor checkpoint
  • weekly_metrics_artifacts.js: Bounded weekly metrics artifact selection contract
  • weekly_metrics_download_manifest.js: Weekly metrics artifact download and extraction manifest contract
  • issue_scope_parser.js: Parses issue scope and requirements
  • keepalive_instruction_template.js: Generates keepalive instructions for Codex
  • keepalive_loop.js: Core keepalive loop logic
  • token_load_balancer.js: Dynamic token load balancer for API rate limit management
  • keepalive_prompt_routing.js: Prompt routing logic for keepalive - determines which prompt template to use
  • keepalive_state.js: Keepalive state management
  • timeout_config.js: Timeout configuration parser for keepalive - required by keepalive_loop.js
  • keepalive_guard_utils.js: Guard utilities for keepalive state protection
  • keepalive_contract.js: Keepalive contract definitions and validation
  • keepalive_gate.js: Gate evaluation logic for keepalive workflow
  • keepalive_worker_gate.js: Worker gate logic for keepalive workflow
  • keepalive_orchestrator_gate_runner.js: Orchestrator gate runner for keepalive
  • keepalive_post_work.js: Post-work handling for keepalive rounds
  • keepalive_prompt_composer.js: Composes prompts for keepalive Codex calls
  • autopilot_metrics.js: AutoPilot metrics collection and reporting
  • auto_pilot_transitions.js: Auto-pilot transition contract and next-step helper
  • github-api-with-retry.js: GitHub API retry wrapper with exponential backoff and pagination support - required by agents-auto-pilot.yml
  • sync_tracker_state/ (1 files): Shared durable tracker and open PR state helpers for consumer sync workflows
  • github-rate-limited-wrapper.js: Transparent rate-limit proxy - wraps all github.rest.* calls with automatic retry and token switching
  • prompt_injection_guard.js: Security guard against prompt injection attacks
  • prompt_integrity_guard.js: Integrity validation for prompts
  • error_classifier.js: Classifies CI errors for agent handling
  • error_diagnostics.js: Diagnostic utilities for error analysis
  • failure_comment_formatter.js: Formats failure comments for PR status updates
  • conflict_detector.js: Conflict detector - identifies merge conflicts for targeted resolution
  • merge_manager.js: Manages PR merge operations
  • runtime_ac_merge_guard.js: Blocks external merge lanes for PRs that require local Orchestrator runtime acceptance checks
  • comment-dedupe.js: Deduplicates bot comments on issues/PRs
  • bot-comment-dismiss.js: Collects ignored bot review comments for auto-dismiss handling
  • bot-comment-handler.js: Bot comment handler logic - processes bot review comments for dispatch
  • autofix_emit_report.py: Emits autofix report - required by reusable-18-autofix.yml
  • gate_summary.py: Gate summary renderer - generates PR gate check summary
  • should-post-review.js: Evaluates whether a progress review comment should be posted
  • keepalive_review_guard.js: Guards against posting empty/null progress review comments
  • post_completion_comment.js: Posts completion comments on PRs
  • verifier_ci_query.js: Queries CI status for verifier workflow
  • verifier_issue_formatter.js: Formats issues for verifier output
  • verifier_verdict_json.py: Extracts structured post-merge verifier verdict JSON without trusting diff text
  • agents_orchestrator_resolve.js: Resolves agent orchestrator state
  • agents_pr_meta_keepalive.js: PR metadata handling for keepalive
  • agents_pr_meta_orchestrator.js: PR metadata orchestrator logic
  • agents_pr_meta_update_body.js: Updates PR body with agent metadata
  • agents_verifier_context.js: Context gathering for agent verifier
  • agents_dispatch_summary.js: Summarizes agent dispatch operations
  • agents_belt_scan.js: Scans agent belt for available tools
  • api_client.py: Shared GitHub API client used by synced Python automation scripts
  • issue_optimizer.py: Issue optimizer - analyzes issues and suggests improvements
  • structured_output.py: Shared structured output helpers for LangChain workflows
  • trace_utils.py: Shared LangSmith trace metadata helpers for LangChain workflows
  • _llm_client.py: Shared LangChain chat-client construction (get_llm_client/get_llm_clients)
  • verifier_config.py: Shared verifier prompt budgets, schema-repair policy, and terminal artifact validation
  • checklist_utils.py: Shared checklist parsing helpers for issue and follow-up generation
  • issue_formatter.py: Issue formatter - converts raw text to AGENT_ISSUE_TEMPLATE format
  • issue_pr_context.py: Issue/PR context assembly helper with shared token budget caps
  • issue_dedup.py: Issue deduplication - finds similar open issues
  • injection_guard.py: Prompt injection guard - validates prompts before LLM submission
  • progress_reviewer.py: Progress reviewer - evaluates agent progress for keepalive rounds
  • context_extractor.py: Context extractor - extracts relevant context from issues/PRs
  • semantic_matcher.py: Semantic matcher - vector similarity for issues/labels
  • capability_check.py: Capability check - pre-flight agent feasibility assessment
  • task_decomposer.py: Task decomposer - breaks large issues into sub-tasks
  • task_validator.py: Task validator - refines generated issue tasks for actionability
  • label_matcher.py: Label matcher - suggests labels based on semantic matching
  • pr_verifier.py: PR verifier - validates PR changes against acceptance criteria
  • integration_layer.py: Integration layer - coordinates LangChain components
  • topic_splitter.py: Topic splitter - splits conversations into discrete issues
  • format_issue.md: Prompt template for LLM-based issue formatting
  • analyze_issue.md: Prompt template for issue analysis/optimization
  • apply_suggestions.md: Prompt template for applying optimization suggestions
  • context_extract.md: Prompt template for context extraction
  • decompose_task.md: Prompt template for task decomposition
  • pr_evaluation.md: Prompt template for PR evaluation/verification
  • refine_tasks.md: Prompt template for task refinement and validation
  • verdict_extract.py: Verdict extractor - parses verification verdicts from LLM output
  • verdict_policy.py: Verdict policy engine - applies pass/fail rules to verification results
  • llm_provider.py: LLM provider configuration - GitHub Models and OpenAI client setup
  • langchain_client.py: LangChain client builder - multi-provider client with slot-based fallback and configuration
  • llm_registry.py: LLM model registry helper - shared slot/model selection and blocked-model enforcement
  • embedding_provider.py: Embedding provider registry used by synced semantic matching helpers
  • validate_run_contract.py: Validates a repo's emitted run-contract/v1 run envelope (producer/bridge) or ingested satellite object (consumer) against the canonical Workflows schemas + opt-in participant registry. Offline/deterministic; opt-in skip for non-participants. Synced so participants can validate locally and the reusable conformance gate can invoke it.
  • agents-guard.js: Guards against unauthorized agent workflow file changes
  • pr-context-graphql.js: GraphQL PR context fetcher - reduces 4+ REST calls to 1 GraphQL call
  • github-api-cache.js: Shared cache utilities for GitHub API requests used by PR context scripts
  • github-api-cache-client.js: Client wrapper for cached GitHub API requests
  • AGENT_INSTRUCTIONS.md: Agent instructions - base instructions for all Codex runs
  • copilot-instructions.md: Repository-specific instructions for GitHub Copilot
  • copilot-skills/ (4 files): Copilot skill definitions - patterns for CI, GitHub ops, etc.
  • keepalive-instruction.md: Keepalive instruction template - directives for Codex on each round
  • PULL_REQUEST_TEMPLATE.md: Pull request template with Workflow Source fields for direct GitHub and non-issue work
  • path-classification.yml: Path classification config used by the path-classifier composite action
  • agent-event-eligibility/ (2 files): Agent event eligibility action - early no-op gate for agent workflows
  • setup-api-client/ (2 files): Unified API client setup - installs @octokit deps and exports all load balancer tokens
  • resolve-default-branch/ (2 files): Resolves repository default branches for Workflows dual-checkout patterns
  • export-load-balancer-tokens/ (1 files): Export load balancer tokens action - required by reusable-10-ci-python.yml (deprecated, use setup-api-client)
  • path-classifier/ (2 files): Classifies changed PR paths for path-aware expensive job gating
  • artifact-cache/ (2 files): Restores, discovers, and caches workflow artifacts by daily, weekly, or run window
  • AGENT_ISSUE_FORMAT.md: Format specification for agent-compatible issues
  • CI_SYSTEM_GUIDE.md: Guide to the CI system for agents
  • LABELS.md: Label definitions and usage
  • CODEX_TOKEN_REFRESH.md: Codex OAuth token refresh guide
  • CLAUDE.md: Context file for Claude/AI assistants
  • agent-runner-output.md: Agent runner output contract specification - required for implementing new agent runners
  • SETUP_CHECKLIST.md: Consumer repo setup checklist. Includes the default_workflow_permissions=write step in section 3.3.1 that prevents a Gate startup_failure on fresh consumers (see [readiness] probe #2157). Synced so it no longer drifts across the fleet.
  • tokens.css: Design-system theme tokens (theme-air/theme-paper + density axis). Override tokens in an app stylesheet loaded after this; do not fork.
  • components.css: Design-system component layer (.ds): panels/appbar/kpis/tables/fields + presentation-state patterns (.notice, .empty-state, .badge, .skeleton).
  • ds_streamlit.py: Streamlit adapter for the design system (inject_theme/empty_state/notice/error/translate_error/dev_note/availability_badge/humanize_id) so Streamlit apps consume the same presentation patterns.
  • PRESENTATION_PATTERNS.md: The presentation-patterns standard (P1-P6): the rule behind each pattern + per-app-type application + the finding->pattern map from the 2026-06 UX-Review fleet baseline.
  • README.md: Design-system usage guide: how to apply the theme + components/kit per app type.
  • model_registry.json: Model registry - available LLM models and their capabilities
  • .gitattributes: Git attributes - merge strategies to prevent pr_body.md conflicts
  • agent_task.yml: Agent task issue template - structured format for agent-compatible issues
  • config.yml: Issue template chooser config - controls which templates appear in the UI
  • WORKFLOW_USER_GUIDE.md: Workflow user guide - explains the CI/agent system for repo consumers

Files Skipped

  • pr-00-gate.yml: File exists and sync_mode is create_only
  • ci.yml: File exists and sync_mode is create_only
  • renovate.json: File exists and sync_mode is create_only
  • cross-repo-smoke.yml: File exists and sync_mode is create_only
  • AGENTS.md: Repo keeps historical Agents.md casing to avoid case-only path conflicts
  • llm_slots.json: None

Review Checklist

  • CI passes with updated workflows
  • No repo-specific customizations were overwritten

Source: stranske/Workflows
Source SHA: 64a8012fcf61ffb010aed2c2f3e0e97f8766826c
Template hash: 0ab0029407c1
Sync branch: sync/workflows-0ab0029407c1
Consumer repo: stranske/Trend_Model_Project
Manifest: .github/sync-manifest.yml

Summary by CodeRabbit

  • New Features

    • Introduced a shared design system with reusable UI components and two theme options.
    • Added Streamlit integration providing design-system-aligned UI primitives (empty states, notices, error messages, badges).
  • Documentation

    • Added comprehensive design system documentation and presentation patterns guide.
  • Chores

    • Updated GitHub Actions workflow dependency.

Automated sync from stranske/Workflows
Template hash: 0ab0029407c1

Changes synced from sync-manifest.yml
@stranske stranske added sync Automated sync from Workflows automated Automated sync from Workflows labels Jun 23, 2026
@coderabbitai

coderabbitai Bot commented Jun 23, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

Introduces a staged shared design-system consisting of CSS token variables (tokens.css), a token-driven component stylesheet (components.css), a Streamlit adapter module (ds_streamlit.py), and two documentation files (README.md, PRESENTATION_PATTERNS.md). Separately repins the stranske/Workflows/.github/actions/setup-api-client external action to a new commit SHA in agents-guard.yml.

Changes

Design-System Staging Layer

Layer / File(s) Summary
CSS Token Foundation
design-system/tokens.css
Defines :root global tokens (spacing, radius, fonts), a .density-compact axis that tightens spacing and font sizes, and two theme classes (.theme-air, .theme-paper) with full palette, border, accent, and semantic status color variables.
Token-driven Component Stylesheet
design-system/components.css
Adds all UI components scoped under .ds: base typography, panel/appbar/KPI-card/grid layout, table/form/input/button variants, and presentation-state patterns (.notice with info/warn/error/ok variants, .empty-state, .badge, .skeleton with shimmer animation).
Streamlit Adapter and Presentation Helpers
design-system/ds_streamlit.py
Adds inject_theme, empty_state, notice, error, translate_error, dev_note, availability_badge, and humanize_id as the Streamlit-native kit that surfaces tokens/components to Streamlit apps.
Design-System Docs and Rollout Specification
design-system/README.md, design-system/PRESENTATION_PATTERNS.md
README documents themes, usage, file catalog, and graduation workflow; PRESENTATION_PATTERNS.md defines six patterns (P1–P6), a finding→pattern map, Streamlit kit spec, and a phased rollout sequence.

Workflow Action SHA Repin

Layer / File(s) Summary
agents-guard.yml SHA repin
.github/workflows/agents-guard.yml
Updates the pinned commit SHA for stranske/Workflows/.github/actions/setup-api-client in both the pull_request_target and pull_request fallback steps from c2537cc959f2ce05926c4639d25b90678abc97bc to 62ed0a86b5d57062ac3d04f4519e3998858e2d96.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~15 minutes

Possibly related PRs

  • stranske/Trend_Model_Project#5602: Modifies the same "Workflows fallback" step in agents-guard.yml to repin the identical stranske/Workflows/.github/actions/setup-api-client external action SHA.
  • stranske/Trend_Model_Project#5604: Also updates the pinned stranske/Workflows/.github/actions/setup-api-client commit hash in agents-guard.yml, the same pattern as this PR.
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 inconclusive)

Check name Status Explanation Resolution
Title check ❓ Inconclusive The title 'chore: sync workflow templates' is vague and overly broad. While technically accurate, it fails to capture the substantial design system additions (tokens.css, components.css, ds_streamlit.py, PRESENTATION_PATTERNS.md) that represent a significant portion of the changeset. Consider a more specific title that reflects the primary changes, such as 'chore: sync workflow templates and add design system foundations' to better represent the full scope of the PR.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.
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.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch sync/workflows-0ab0029407c1

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

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 8339c3635e

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +91 to +94
st.markdown(
f"<div class='ds-empty'><div style='font-size:22px;opacity:.6'>{icon}</div>"
f"<div class='t'>{title}</div><div class='d'>{desc}</div></div>",
unsafe_allow_html=True,

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Escape dynamic text before unsafe Streamlit HTML

When callers pass values derived from data, filenames, or user input into title, desc, or icon, these strings are interpolated directly into a block rendered with unsafe_allow_html=True, so embedded HTML/CSS can be rendered and can break or spoof the surrounding UI. Escape the dynamic fields before concatenating the fixed wrapper markup; the same treatment is needed for the notice helper's dynamic text.

Useful? React with 👍 / 👎.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 3

🤖 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 `@design-system/ds_streamlit.py`:
- Around line 33-44: The color constants defined in ds_streamlit.py (lines
33-44) such as _INK, _ACCENT, _NEG, _WARN, _POS, and others are hardcoded
duplicates of the theme-air palette from tokens.css, creating a maintenance
burden and risk of divergence. As a short-term measure, add a section to the
project's README.md documenting this as a known limitation, explicitly noting
that the Python color constants must be manually kept in sync with tokens.css
when design tokens are updated, and mention that this will be addressed in the
future through automated generation or a shared tokens source.

In `@design-system/PRESENTATION_PATTERNS.md`:
- Around line 77-86: The P4 pattern specification in PRESENTATION_PATTERNS.md
references a diagnostics_expander() function that does not exist in
ds_streamlit.py. Currently, only the dev_note() function is implemented, which
logs to Python's logger but does not render UI elements. You need to either add
the missing diagnostics_expander() function to ds_streamlit.py as a helper that
wraps st.expander() to display a collapsible diagnostics panel in the Streamlit
UI, or update the spec documentation to clarify that dev_note() only handles
logging and that applications must implement their own expander pattern
separately. Ensure consistency between the documented API and the actual
implementation to avoid confusion for teams using the design kit.

In `@design-system/tokens.css`:
- Line 29: The --font-body custom property on line 29 and another font stack on
line 74 contain unquoted font names with mixed casing (BlinkMacSystemFont,
Roboto, Helvetica, Arial, Georgia) which violates stylelint's value-keyword-case
rule. Fix this by quoting all the font names that have mixed casing, for example
converting BlinkMacSystemFont to "BlinkMacSystemFont", Roboto to "Roboto",
Helvetica to "Helvetica", Arial to "Arial", and Georgia to "Georgia". This
ensures the font names are properly quoted to avoid parsing ambiguity and
complies with stylelint expectations.
🪄 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: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: c97c7564-8c5f-4cff-a6ee-9e3292942f93

📥 Commits

Reviewing files that changed from the base of the PR and between 2f547cc and 8339c36.

📒 Files selected for processing (6)
  • .github/workflows/agents-guard.yml
  • design-system/PRESENTATION_PATTERNS.md
  • design-system/README.md
  • design-system/components.css
  • design-system/ds_streamlit.py
  • design-system/tokens.css
🔗 Linked repositories identified

CodeRabbit considers these linked repositories for cross-repo context during reviews:

  • stranske/Workflows (auto-detected)
  • stranske/Template (auto-detected)
📜 Review details
⏰ Context from checks skipped due to timeout. (3)
  • GitHub Check: Python CI / typecheck-mypy
  • GitHub Check: Python CI / lint-ruff
  • GitHub Check: claude-review
🧰 Additional context used
📓 Path-based instructions (5)
{pyproject.toml,.github/workflows/**/*.{yml,yaml}}

📄 CodeRabbit inference engine (.github/copilot-instructions.md)

Check both pyproject.toml ([tool.coverage.report] fail_under) AND workflow files for coverage-min settings - these must match or the lower one wins

Files:

  • .github/workflows/agents-guard.yml
.github/workflows/**/*.{yml,yaml}

📄 CodeRabbit inference engine (.github/copilot-instructions.md)

For startup_failure GitHub Actions workflow errors with zero jobs, check for common causes: Invalid YAML syntax, top-level permissions: block on workflow_call reusable workflows (conflicts with caller permissions), invalid permission scopes, or circular workflow references

Files:

  • .github/workflows/agents-guard.yml
.github/workflows/*.yml

📄 CodeRabbit inference engine (CLAUDE.md)

Reference reusable workflows in .github/workflows/*.yml files with @main unless intentionally pinning to an exact commit SHA for a controlled reason

Files:

  • .github/workflows/agents-guard.yml
{.github/workflows/agents-*.yml,.github/workflows/autofix.yml,.github/codex/**/*}

📄 CodeRabbit inference engine (CLAUDE.md)

Synced workflows (agents-*.yml, autofix.yml), prompts in .github/codex/, and synced scripts/docs should be fixed in stranske/Workflows source, not locally in the consumer repo

Files:

  • .github/workflows/agents-guard.yml
**/*.py

📄 CodeRabbit inference engine (.github/copilot-instructions.md)

For Manager-Database repository: Use Prefect 2.x - import schedules from prefect.client.schemas.schedules

Files:

  • design-system/ds_streamlit.py
🪛 markdownlint-cli2 (0.22.1)
design-system/PRESENTATION_PATTERNS.md

[warning] 16-16: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below

(MD022, blanks-around-headings)


[warning] 22-22: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below

(MD022, blanks-around-headings)


[warning] 30-30: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below

(MD022, blanks-around-headings)


[warning] 39-39: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below

(MD022, blanks-around-headings)


[warning] 46-46: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below

(MD022, blanks-around-headings)


[warning] 54-54: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below

(MD022, blanks-around-headings)


[warning] 77-77: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below

(MD022, blanks-around-headings)


[warning] 88-88: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below

(MD022, blanks-around-headings)

🪛 Stylelint (17.13.0)
design-system/tokens.css

[error] 29-29: Expected "BlinkMacSystemFont" to be "blinkmacsystemfont" (value-keyword-case)

(value-keyword-case)


[error] 29-29: Expected "Roboto" to be "roboto" (value-keyword-case)

(value-keyword-case)


[error] 29-29: Expected "Helvetica" to be "helvetica" (value-keyword-case)

(value-keyword-case)


[error] 29-29: Expected "Arial" to be "arial" (value-keyword-case)

(value-keyword-case)


[error] 74-74: Expected "Georgia" to be "georgia" (value-keyword-case)

(value-keyword-case)

🔇 Additional comments (3)
.github/workflows/agents-guard.yml (1)

114-114: LGTM!

Also applies to: 183-183

design-system/components.css (1)

1-96: LGTM!

design-system/ds_streamlit.py (1)

54-75: 🩺 Stability & Availability | ⚡ Quick win

Verify Streamlit version pinning and CSS injection approach.

The inject_theme() function injects inline CSS via st.markdown(..., unsafe_allow_html=True). This approach is correct for Streamlit, but:

  1. Verify that Streamlit 1.58.0 (from library_context) is the declared runtime in the consumer repo's pyproject.toml or equivalent.
  2. Confirm that the CSS class names (.ds-badge, .ds-notice, .ds-empty, .block-container) will not conflict with Streamlit's internal styles.

If the consumer repo declares a different Streamlit version, this may need version-specific adjustments.

Comment on lines +33 to +44
# Ink & Air (theme-air) palette — keep in sync with tokens.css .theme-air.
_INK = "#0a0a0a"
_MUTED = "#737373"
_ACCENT = "#4f46e5"
_BORDER = "#ececec"
_NEG = "#dc2626"
_NEG_WEAK = "#fef2f2"
_WARN = "#b45309"
_WARN_WEAK = "#fffbeb"
_INFO_WEAK = "#f4f3ff"
_POS = "#047857"
_POS_WEAK = "#ecfdf5"

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🗄️ Data Integrity & Integration | 🟠 Major | 🏗️ Heavy lift

Hardcoded color constants duplicate tokens.css values; breaks single-source-of-truth model.

Lines 34–44 define color constants (_INK, _ACCENT, _NEG, _WARN, _POS, etc.) that mirror the theme-air palette in tokens.css. The inline comment "keep in sync with tokens.css .theme-air" acknowledges the maintenance burden, but there's no automated enforcement.

If a designer updates a token in tokens.css, the Python constants become stale and the Streamlit UI will diverge from the web UI (theme-paper, components.css). This breaks the design-system's single-source-of-truth guarantee.

Options to fix:

  1. Preferred: Generate Python constants from tokens.css at build time (e.g., via a script that parses CSS variables and emits a _gen_colors.py).
  2. Interim: Move color definitions to a shared tokens.json file; import both CSS and Python from it.
  3. Minimal: Add a pre-commit hook or CI check that validates the constants match the CSS source.

For now, document this as a known limitation in README.md so maintainers are aware.

🤖 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 `@design-system/ds_streamlit.py` around lines 33 - 44, The color constants
defined in ds_streamlit.py (lines 33-44) such as _INK, _ACCENT, _NEG, _WARN,
_POS, and others are hardcoded duplicates of the theme-air palette from
tokens.css, creating a maintenance burden and risk of divergence. As a
short-term measure, add a section to the project's README.md documenting this as
a known limitation, explicitly noting that the Python color constants must be
manually kept in sync with tokens.css when design tokens are updated, and
mention that this will be addressed in the future through automated generation
or a shared tokens source.

Comment on lines +77 to +86
## Streamlit design kit (most of the fleet is Streamlit)
The CSS components above cover the web apps (Pension-Data, trip-planner, LMS). The four Streamlit
Tier-A apps need a Streamlit-native equivalent — ship a shared `ds_streamlit.py` alongside the CSS:
- `inject_theme()` — applies the `theme-air` palette (P1); pairs with `.streamlit/config.toml`.
- `empty_state(title, desc, cta_label=None, on_click=None)` (P2)
- `notice(kind, title, body, action=None)` and `error(message, remediation=None)` + `translate_error(exc)` (P3)
- `dev_note(msg)` → logging; `diagnostics_expander()` (P4)
- `availability_badge(label)` (P5)
- `humanize_id(raw, mapping)` (P6)
Graduate this kit + the CSS into `Workflows/templates/consumer-repo/design-system/` so maint-68 syncs it fleet-wide.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

P4 spec references diagnostics_expander() function not in ds_streamlit.py.

Line 83 states: "Streamlit: ds_streamlit.dev_note(msg)logging (not st.warning/st.write); diagnostics behind st.expander("Diagnostics")."

However, ds_streamlit.py only implements dev_note() (line 153), which logs to Python's logger. There is no diagnostics_expander() function to render a collapsible diagnostics panel in the Streamlit UI.

Either:

  1. Add the function to ds_streamlit.py: a helper that wraps st.expander() and logs/displays diagnostic info.
  2. Update the spec to clarify that apps must implement their own expander pattern (dev_note just logs, doesn't render).

The P4 pattern will be incomplete until this is resolved.

Would you like me to generate the missing diagnostics_expander() function for ds_streamlit.py?

🧰 Tools
🪛 markdownlint-cli2 (0.22.1)

[warning] 77-77: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below

(MD022, blanks-around-headings)

🤖 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 `@design-system/PRESENTATION_PATTERNS.md` around lines 77 - 86, The P4 pattern
specification in PRESENTATION_PATTERNS.md references a diagnostics_expander()
function that does not exist in ds_streamlit.py. Currently, only the dev_note()
function is implemented, which logs to Python's logger but does not render UI
elements. You need to either add the missing diagnostics_expander() function to
ds_streamlit.py as a helper that wraps st.expander() to display a collapsible
diagnostics panel in the Streamlit UI, or update the spec documentation to
clarify that dev_note() only handles logging and that applications must
implement their own expander pattern separately. Ensure consistency between the
documented API and the actual implementation to avoid confusion for teams using
the design kit.

Comment thread design-system/tokens.css
--radius: 10px; --radius-sm: 8px; --btn-radius: 8px; --input-radius: 8px;

/* ---- type ---- */
--font-body: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Font names must be lowercase per stylelint's value-keyword-case rule.

Lines 29 and 74 use unquoted font names (BlinkMacSystemFont, Roboto, Helvetica, Arial, Georgia) with mixed casing. Stylelint expects them to be lowercase. This will cause lint failures in CI.

Fix: either quote the font names (e.g., "Roboto", "Georgia") or convert them to lowercase. System font names in font-stacks should typically be quoted to avoid parsing ambiguity anyway.

🔤 Proposed fix: quote font names
- --font-body: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
- --font-heading: var(--font-body);
+ --font-body: -apple-system, "BlinkMacSystemFont", "Segoe UI", "Roboto", "Helvetica", "Arial", sans-serif;
+ --font-heading: var(--font-body);

And for theme-paper:

- --font-heading: Georgia, "Times New Roman", serif;
+ --font-heading: "Georgia", "Times New Roman", serif;

Also applies to: 74-74

🧰 Tools
🪛 Stylelint (17.13.0)

[error] 29-29: Expected "BlinkMacSystemFont" to be "blinkmacsystemfont" (value-keyword-case)

(value-keyword-case)


[error] 29-29: Expected "Roboto" to be "roboto" (value-keyword-case)

(value-keyword-case)


[error] 29-29: Expected "Helvetica" to be "helvetica" (value-keyword-case)

(value-keyword-case)


[error] 29-29: Expected "Arial" to be "arial" (value-keyword-case)

(value-keyword-case)

🤖 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 `@design-system/tokens.css` at line 29, The --font-body custom property on line
29 and another font stack on line 74 contain unquoted font names with mixed
casing (BlinkMacSystemFont, Roboto, Helvetica, Arial, Georgia) which violates
stylelint's value-keyword-case rule. Fix this by quoting all the font names that
have mixed casing, for example converting BlinkMacSystemFont to
"BlinkMacSystemFont", Roboto to "Roboto", Helvetica to "Helvetica", Arial to
"Arial", and Georgia to "Georgia". This ensures the font names are properly
quoted to avoid parsing ambiguity and complies with stylelint expectations.

Source: Linters/SAST tools

@stranske-keepalive
stranske-keepalive Bot merged commit e8b376a into phase-3 Jun 23, 2026
82 of 90 checks passed
@stranske-keepalive
stranske-keepalive Bot deleted the sync/workflows-0ab0029407c1 branch June 23, 2026 06:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

automated Automated sync from Workflows sync Automated sync from Workflows

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant