Skip to content

Lab PI types, RFA import, award deletion, and a Compose fix for fresh servers - #2

Merged
Loyale merged 4 commits into
mainfrom
claude/grant-tracker-webapp-deb0c1
Oct 15, 2026
Merged

Loyale merged 4 commits into
mainfrom
claude/grant-tracker-webapp-deb0c1

Conversation

@Loyale

@Loyale Loyale commented Oct 15, 2026

Copy link
Copy Markdown
Contributor

Brings main up to date with four commits pushed to this branch after #1 merged. This is the code currently running locally (eaa9ccc), and the production deploy at funding.gofflab.org restores a database built on it.

Changes

  • 619ed41 Compose builds the app image for every service. On a fresh machine the scheduler tried to pull grant-tracker:latest from Docker Hub and failed with "pull access denied". The build now lives in the shared service config with pull_policy: never.
  • 25042f0 Lab PI and principal investigator person types. There is one Lab PI per lab, enforced in the database and linked to an Owner. The Lab PI joins new, imported and cloned application teams, and Effort and Current & Pending default to them. Adds migration 0003_person_lab_pi_and_pi_types.
  • 92fb480 Import opportunities from an RFA link, number, file or text. Uses the Grants.gov API and the NIH Guide, rule-based extraction for NIH, NSF and foundation layouts, and optional Claude extraction when ANTHROPIC_API_KEY is set. Adds the anthropic dependency and two new .env.example entries.
  • eaa9ccc Award deletion with safeguards, and an Ended award status. Adds migration 0004_award_status_ended.

Testing

CI (tests, check --deploy, migration check, Docker build) passed on every commit, including the head eaa9ccc. The branch merges into main with no conflicts.

🤖 Generated with Claude Code

https://claude.ai/code/session_01SAPwFhRyU83ey74tK1cYbJ


Generated by Claude Code

claude added 4 commits October 1, 2026 19:12
The scheduler service shared the web image but had no build section, so on a
fresh machine Compose tried to pull grant-tracker:latest from Docker Hub and
failed with "pull access denied". Move the build into the shared service config
and set pull_policy: never so Compose always builds the image locally.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01446i9MHUqpAxy63YiJgDuq
- New person types: "Lab PI (lab head)" for the head of this lab and
  "Principal investigator (other lab)" for MPI partners, separate from
  external collaborators.
- Only one Lab PI (enforced in the database), linked to an Owner login and
  assignable only by an Owner; editors cannot change or delete it.
- The Lab PI joins every new, imported or cloned application's team with the
  role implied by "My role", and follows later role changes.
- Effort and Current & Pending default to the Lab PI.
- Profile page "This is me" button; the first owner created from .env gets a
  Lab PI record automatically.
- Demo data and README updated; tests added.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01446i9MHUqpAxy63YiJgDuq
Point the app at an announcement and it pre-fills a new Opportunity for
review. Sources are merged by confidence:

- Grants.gov public API for federal numbers, plus the NIH Guide notice
- Rule-based extraction tuned for NIH Guide, NSF and foundation layouts
  (due-date tables, LOI rules, NIH standard dates, budget, project
  period, institutes, eligibility, limited submission, contact)
- Optional Claude extraction when ANTHROPIC_API_KEY is set

The review form highlights auto-filled fields, shows each value's
source, warns about duplicates, matches funders by domain or name and
offers to create a missing funder on save. Link fetching rejects
private addresses, caps size and checks every redirect.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01446i9MHUqpAxy63YiJgDuq
Owners can delete an award record created by mistake from the award's
menu. The confirmation lists what is deleted and kept, warns when the
award holds real data (award number, account, later NoAs, spending,
completed tasks), requires typing DELETE, and moves the application back
to its status before Awarded (or keeps it Awarded for a fresh record).
Generated reporting and award-setup tasks can be removed with it; tasks
added by hand are kept. Dates set by the award change are cleared when
moving back to a pending or pre-submission status. Applications that
still carry an award after leaving Awarded are flagged.

Awards gain an Ended status (project period over, before close-out),
a quick status menu, and a prompt to mark an award ended once its end
date has passed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01446i9MHUqpAxy63YiJgDuq
@Loyale
Loyale merged commit 1be4a7d into main Oct 15, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants