This directory holds 20 + N issue bodies (bodies/) and a PRIORITIES.md file. The first batch was generated from the OxyRoute roadmap; 21+ are follow-ups from docs/feature.md.
- Active milestone v0.2.0: next PyPI 0.2.0 — open work includes #4 (perf), #8 (JWK/oxyjwt), #17 (ASGI), #18 (lifespan/state), #46–#48 (sub-routers, multipart, global exceptions), #50–#54 (HTTP/2 docs, SSE, WebSocket research, CSRF, security headers).
- Closed milestone v0.3.0: unused name; work consolidated under v0.2.0.
- Optional OpenAPI depth (
$ref/$defs): 09.md; issue #9 is closed — open a new issue if you pick this up. - Do not re-run
./scripts/create-github-issues.shon an already-populated repo (duplicates). Check open work with:gh issue list -R QueryaHub/OxyRoute --state open.
- GitHub CLI installed (
gh). - Authenticate:
gh auth login(the repository cannot create issues in your project without a logged-inghor aGH_TOKENwithissues:write).
From the repository root:
./scripts/create-github-issues.shThe script:
- Ensures you are logged into
gh. - Creates labels (
P0,P1,research,enhancement,tech-debt,ci,documentation,test) if missing. - Creates milestone
v0.2.0if missing. - Opens 20 issues with titles, bodies, labels, and the milestone (see the script for the exact mapping).
Warning: Running the script twice will duplicate issues. If you need idempotency, check open issues on GitHub first or add guards (not included).
gh issue create --title "feat: expose PATCH routes on Python App" \
--body-file .github/ISSUE_BACKLOG/bodies/01.md \
-l enhancement -l P1 -m v0.2.0| # | Body file | Title (for gh issue create) |
Labels (suggested) | Milestone |
|---|---|---|---|---|
| 1 | bodies/01.md | feat: expose PATCH routes on Python App | enhancement, P1 |
v0.2.0 |
| 2 | bodies/02.md | fix: apply URL decoding to query string keys and values | bug, P0 |
v0.2.0 |
| 3 | bodies/03.md | feat: map Python exceptions in dispatch to HTTP 500 with safe body | enhancement, P0 |
v0.2.0 |
| 4 | bodies/04.md | perf: reduce lock contention on route match (RWLock or route snapshot) | tech-debt, enhancement |
v0.2.0 |
| 5 | bodies/05.md | feat: pass request context into dependencies and support dependency chains | enhancement, P1 |
v0.2.0 |
| 6 | bodies/06.md | feat: extend JWT Validation with iss/aud and optional leeway | enhancement, P1 |
v0.2.0 |
| 7 | bodies/07.md | feat: read JWT from Cookie header for require_jwt | enhancement |
v0.2.0 |
| 8 | bodies/08.md | research+feat: JWK/PEM-based JWT verify in Rust (align with oxyjwt) | enhancement, research |
v0.2.0 |
| 9 | bodies/09.md | feat: add optional Pydantic / JSON schema hooks for OpenAPI body | enhancement |
v0.2.0 |
| 10 | bodies/10.md | feat: structured Response object for headers and status | enhancement, P1 |
v0.2.0 |
| 11 | bodies/11.md | feat: optional middleware chain in run_rsgi before route match | enhancement |
v0.2.0 |
| 12 | bodies/12.md | test: e2e HTTP against granian --interface rsgi | test, P0 |
v0.2.0 |
| 13 | bodies/13.md | ci: add cargo clippy and Rust unit tests to workflow | ci |
v0.2.0 |
| 14 | bodies/14.md | ci: PyPI publish on version tag (trusted publishing) | ci |
v0.2.0 |
| 15 | bodies/15.md | tech-debt: upgrade pyo3 0.21 -> current and validate Granian RSGI | tech-debt, research |
v0.2.0 |
| 16 | bodies/16.md | docs+test: clarify include_openapi vs set_openapi_served and 404 for /openapi.json | documentation, test |
v0.2.0 |
| 17 | bodies/17.md | fix: review ASGI protocol bridge (run_coroutine_threadsafe) under load | bug, research |
v0.2.0 |
| 18 | bodies/18.md | feat: pass app state / lifespan for shared resources (optional design) | enhancement |
v0.2.0 |
| 19 | bodies/19.md | feat: return 405 when path exists for another method | enhancement |
v0.2.0 |
| 20 | bodies/20.md | feat: register HEAD/OPTIONS and sensible defaults | enhancement |
v0.2.0 |
Follow-up issues (milestone v0.2.0 / 0.2.0, feature research)
| # | GitHub | Body file | Title |
|---|---|---|---|
| 46 | issue | bodies/21.md | feat: sub-routers and route prefix composition (include_router) |
| 47 | issue | bodies/22.md | feat: multipart/form-data and urlencoded request bodies |
| 48 | issue | bodies/23.md | feat: global HTTPException and exception handlers |
| 49 | issue | bodies/24.md | feat: first-class CORS helper (middleware / preflight) |
| 50 | issue | bodies/25.md | research+docs: HTTP/2 with Granian/TLS and framework guarantees |
| 51 | issue | bodies/26.md | feat: Server-Sent Events (SSE) streaming responses |
| 52 | issue | bodies/27.md | research+feat: WebSocket support (Granian / ASGI integration) |
| 53 | issue | bodies/28.md | feat: optional CSRF protection for cookie/session-based flows |
| 54 | issue | bodies/29.md | feat: security headers preset (HSTS, X-Frame-Options, CSP, etc.) |
| 55 | - | bodies/47.md | research: sqlx integration in Rust hot path |
| 56 | - | bodies/48.md | feat: connection pool management in AppState |
| 57 | - | bodies/49.md | feat: dynamic query execution from Python dependencies |
| 58 | - | bodies/50.md | feat: serialize DB rows to Python objects via PyO3 |
See PRIORITIES.md for the current order (milestone v0.2.0 / release 0.2.0).
- docs/index.md — main English docs for contributors and users.
- CONTRIBUTING.md — how to build and test locally.