queue: no test executes the worker's raw SQL, so a type-resolution error would ship green
Maintainers usually reply within 4 days
Nobody has claimed this yet.
Assessment
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Newbie friendliness
- 48/100
- Issue type
- Feature
- Clarity
- Mostly clear
- Activity status
- Active
- Tech stack
- postgresql, typescript
Research direction
Start with queue.test.ts and worker-concurrency.test.ts, then inspect the existing postgres:18 CI service and migrated-database setup. Add a Postgres-backed test file covering raw SQL execution, reclaim predicates, legacy locks, DEAD_LETTER versus PENDING updates, and the stated index plan; done means these behaviors and type-resolution risks are exercised without Prisma mocks.
Written by the indexing model from the issue text.
Description
Raised repeatedly during the #224 review rounds, and it is the structural limit of the current approach rather than anything wrong with the tests that exist.
The gap
Every claim and reclaim assertion in queue.test.ts and worker-concurrency.test.ts is a substring match against mock.calls[0][0].join(' ') — the template literal's static fragments. The tests mock prisma, so CI never executes the SQL either.
Unverified anywhere, and all of it is load-bearing:
gen_random_uuid()::text(jsonb ->> "Job".type)::double precision— the per-type timeout lookup<param> * INTERVAL '1 millisecond'operator resolution against Prisma's parameter typingLEAST(<float8>, $n)with a Prisma-typed integer parameter — a classic "could not determine data type of parameter" shapePOWER,random(),left(job.error, 200), and the string concatenation on theerrorcolumn- type unification across the
CASEarms UPDATE ... RETURNING "claimToken"semantics- whether the planner actually uses
Job_status_lockUntil_idx— a property asserted as fact in bothschema.prismaand the migration, and only provable byEXPLAIN
Why it is worth doing now
A type-resolution error in reclaimStaleJobs fails on the first poll of every replica, with CI fully green — the sweep is the first statement of every poll. That is a fleet-wide failure that no gate we have can catch.
Behavioural gaps that fall out of the same absence:
- The reclaim predicate has no behavioural test. The premise of #224 is "reclaim on the deadline the claiming worker recorded", and no test asserts which rows that predicate actually selects. Wanted:
lockUntil = now + 120sis left alone by a worker whosedefaultTimeoutMsis 5s;lockUntil = now - 1sis left alone (inside the grace);lockUntil = now - 31sis reclaimed. - The legacy arm is untested behaviourally —
lockUntil IS NULLwithlockedAt20 min ago reclaims, 5 min ago does not. - The DEAD_LETTER vs PENDING branch is untested —
attempts + 1 >= maxAttemptsdrives three different columns. A row atattempts=4, maxAttempts=5must landDEAD_LETTERwithcompletedAtset andrunAtuntouched; atattempts=0,PENDINGwith a futurerunAtandcompletedAtNULL.
Shape
The repo already runs a postgres:18 service in CI. One Postgres-backed test file against a migrated database would cover every item above at once, and queue.test.ts's own header has said integration tests "should be added separately" since it was written — with no owner and no link. This is that link.
- Dominant language
- TypeScript
- Stars
- 10
- Forks
- 4
- Avg merge
- 4d 2h
- Merged PRs (30d)
- 7
Getting set up
- Ships a Dockerfile or Docker Compose file
- No pull request template
- No contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from CopilotKit/outpost
-
area: docs area: security roadmap: now
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
CopilotKit/outpost#277 ·
Maintainers usually reply within 4 days
-
area: infrastructure roadmap roadmap: later
Difficulty 1/5 Under an hour Newbie friendliness 74/100
CopilotKit/outpost#179 ·
Maintainers usually reply within 4 days
-
area: ai roadmap roadmap: now
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
CopilotKit/outpost#145 ·
Maintainers usually reply within 4 days
-
area: integrations priority: low roadmap roadmap: later
Difficulty 2/5 1-3 hours Newbie friendliness 86/100
CopilotKit/outpost#124 · 3 comments ·
Maintainers usually reply within 4 days
-
area: integrations priority: low roadmap roadmap: later
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
CopilotKit/outpost#123 · 2 comments ·
Maintainers usually reply within 4 days
All issues in CopilotKit/outpost
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 85/100
Comfy-Org/ComfyUI_frontend#20346 ·
Maintainers usually reply within 1 day
-
Difficulty 1/5 Under an hour Newbie friendliness 90/100
decentralized-identity/didwebvh-ts#203 ·
Maintainers usually reply within 1 day
-
community first-timers-only good first issue hacktoberfest help wanted low hanging fruit up-for-grabs
Difficulty 2/5 1-3 hours Newbie friendliness 65/100
lingdojo/kana-dojo#31791 · 1 comment · 5 reactions ·
Maintainers usually reply within 1 day
-
Telegram webhook: line breaks lost since switch to rich messagesPossibly taken @Kshot3000 claimed this today. Open
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
Maintainers usually reply within 1 day
-
github_actions security
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
Maintainers usually reply within 1 day