The startup code calls GetObject without a version ID. The replacement permission allows versioned reads only, so the request is denied and the API cannot start.
View evidence
Code
infra/iam/api.tf:24 replaces s3:GetObject. src/config.ts reads prod.json without a version ID before starting the server.
Environment
The pinned environment snapshot links the API task to this role. No other applicable policy grants s3:GetObject on the configuration object.
Keep s3:GetObject scoped to app-config/prod.json. The API needs that action to load its configuration.
2525 }
Network outages
your-org /your-repo
Move database access to the worker group #44
Openyou want to merge 1 commit into main from database-ingress
This replaces the database’s only ingress rule for the API security group. API tasks still connect to orders-prod:5432, so new connections time out after the rule changes.
View evidence
Code
infra/network/database.tf:31 replaces the allowed source group. The API still opens PostgreSQL connections during startup and when its pool reconnects.
Environment
The pinned snapshot places API tasks in the API security group and the database in the group changed here. No other ingress rule allows that source on TCP 5432.
Retain the API security group in the database’s allowed sources. Add the worker group alongside it if both services need access.
3232 }
Breaking migrations
your-org /your-repo
Rename the order status column #45
Openyou want to merge 1 commit into main from rename-order-status
Conversation1Commits1ChecksFiles changed1
migrations/018_order_status.sql+1−0
@@ -0,0 +1 @@
1+ ALTER TABLE orders RENAME COLUMN status TO state;
prooflinebotcommented
The running API still queries the old column
The migration renames orders.status before the API rollout. The currently deployed release still selects status, so order requests fail with a missing-column error while that release is running.
View evidence
Code
migrations/018_order_status.sql:1 renames the column. The deployment configuration runs migrations before replacing API tasks.
Environment
The recorded production deployment identifies the running image and its commit. At that commit, src/orders.ts queries orders.status.
Use an additive migration first. Add and backfill state, deploy code that supports the transition, and remove status after old readers are retired.
Grounded in your infrastructure.
Read-only access to configuration and deployment evidence, through permissions you grant.
Install the GitHub App for the repositories you choose, then grant read-only access to the infrastructure in the target environment. The required permissions depend on the services you connect. Read about security and data access.
Can it change my infrastructure?
Infrastructure integrations are read-only. Proofline reads configuration and deployment evidence, then publishes supported findings in GitHub. You decide how to address them.
What happens when evidence is unavailable?
Proofline marks the assessment incomplete and identifies the missing, stale, or unreachable evidence. An absence of findings does not establish that a deployment will succeed.
Does it replace tests or staging?
Keep your tests and staging environment. Proofline adds a review of the change against evidence from its target infrastructure, helping you investigate risks that depend on that environment.
Can I start for free?
Yes. Sign in with GitHub to begin setup. Paid subscriptions are not available yet. See the planned pricing for the proposed plan and credit allowance.
Get started for free
Bring one repository and the environment it deploys to.
Connect GitHub
Sign in and install the GitHub App for the repositories you choose.
Link an environment
Choose the repository and identify where its changes will run.
Connect infrastructure
Grant the read-only access needed to review that environment.
Inspect a review
Read the findings, their evidence, and any gaps before you merge.
Database connections run out before all tasks become healthy
Each task opens 20 connections before passing its health check. With 12 tasks, the service needs 240 connections. The production database allows 197.