DouglasNeuroInformatics/OpenDataCapture - Open Source PR Review Scorecard

An electronic data capture platform for administering remote and in-person clinical instruments

C-Rank Grade: S (Elite) - 78/100

External PR Merge Rate: 71%

Response Time: 8h

First Timer Success: 50%

Frequently Asked Questions

Is DouglasNeuroInformatics/OpenDataCapture welcoming to first-time open-source contributors?

DouglasNeuroInformatics/OpenDataCapture has a recorded first-timer success rate of 50.0%. Repositories ranked S typically provide actionable feedback during code reviews and actively nurture new community contributors.

How fast can I expect code review feedback on my pull request?

Maintainers in DouglasNeuroInformatics/OpenDataCapture respond to incoming external pull requests in approximately 8.4 hours on average. Keeping PRs focused on single tasks and ensuring tests pass helps maintainers review faster.

What does the 78.2 C-Rank™ score (S Tier) represent?

The C-Rank™ system evaluates GitHub projects on a 0–100 scale using real data: PR merge rates, review turnaround time, active maintainer presence, and first-time contributor success. A score of 78.2 places DouglasNeuroInformatics/OpenDataCapture in the S tier.

What is the external contributor pull request merge rate for DouglasNeuroInformatics/OpenDataCapture?

The external contributor pull request merge rate for DouglasNeuroInformatics/OpenDataCapture is 71.1%, based on public PR activity from non-core contributors.

Are there Good First Issues available in DouglasNeuroInformatics/OpenDataCapture?

DouglasNeuroInformatics/OpenDataCapture currently has 18 active issue(s) tagged with beginner-friendly labels like "good first issue", "beginner", or "up-for-grabs".

DouglasNeuroInformatics
DouglasNeuroInformatics/OpenDataCaptureS•Elite118
GitHub
Back to Explorer
DouglasNeuroInformatics

DouglasNeuroInformatics/OpenDataCapture

118
Active (30d)S•Elite(78/100)TypeScript

An electronic data capture platform for administering remote and in-person clinical instruments

GitHub
Compare••
Jump to:

AI Maintainer Review Guidelines

Review Persona

High-Friction Gatekeeper

Warmth Score
5.0/10
Patience Score
6.0/10
Nitpick Rate
65%

Rigorous architecture standards (100% critical review signals). Ensure PRs strictly follow guidelines before requesting review in DouglasNeuroInformatics/OpenDataCapture.

Top PR Submission Do's

  • •Add unit tests with >80% coverage for modified code paths
  • •Use conventional commit messages and clean branch names
  • •Link relevant GitHub issue ID in PR description pre-flight checklist

