Good First Issues in Ruby
Explore curated starter issues in high-scoring Ruby repositories. Every listed issue belongs to a welcoming repository scored by C-Rank™ on PR merge rates, review responsiveness, and first-timer acceptance.
Arm Issue Sniper for fresh Ruby beginner issues
Beginner issues in welcoming S/A-Tier repositories get snatched within 15 minutes. Receive instant alerts on Discord, Telegram, or Email the minute a maintainer opens a new task.
Live Good First Issues (30)
Real-Time Open GitHub Issueshttps://regional.rubykaigi.org/nagoya05/ https://x.com/kamipo/status/2102513925975888238
https://regional.rubykaigi.org/hokuriku02/
概要 プラクティスの「所要時間の目安」の説明文を、意味を保ったまま読みやすくする。 修正内容 修正前:人によっては時間のかかり方は様々です。この数字はあくまで一つの目安として捉えてください。 修正後:かかる時間は人によって異なります。この数字はあくまで一つの目安として捉えてください。 対象ファイル app/views/practices/show.html.slim の62行目 現在の状態と作業範囲 対象の説明文は、現在 Slim のコメントアウトされたブロック内にある。この Issue では既存の文言のみ修正し、コメントアウトの解除や画面への再表示は行わない。 完了条件 上記の説明文が修正されている。 差分を確認し、コメントアウトやインデント、表示条件に変更がないことを確認する。
概要 アドバイザー向け登録メールの助詞を修正する。 修正内容 修正前:コメントも自由ですることができますので、 修正後:コメントも自由にすることができますので、 対象ファイル app/views/user_mailer/_adviser.html.slim の11行目 完了条件 「自由でする」が「自由にする」に修正されている。 差分を確認し、文言以外に変更がないことを確認する。 メールの送信処理や宛先、その他の案内内容は変更しない。
概要 質問を削除するときの確認メッセージにある誤字を修正する。 修正内容 修正前:この質問を解決することを即すようにしてください。 修正後:この質問を解決することを促すようにしてください。 対象ファイル app/views/questions/_question_body.html.slim の18行目 完了条件 「即す」が「促す」に修正されている。 ローカル環境でメンターとして質問詳細を開き、「削除する」を押して確認ダイアログの文言を確認する。確認後はキャンセルする。 文言のみの修正とし、削除処理や表示条件は変更しない。
概要 メンター向けのコーディングテスト並び替え画面の見出しに「プラクティクス」と表示されています。同じ画面のページタイトルやアプリ内の表記に合わせて「プラクティス」に修正してください。 受け入れ条件 画面の見出しが「(プラクティス名)プラクティスのコーディングテスト並び替え」と表示される 他の画面文言や並び替えの動作に影響がない 関連コード app/views/mentor/practices/coding_tests/index.html.slim:18
Is there an existing issue for this? I have searched the existing issues Package ecosystem Helm (package-ecosystem: helm) Package manager version Dependabot CLI v1.93.0, updater image ghcr.io/dependabot/dependabot-updater-helm@sha256:bb4961986f6a76b68456f67ad2aadd589ec9c70f73b44393b11d7d237eaaefa5 Manifest location and content before the Dependabot update Any values file whose image sits inside a list. That is the shape of every pod template passed through values, for example the gha-runner-scale-set chart's runner container: template: spec: containers: - name: runner image: ghcr.io/actions/actions-runner:2.335.1 dependabot.yml content version: 2 updates: - package-ecosystem: helm directory: /deploy/infrastructure/runners/base schedule: interval: weekly What you expected to see, versus what you actually saw Expected: an image inside a list is detected and updated, the same as an image at a map path. Actual: it is never detected. With the reproduct
Is there an existing issue for this? I have searched the existing issues Feature description Summary For pip, Poetry, pipenv, pip-compile, and uv, Dependabot security updates cannot fix a vulnerable transitive dependency when a direct dependency caps it. The update fails with update_not_possible ("One or more other dependencies require a version that is incompatible with this update"). The updater's unlock ladder in updater/lib/dependabot/updater/operations/create_security_update_pull_request.rb would try requirements_to_unlock: :all next, but Dependabot::Python::UpdateChecker#latest_version_resolvable_with_full_unlock? is hardcoded to false and #updated_dependencies_after_full_unlock raises NotImplementedError. Dependabot::Uv::UpdateChecker inherits both. I'm requesting that the Python checker implement full unlock, so that a security update can raise the capping parent's constraint together with the transitive fix, the way npm has done since 2022. History The stub dates to Decembe
Huginn currently has no translations. UI strings in views and helpers are hard-coded in English, and config/locales/en.yml only holds a handful of keys for Devise and distance_in_words. Contributed locale files such as #3687 (Korean) therefore cannot change what users see yet. The goal is to let translations be added as gems, in the same way Agents can be added through ADDITIONAL_GEMS, so that each language can be maintained by its own community on its own schedule. This is a good first contribution: the work can be split into small, self-contained pull requests, each of which is useful on its own. Replace hard-coded strings in a view or helper with t(...) calls and add the English keys to config/locales/en.yml. One view per PR is fine. Load locale files from add-on gems, for example through config.i18n.load_path. Let the locale be chosen per instance (an environment variable) and later per user. Document how to publish a translation gem. Agent descriptions and option hints ar
Currently, the Wikidata stats card shown for courses that have Wikidata edits is pretty overpowering, in terms of the layout and design. A few independent changes would help to start out with: It should be collapsible, and collapsed by default for courses where the home wiki is not Wikidata. All entries with 0 edits should not be rendered, and the entire category should not be rendered if all the entries within are 0. (Relatedly, a more complete design refresh is still wanted: #6877 )
Current Behavior: Currently, admins have access to a "Manage course flags" view that easily allow them to set needs_update to 1 for a given course. That's a good way to force a new full update for historical courses that ended more than 30 days ago and won't be queued automatically again otherwise. The problem with this is that, after a full update, pageviews are always zero. This is undesirable but it's expected due to a circular dependency between updating average pageviews, and updating caches. See PR #6456 Desired Behavior: Admins should be provided with a way for enqueuing a non-full update for a historical course, so that the pageviews gets populated. I usually do that by manually updating the course_wiki_timeslices table and set an empty timeslice with needs_update to 1. That makes the course to be queued again for a "normal" update so pageviews metrics are calculated. But ideally we should have a cleaner way of doing that, maybe having an admin view to manually enqueue an upda
Spec requirement The stdout exporter SHOULD pair with a periodic exporting MetricReader using a default exportIntervalMilliseconds of 10000 for this exporter specifically (sdk_exporters/stdout.md:40-46). Current behavior configurator_patch.rb:37 (permalink) wires ConsoleMetricPullExporter into a PeriodicMetricReader.new(exporter: ...) correctly, but PeriodicMetricReader's interval defaults to OTEL_METRIC_EXPORT_INTERVAL/60000 (export/periodic_metric_reader.rb:25 (permalink)), the general default — nothing special-cases the console exporter's interval to 10000ms. Suggested fix When wiring the console exporter's default PeriodicMetricReader in configurator_patch.rb, pass export_interval_millis: 10_000 explicitly rather than relying on the general-purpose default. Related rows in SPEC_COMPLIANCE_METRICS.md STDOUT-3
Spec requirement The OTEL_EXPORTER_OTLP_METRICS_DEFAULT_HISTOGRAM_AGGREGATION env var (explicit_bucket_histogram/base2_exponential_bucket_histogram, default explicit_bucket_histogram) SHOULD be supported (sdk_exporters/otlp.md:43-70). Current behavior The default (ExplicitBucketHistogram, instrument/histogram.rb (permalink) default aggregation) is correct, but the env var itself is never read in exporter/otlp-metrics or metrics_sdk. A user can't switch the default to exponential histograms via configuration, only by explicitly registering a View. Suggested fix Read OTEL_EXPORTER_OTLP_METRICS_DEFAULT_HISTOGRAM_AGGREGATION in the OTLP exporter or metrics_sdk configurator, and use it to select the default histogram aggregation when no View overrides it. Related rows in SPEC_COMPLIANCE_METRICS.md OTLP-3
Spec requirement Instrument names are case-insensitive; a second registration differing only by case MUST reuse the first-seen name and log a message (sdk.md:1017-1031). Current behavior @instrument_registry is a plain Ruby Hash keyed by the literal (case-sensitive) name string (meter.rb:32,258-260 (permalink)), so create_counter("requestCount") followed by create_counter("RequestCount") registers two independent instruments instead of being detected as the same name under case-insensitive comparison. Suggested fix Normalize the registry key (e.g. downcase) when checking for an existing instrument, while preserving and reusing the first-seen name's original casing, and log a message on the case-differing collision. Related rows in SPEC_COMPLIANCE_METRICS.md SDK-37
概要 Redirection は、リソースのWIP状態に応じて保存後の遷移先URLを返すクラスである。 現在のクラス名からは具体的な責務が分かりにくく、公開メソッドの determin_url にもスペルミスがある。 クラス名とメソッド名を実際の責務に合った名前へ変更する。遷移先など、アプリケーションの挙動は変更しない。 背景 Redirection#determin_url は、次の条件でURLを返している。 リソースがWIPの場合は編集画面のURL WIPでない場合は詳細画面のURL Redirection という名前では、リダイレクトを実行するクラスなのか、URLを生成するクラスなのか判断しにくい。また、determin_url は英語としては determine_url であり、正しいスペルでコードを検索できない。 この処理は提出物、Q&A、イベント、Docs、動画、ペアワークなど複数のコントローラから利用されているため
概要 MarkdownHelper に、現在の検索処理では使用されていない検索補助メソッドが残っている。 未使用になったメソッドを削除し、MarkdownHelper の責務をMarkdown変換に関する処理へ整理する。 アプリケーションの挙動は変更しない。 背景 MarkdownHelper には process_special_case と find_match_in_text が定義されているが、現在の検索処理では SearchHelper に定義された同名メソッドが使用されている。 MarkdownHelper#process_special_case を呼び出している箇所はなく、そこからのみ呼び出される find_match_in_text も使用されていない。 なお、process_markdown_case は別の死蔵コード整理の対象になっているため、本Issueには含めない。 対象ファイル app/helpers/markdown_helper.rb 対応内容 MarkdownHelper#process_special_case を削除する MarkdownHelper#find_match_in_text を削除する SearchHelper の検索結
One place for the open documentation requests, so the individual issues (some from mid-2025) can be closed as duplicates of this list. Check items off as pages land; every code example in the docs should come from a tested file under test/ per contributing/documentation. Guides and sections Generative UI section (#68). How agents render HTML/Turbo responses from action views. Multi-agent workflows and interactions (#87). Examples of agents calling agents, supervisors, and hand-offs. More output and usage examples (#132). Response shapes, response.message, structured output, embeddings. Tool usage and caching (#174). Tool-call round trips, tools_function, and provider caching options. Model supported actions (#195). Document and test which providers/models support tools, structured output, streaming, and multimodal input. MCP as tools: tests, docs, examples (#208). Both the Anthropic and OpenAI mcps: shapes, allowed_tools / require_approval, and the engine's /mcp facade. OpenTel
unused 0.4.0 reported the following 19 high-likelihood candidates across 9 files. These are suggestions requiring manual verification, not confirmed dead code. Findings spec/models/error_report_spec.rb API_VERSION bin/rails APP_PATH app/models/problem.rb attribute_count_decrease merged? app/models/user.rb can_create_github_issues? github_login= password_required? watching? app/models/app.rb find_by_id! spec/errbit_plugin/mock_issue_tracker.rb comments_allowed? app/assets/stylesheets/mailers/mailer.css a.bold p.heading p.monospace span.bold app/assets/stylesheets/reset.css applet dfn strike app/assets/stylesheets/bootstrap.css form-control-lg::-webkit-file-upload-button form-control-sm::-webkit-file-upload-button Suggested follow-up Review each candidate against Rails conventions, callbacks, reflection, view usage, routes, JavaScript usage, and test support before removing anything.
概要 以下画像のアップロードについての説明書きに誤字があるため、どちらも 630px に修正をお願いします。 app/views/mentor/practices/_form.html.slim bootcamp/app/views/mentor/practices/_form.html.slim Line 117 in ed13f88 p 画像サイズ: 1200px × 630xp app/views/articles/_form.html.slim bootcamp/app/views/articles/_form.html.slim Line 128 in ed13f88 | 画像サイズは必ず 1200px × 630xpx でお願いします。
このプラクティスは、OKをもらっていなくても他の人の提出物を閲覧できます。 ↓ このプラクティスは、合格をもらっていなくても他の人の提出物を閲覧できます。 修正をお願いします。
Is there an existing issue for this? I have searched the existing issues Package ecosystem bun Package manager version bun 1.4 Language version bun 1.4 Manifest location and content before the Dependabot update No response dependabot.yml content --- # https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file version: 2 updates: - package-ecosystem: "bun" directory: "/" schedule: interval: "monthly" day: "monday" time: "09:00" timezone: "Asia/Singapore" commit-message: prefix: "build" groups: app-dependencies: patterns: - "*" update-types: - "minor" - "patch" - package-ecosystem: "docker" directory: "/" schedule: interval: "monthly" day: "monday" time: "09:00" timezone: "Asia/Singapore" commit-message: prefix: "ci" groups: docker-deps: patterns:
Problem This command even confuses me, which is not a good sign. 🙂 Proposal A better way to think about it is as /keep. Because you keep 20% of the messages (eg /keep 20%). Or you keep X number of messages (eg /keep X). /compact 20% and /compact X just doesn't communicate the same thing conceptually so I always have to stop and think about it.
メンター or アドバイザーでログイン。 ダッシュボードにアクセス。 この余計なスペースをなくす。 bootcamp/app/views/home/index.html.slim の 13行目あたり。 メンターまたはアドバイザーでログインしたときは、 .has-side-nav がつかないようにする。
What type(s) of user does this feature affect? All signed-in user types — volunteers, supervisors, and admins all navigate to CASA case pages. All casa admins are affected indirectly (they administer orgs, whose identifier would become part of the URL). Description CASA case URLs should identify a case the way humans and courts do — by organization + case number — instead of leaning on our internal database primary key. Important: half of this is already built. CasaCase already uses FriendlyId, so today's URLs are usually already case-number based, not integer based: app/models/casa_case.rb:26 — friendly_id :case_number, use: :scoped, scope: :casa_org FriendlyId's to_param returns the slug when present (friendly_id-5.7.0/lib/friendly_id/base.rb:262), so casa_case_path(casa_case) renders /casa_cases/cina-21-1234 Nine call sites already resolve slugs via CasaCase.friendly.find (casa_cases_controller.rb:219, court_dates_controller.rb:69, placements_controller.rb:59, emancipations
Reported by Voices for Children Montgomery in the 2026-08-07 stakeholder sync. Distinct from #7093 — see "Not the same bug as #7093" below. Impacted User Types volunteers, case supervisors, and org staff at the reporting org — multiple people, not one machine Environment prod. Microsoft Edge on Windows. Downloading a generated court report .docx. Current Behavior Generating a court report succeeds, but the browser download is blocked with a "virus detected" warning. The user has to go into their antivirus software and tell it to ignore the detection to download anyway. Stakeholder's words, from the sync: Every time I download a report and other people download a report, it says viruses are detected. And then I have to go into like the virus detection software to say to ignore the virus and download anyway … which is kind of obnoxious and that's been happening for a while [approximately six months]. NoteScreenshot pending. A redacted screenshot of the Edge warning was captured
At the moment, email notifications get sent to Intercom. It has latency bc we gotta wait for ops to assign the ticket to us. Let's reconfigure Blazer so emails go to hcb-engr@ by default
SVGIcons, being included in the main bundle, is intentionally kept small to limit bundle size. However, splitting this into smaller icon sets that are imported a la carte by its consumers reduces the bundle size for all consumers that wouldn't use more than 1 or 2 subsets, while also freeing us to use more icons. Mockup // SvgIconSet.ts export default class SvgIconSet<Icons extends string> { private static readonly ICONS: { [k: string]: string } = {}; protected static register (iconMap: { [k: string]: string }) { for(const [k, v] in Object.entries(iconMap)) { if ((this.ICONS[k] || v) !== v) throw new Error(`"${k}" is being overwritten with an unexpected value ("${v}" instead of "${this.ICONS[k]}")`); this.ICONS[k] = v; } } protected constructor (icons: { [k: Icons]: string }) { SvgIconsSet.register(icons); } protected static render (name: string): SVGElement | null { if (!(name in this.ICONS)) return null; const svg = document.createElementN
Description When updating images on enterprise settings panel, when an incorrect media file is uploaded, the message error is displayed, but the file is still recorded It is linked to the PR #14552 Expected Behavior Incorrect media files should not be recorded Steps to Reproduce Go to Enterprise Settings Panel, and choose the IMAGES section Upload an incorrect file (.pdf or .doc for example) for the logo or promo image Errors are displayed, but the file is recorded, the "Remove image" button is displayed. Severity bug-s4: it's annoying, but you can use it
Top Ruby Repositories with Beginner Issues (20)
Updated Daily via GitHub GraphQLOn a mission to index all Ruby events.
Wiki Education Foundation's Wikipedia course dashboard system
The Ruby community's gem hosting service.
Volunteer management system for nonprofit CASA, which serves foster youth in counties across America.
A high performance implementation of the Ruby programming language, built on GraalVM.
プログラマー向けEラーニングシステム
:traffic_light: Traffic control for code.
The open source error catcher that's Airbrake API compliant :ukraine:
No repository description available.
A self-hosted digital asset manager for 3d print files.
ManageIQ Open-Source Management Platform
Connect suppliers, distributors and consumers to trade local produce.
ActiveAgent Rails framework for Agent Apps
OpenTelemetry Ruby API & SDK, and related gems
🤖 Dependabot's core logic for creating update PRs.
🍻 Default and OSS formulae (built-from-source packages) for the package manager for everywhere
🏦 Open source, transparency-orientated fiscal sponsorship platform for hackers & creatives.
cruby's capable AI runtime
Fiber-based Ruby web framework combining Rails ergonomics with a unified runtime
Concerto Digital Signage System
How to make your first Ruby open-source pull request
Finding approachable Good First Issues in Ruby allows you to build real-world software engineering experience. Instead of submitting PRs to abandoned repositories, GetMerged verifies maintainer review speeds and first-timer acceptance rates before you write a single line of code.
Select any issue above to claim it directly on GitHub, or click a repository to inspect full maintainer review turnaround metrics and triage guidance!
Get this week's top welcoming repos + fresh Good First Issues for Ruby
Free weekly email, scoped to Ruby. No account needed - confirm once and unsubscribe anytime.