dropthejase turns document conversion from stub to working pipeline

What was a six-line placeholder is now a real service that turns uploaded Word files into PDFs - with the gremlins shaken out.

workflowinfrastructure

dropthejase built out the part of louis that converts uploaded documents into clean PDF renditions, moving the heavy lifting onto its own dedicated processor instead of bolting it onto the main backend. Getting there meant chasing two non-obvious bugs. One was an infinite loop: the converter kept tripping over its own output and re-processing the PDFs it had just produced, over and over. The other was a plumbing mismatch in how the system was told a new file had arrived. Both are now fixed, and the converter knows when to actually run versus when a file is already a PDF and just needs recording.

Separately, deleting a chat now also wipes the files that chat left behind in storage, rather than orphaning them.

So what Worth a look for anyone who cares about documents rendering reliably and deleted conversations leaving nothing behind in storage.

View this fork on GitHub →

Spotted something wrong? Or know the PR text has fresher detail than the writeup above?

Commits in this thread

8 commits from dropthejase/louis, oldest first. Source extracted verbatim from the harvested git log.

SHA Subject Author Date
510081c6 feat(conversion): scaffold project and copy conversion logic from backend Jason Lee 2026-05-06 ↗ GitHub
d42ae59b feat(conversion): add Lambda handler and production Dockerfile Jason Lee 2026-05-06 ↗ GitHub
90c65e48 Migrate conversion Lambda from Supabase to Aurora RDS Data API Jason Lee 2026-05-08 ↗ GitHub
43e9d4dd feat(infra): enable EventBridge on docs bucket, remove @supabase/supabase-js Jason Lee 2026-05-08 ↗ GitHub
b3674db6 infra: fix IAM permissions, EventBridge PDF rule, deploy-agent authorizer Jason Lee 2026-05-11 ↗ GitHub
commit body
- Lambda + AgentCore roles: extend Bedrock resources to wildcard region for
  cross-region inference profiles; add inference-profile/* ARN
- API Lambda role: upgrade sessionsBucket from grantRead to grantReadWrite
  (delete session on chat delete, Phase 5)
- AgentCore role: add s3:ListBucket on sessionsBucket
- AuthStack Identity Pool: add converted-pdfs/ prefix to per-user S3 policy
  and extend ListBucket condition to cover all three prefixes
- ConversionStack: add PDF EventBridge rule (documents/*.pdf trigger)
- deploy-agent.sh: include authorizer-configuration on update-agent-runtime
  (was only set on create); inject TABULAR_AGENT_ARN / MAIN_AGENT_ARN from
  SSM into runtime env vars (best-effort, skipped if not yet deployed)
0ee216da fix(conversion,chat): EventBridge format, PDF passthrough, delete session cleanup Jason Lee 2026-05-11 ↗ GitHub
1a11621d fix: remove libreoffice-convert from backend Lambda (conversion Lambda handles it) Jason Lee 2026-05-11 ↗ GitHub
8afab465 fix(conversion): stop EventBridge infinite loop on PDF uploads Jason Lee 2026-05-13 ↗ GitHub
commit body
Replace 3 separate EventBridge rules (docx/doc/pdf) with single rule
scoped to documents/ prefix only. Previous rules used OR semantics on
prefix+suffix - converted-pdfs/foo.pdf matched the .pdf suffix rule,
causing Lambda to re-trigger on every PDF it wrote. Added guard in
handler to reject keys outside documents/ as defense in depth.
Also upgrades base image to node22 (26.2-node22-x86_64).

Capture this thread into my fork

Download a single Markdown prompt that tells Claude how to port every commit above into your working tree — adapting paths and structure to match your repo. Run it via claude -p < capture-thread-331.md from inside the repo you want the changes in.

⬇ Download capture-thread-331.md