Control the starting state
Pair the pre-upgrade database and web baseline, isolate the validation copy, and keep restore ownership explicit so reruns start from a known state.
I developed automation for validating REDCap upgrades in an isolated lab during my 2026 internship at Mount Sinai. The workflow combines controlled baselines, before-and-after comparisons, negative controls, browser testing, and reviewable evidence.
A passing smoke test does not tell a reviewer whether the system preserved project configuration, record data, access assignments, and historical logs—or whether the comparator would notice an unexpected change.
Pair the pre-upgrade database and web baseline, isolate the validation copy, and keep restore ownership explicit so reruns start from a known state.
Introduce a deliberate, controlled change after clean comparisons. The negative challenge passes when the workflow detects the difference—not when changed data appears equal.
Connect phase summaries to exports, browser captures, comparison reports, logs, and integrity records rather than presenting an unexplained pass/fail dashboard.
The complete suite is the release-oriented workflow; smaller component commands support investigation and reruns. A standalone component pass is not the same as a successful complete suite.
Frames from a September 24, 2026 demonstration in a local, copied REDCap lab using synthetic test records. The terminal is executing the suite while the separate reviewer dashboard updates phase status and exposes supporting summaries. Select any image to inspect its larger version.
A controlled interruption should not produce a misleading successful result or permit another run to begin while the shared baseline is being restored. These separate cancelled-run captures show cleanup ownership and operator feedback while baseline restoration is in progress.
API, authenticated URL, and negative-control validation need distinct results, but they depend on the same controlled upgrade. Running each as an unrelated end-to-end workflow repeats expensive state changes and complicates comparison and cleanup.
The complete suite establishes the baseline, freezes the eligible comparison scope, captures clean API and URL evidence, and applies one upgrade within the shared OQ lifecycle. Each comparison retains its own result and supporting artifacts.
After clean comparisons, a separate negative-control phase introduces deliberate drift and must detect it. The negative result is expected evidence that the comparator can fail for the right reason, not a failed release decision.
Standalone commands permit investigation and focused reruns; the complete suite owns the release-oriented result, final restoration, and qualifying evidence package. A component PASS cannot substitute for the complete run.
The checks are targeted and evidence-backed. They do not imply exhaustive functional coverage of REDCap or a formal regulatory approval.
Before/after project metadata, record exports, selected user rights and role/DAG assignments, and preservation of pre-upgrade audit records. Additional legitimate post-upgrade audit entries are distinguished from lost historical records.
Purposefully introduce a scoped change and verify that the comparator rejects equality. This establishes that a clean result is not simply a comparator that always says “match.”
Browser-driven data entry, reason-for-change capture, form locking, and blocked edits with supporting database and audit evidence. These checks support validation review; they do not confer Part 11 certification.
Selected protected-route behavior, login, weak-password rejection, logout, and session-cookie behavior. This is a defined browser-security baseline, not a full penetration test.
Where an eligible disposable fixture exists, the scoped adult, in-person workflow covers participant submission, investigator confirmation, and signed-copy retrieval/hash evidence. Broader e-consent scenarios are outside this claim.
Phase-level summaries, machine-readable results, retained supporting artifacts, a reviewer index, SHA-256 manifests, and verification of the final baseline restoration.
In a separate WAF workstream, I reviewed external security-test findings and developed targeted Caddy/Coraza request controls in front of an existing Apache/REDCap backend. I compared direct and protected request paths during regression so a security rule could be evaluated for both blocking behavior and unintended interference.
Apply independent limits to selected sensitive operations, including password recovery and specific project-management actions, rather than throttling every REDCap request.
Reject ambiguous duplicate API parameters and apply scoped length and character checks to record-renaming inputs without treating unrelated requests as equivalent.
Replace permissive API CORS behavior with an explicit allowed-origin policy and verify expected response headers through the protected path.
Separate controlled binary construction from installation of the prebuilt Caddy/Coraza executable, with systemd service configuration and regression checks for a Linux operator.
The WAF and upgrade-validation suite were separate engineering deliverables.
This was internship engineering in a team environment, not an isolated personal lab. I discussed validation priorities and security-test findings with technical stakeholders, incorporated feedback on expected evidence, and prepared setup and operator guidance so another engineer could run and review the workflows.
I prioritized repeatable runs, accurate result interpretation, and operator handoff before expanding the test suite.
The deliverable is a navigable evidence record, not just an automation script. The reviewer starts with the overall suite result and follows any question down to the relevant phase and artifact.
In the recorded run, the suite validated an upgrade from REDCap 16.0.30 to 16.0.35, then restored the copied lab to 16.0.30.
The clean comparison reported 17 identical metadata and record-export scopes and 102 passing validation CSV comparisons. The negative-control phase then found its deliberate record, historical-log, user, and role changes. Finally, the suite restored the original version and verified SHA-256 checksums for the complete and reduced review packages.
The e-consent phase used a reduced adult in-person fixture; broader lifecycle cases were outside this run.
Overall and phase results, declared scope, observed differences, version information, and references into retained evidence.
Reviewer-facing artifact directories, canonical retained results, manifest checks, and an external archive checksum support integrity verification before review.
Institutional source and validation packages remain private. These recorded results do not constitute formal FDA or Part 11 certification.
Python, Bash, SQL, JavaScript/Puppeteer, REST API testing, containerized Linux workflows, controlled state transitions, failure reporting, and documentation for another operator.
Predefined scope, positive and negative controls, separate observation and interpretation, evidence integrity, and explicit distinctions between a component result and the complete run.