Nobody has started this yet — be first.
Business impact
Support gets a slow trickle of "your signup form is broken" tickets from users who read "at least 8 characters," typed exactly 8, and got rejected anyway with a message that contradicts what just happened. It is not a security hole, but it is the kind of paper-cut that erodes trust in the product on the very first screen a new user sees, and every occurrence is a support contact that did not need to happen.
Problem
signup() is supposed to enforce "password must be at least 8 characters," but its guard rejects a password of exactly 8 characters even though the error message it returns says the 8-character password should have been fine.
Current behavior
The guard is if len(password) <= 8:, which rejects a password of exactly 8 characters -- an off-by-one against the documented rule, which allows exactly 8 as the minimum.
Expected behavior
A password of exactly 8 characters is accepted by POST /auth/signup. Only passwords of 7 characters or fewer are rejected with 400.
Steps to reproduce
Why this matters
Boundary conditions on < vs <= are one of the single most common off-by-one mistakes in real codebases -- exactly because the code still "looks right" at a glance and every non-boundary test case passes.
Suggested approach
Look at the exact comparison operator in signup()'s password-length check. Compare it against the stated rule ("at least 8 characters") and against the other password-length check in this same file (password_reset_confirm()) -- one of the two is written correctly.
Acceptance criteria
Verification
pytest practice_tickets/tests/test_ticket_01.py -v
Hints (0/2)
Try it without hints first — the reading is the exercise.
Working on this ticket
Work on a branch named for the ticket — that's what you'll submit.
Branch off your fork
Sign in to create it automatically, or do it yourself:
$git checkout -b fix/signup-password-boundaryFix it and commit
Meet every acceptance criterion, and add a test that would have caught this.
Push the branch
$git push -u origin fix/signup-password-boundarySubmit it below
Paste your fork URL and the branch name, with a short write-up of the root cause.
Questions
Ask about anything unclear in the ticket — the maintainer and anyone who has solved it can answer. Please don't post full solutions.
Sign in to ask a question or reply.
Sign inhttp://localhost:5000make seedpyotpmake docker-prod-upYou do not need Docker running at all to work the tickets -- the test suite uses an in-memory SQLite database (via StaticPool, an isolated DB per test function) and fakeredis (TestingConfig.USE_FAKE_REDIS), so everything runs against a plain virtualenv:
python -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
pytest practice_tickets/tests/test_ticket_01.py -v # a single ticket
./practice_tickets/run_tickets.sh # all 15, clean pass/fail summary
All 15 tests fail at the start; as you fix each ticket in app/, its test (and only its test) should flip to passing. make test (pytest -q) runs the project's own main suite -- as of writing it shows 9 pre-existing failures caused by ticket bugs 02, 03, 07, 11, and 15; fixing those tickets fixes those failures too, not a separate task. Do not look at git diff / version control history to find the bugs if this repo is ever put under source control -- the point is to find them the way you would find a real bug: from a failing test and a description of broken behavior, not a diff.
Level 1
Fix a bug
Read existing behaviour, correct it.