Top PR Friction Pitfalls (Don'ts)

  • •Do not submit unlinked PRs without referencing an existing issue
  • •Do not mix refactoring and feature logic into a single commit
  • •Do not ping maintainers repeatedly within 24 hours of opening
Response Velocity
8 hours
Standard maintainer review cycle

Average Response Latency

Tracks hours until a maintainer leaves a review, comment, or PR response.

Merge Efficiency
71.1%
Moderate PR acceptance rate

External Acceptance Rate

Percentage of community pull requests successfully merged into main.

First-Timer Success
50.0%
Accepts new contributor PRs

First PR Conversion

Rate at which developers submitting their first repository PR succeed.

Active Maintainers
6 core
Highly collaborative maintainer core
Diagnostic Health HUD
71.1%
Merge Gauge
50.0%
1st-Timer
Community Vibe67/100

Embed C-Rank Badge

Show contributors that your repository actively reviews and merges external pull requests.

GetMerged C-Rank badge for DouglasNeuroInformatics/OpenDataCapture
[![GetMerged C-Rank](https://getmerged.abhishekco.de/api/badge/DouglasNeuroInformatics/OpenDataCapture)](https://getmerged.abhishekco.de/DouglasNeuroInformatics/OpenDataCapture?utm_source=github&utm_medium=badge)

Active Good First Issues (5)

View on GitHub

The playground's "Interactive Instrument with Static Assets" example can never be completed. Its Submit handler calls done({ message }), but nothing in the instrument defines message, so clicking Submit throws ReferenceError: message is not defined and done is never called. Type-checking does not catch it, because a different example, Interactive-With-Legacy-Script/legacy.d.ts, declares declare let message: 'hello' as an ambient global. That declaration is in scope for every file under apps/playground/src, so tsc (and pnpm lint) accept the undefined identifier. Where apps/playground/src/instruments/examples/interactive/Interactive-With-Static-Assets/index.ts:18-23: render(done) { const button = document.getElementById('submit-btn')!; button.addEventListener('click', () => { done({ message }); }); }, The global that hides it, apps/playground/src/instruments/examples/interactive/Interactive-With-Legacy-Script/legacy.d.ts:1: declare let message: 'hello'; fragment.html has no ele

📅 Opened Oct 7, 2026💬 0 comments
Quality: 90/100Contribute

serve-instrument exits with an unhandled error when an instrument directory is deleted or renamed while it runs, or when it receives a URL with a malformed percent-escape. In both cases an exception escapes an async function that is called with void: this.handler.handle(...) for requests, and this.updateEncodedBundle() in the fs.watch callback. Node turns the unhandled rejection into a process exit. In updateEncodedBundle, only the bundle() call is inside the try; the readdir/readFile before it are not. In --all mode, deleting or renaming one instrument folder kills the server for all the others, and so does a git checkout that removes one. An author has to notice that the terminal died and restart it. Where packages/serve-instrument/src/server.tsx:45-48, 62-79 and 243-247, 312: this.watcher = fs.watch(target, { recursive: false }, () => { // ... void this.updateEncodedBundle(); }); // ... private async updateEncodedBundle(): Promise<void> { const inputs: Bund

📅 Opened Oct 7, 2026💬 0 comments
Quality: 90/100Contribute

Every failed instrument build reports one error too many. The extra error is the bundler crashing on itself: Cannot read properties of undefined (reading 'inputs'). The plugin's onEnd hook reads result.metafile!.inputs unconditionally, but esbuild does not produce a metafile when the build has errors. So the hook throws a TypeError, and esbuild appends it to BuildFailure.errors as a second error attributed to instrument-bundler-plugin. Any author with a syntax error or a missing file then sees "Build failed with 2 errors" and an internal TypeError alongside their real mistake. This appears in the playground's error fallback (its "Cause" section shows the esbuild message), in serve-instrument's log, and in the API's instrument repo import log. Where packages/instrument-bundler/src/plugin.ts:86-95: build.onEnd((result) => { result.legacyScripts = []; Object.keys(result.metafile!.inputs).forEach((path) => { const script = legacyScripts.get(path.replace('bun

📅 Opened Oct 7, 2026💬 0 comments
Quality: 90/100Contribute

The bundler rewrites any import of a subpath of a scoped runtime package to a URL that does not exist. For bare packages, the rule in plugin.ts appends /index.js to /runtime/v1/<pkg> and /runtime/v1/@scope/<pkg>. But its scope group is (@.*\/)?, and .* also matches /, so it swallows any number of path segments. /runtime/v1/@opendatacapture/runtime-core/constants therefore becomes /runtime/v1/@opendatacapture/runtime-core/constants/index.js instead of …/constants.js, and an import that already ends in .js gets /index.js appended after the .js. packages/instrument-bundler/AGENTS.md documents the opposite: only the bare package gets /index.js, and everything deeper gets .js. The import type-checks, because runtime/v1/dist/@opendatacapture/runtime-core/constants.d.ts exists. The bundle then fails to evaluate: on the API the subpath import does not resolve, and in the browser the module 404s. Today this affects FILE_TYPES from /runtime/v1/@opendatacapture/runtime-core/constants, and any f

📅 Opened Oct 7, 2026💬 0 comments
Quality: 100/100Contribute

An instrument file with an upper-case extension, such as a camera image IMG_0001.JPG or stim.PNG, breaks every tool that reads instrument files, with the error Pattern matching error: no pattern matches value ".PNG". BUNDLER_FILE_EXT_REGEX is case-insensitive (/i), so these files are accepted as inputs. But extractInputFileExtension returns the match with its original case, while declaring the lower-case BundlerInputFileExtension union as its return type. inferLoader then matches exhaustively on lower-case literals, and ts-pattern's .exhaustive() throws NonExhaustiveError for .PNG. What happens next depends on the consumer: bundle(): the build fails with that ts-pattern message instead of building or naming the unsupported file. the instrument-bundler CLI (the instrument-library build): crashes on the first such file in any instrument directory, even if nothing imports it. serve-instrument: the rejection escapes updateEncodedBundle and kills the dev server. InstrumentReposService.read

📅 Opened Oct 7, 2026💬 0 comments
Quality: 90/100Contribute
Looking for more TypeScript beginner tasks?Explore TypeScript GFI

Contributor Community Vibe Feedback

Rate what actually matters after opening a pull request here.

Have you contributed to this repo?

Rate your first-hand PR experience (review speed, maintainer responsiveness, and onboarding ease) to help other contributors.

3 ratings required
Maintainer helpfulness
Review speed
Beginner friendliness

Contributor Compatibility & Review Speed Analysis for DouglasNeuroInformatics/OpenDataCapture

When evaluating whether to contribute to DouglasNeuroInformatics/OpenDataCapture, response velocity and maintainer engagement are crucial. GetMerged continuously tracks pull request trajectories, first-comment latency, and code review rounds to help developers avoid submitting pull requests to backlogged repositories.

Currently, maintainers of DouglasNeuroInformatics/OpenDataCapture acknowledge new external contributions in approximately 8 hours. Out of all submitted pull requests from non-core authors in the last 180-day window, 71.1% were successfully merged into the primary branch.

Frequently Asked Questions - Contributing to DouglasNeuroInformatics/OpenDataCapture

01

Is DouglasNeuroInformatics/OpenDataCapture welcoming to first-time open-source contributors?

DouglasNeuroInformatics/OpenDataCapture has a recorded first-timer success rate of 50.0%. Repositories ranked Elite typically provide actionable feedback during code reviews and actively nurture new community contributors.

02

How fast can I expect code review feedback on my pull request?

The initial maintainer response time averages ~8 hours. Keeping PRs scoped to single concerns and ensuring CI checks succeed will optimize review turnaround.

03

What does the 78.2 C-Rank™ score represent?

The C-Rank™ index scores repositories on a 0 to 100 scale using an objective formula: external PR merge rates, initial response speed, active maintainer count, and first-time contributor retention. A score of 78.2 places DouglasNeuroInformatics/OpenDataCapture in the Elite tier.

04

What is the external contributor pull request merge rate for DouglasNeuroInformatics/OpenDataCapture?

The external pull request merge rate is 71.1%. GetMerged isolates non-core community contributions so external developers get an accurate benchmark of PR acceptance probability.

05

Are there beginner Good First Issues open in DouglasNeuroInformatics/OpenDataCapture?

Yes, DouglasNeuroInformatics/OpenDataCapture currently has 18 active issue(s) tagged with beginner-friendly labels. You can inspect these directly from the repository issues tab.

GetMerged C-Rank™ Indexing Standard

All metrics displayed for DouglasNeuroInformatics/OpenDataCapture are automatically retrieved via the public GitHub API and recalculated daily. Insider pull requests submitted by repository owners or organization members are excluded from merge rate calculations to preserve objective external contributor statistics.