NO EXCEPTIONS: All testing, development, and execution must happen inside Docker containers.
- ❌ NEVER run
python script.pydirectly on the host - ❌ NEVER install packages with
pip installon the host - ❌ NEVER run Java/Maven commands directly on the host
- ❌ NEVER assume local Python/Java environments
- ✅ ALWAYS use
docker runordocker compose - ✅ ALWAYS use the test containers for Python scripts
- ✅ ALWAYS mount files as volumes for testing
- ✅ ALWAYS use existing Docker images when possible
❌ WRONG:
python test_script.py
pip install requests
java -jar cli.jar✅ CORRECT:
docker compose -f docker-compose.test.yml --profile test run --rm test-runner python test_script.py
docker compose -f docker-compose.test.yml --profile test run --rm -v ./test_script.py:/app/test_script.py test-runner python test_script.py
docker run --rm -p 8080:8080 bdq-multirecord-agent:fixedIf Claude tries to run anything locally outside Docker:
- STOP immediately
- Rewrite using Docker
- Reference this file
No local development. Docker only.
RULE 2: THIS IS A NEW PROJECT, DO NOT KEEP LEGACY CODE AND DO NOT PROVISION FOR BACKWARDS COMPATIBILITY! NO GRACEFUL DEGRADATION!
Delete and clean up anything which is no longer relevant. We have the code history in git, we do not need to keep anything irrelevant. Do NOT make the app "degrade gracefully", fix things at their fundamentals.
The entire point of this app is that it's supposed to run ALL relevant BDQ tests on any dataset which gets sent in. We don't just run the "top 10" tests or similar. We provide a comprehensive report.
If something is obvious, do not put it in the documentation, but ALL IMPORTANT DECISIONS MUST BE DOCUMENTED. By obvious, I mean something which is clear from just reading the code - don't document it. But if you have to read across multiple files or it's important conceptually to understand something, document it.
When documenting a design decision, add it to one of the current md files, do not create a new md. Make sure you don't add fluff, don't write congratulatory epistles on how much more efficient or good something is, just state very simply what it is and how it works with the rest of the app, in the same style as the way the README is written.
Do not add multiple safety fixes and checks in one go. Implement a fix, check if it works, if it doesn't then remove it and try something else. I don't want to have multiple attempts to e.g. start the bdq gateway service and not know which is the one which is actually doing the work. In this repo if you come across a problem you do ONE small fix, and make it as clean and minimal as possible.