Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
a19a4aa
docs: correct stale references after layout flatten
TonyPythoneer May 14, 2026
609f718
refactor(settings): fix entrypoint defaults and deduplicate test env …
TonyPythoneer May 15, 2026
06ac8ae
refactor(tasks): fix retry status semantics and remove stale OTel flush
TonyPythoneer May 15, 2026
9729ed0
refactor(storage): extract decorator and clean up S3 client config
TonyPythoneer May 15, 2026
f84d4d1
refactor(storage): rename utils.py → storage.py and update all refere…
TonyPythoneer May 15, 2026
75c622f
refactor(views): eliminate JSON-parse boilerplate and unify gallery s…
TonyPythoneer May 15, 2026
18a6f1b
refactor(models): make thumbnail_key required and fix N+1 queries
TonyPythoneer May 15, 2026
b3c43d9
refactor(models): remove dead settings, dedup __str__ timestamp logic
TonyPythoneer May 15, 2026
9ac9b94
test: strengthen suite (refinement #08)
TonyPythoneer May 15, 2026
24b3857
chore(tooling): switch type checker from pyright to pyrefly
TonyPythoneer May 15, 2026
8d34d7f
chore(tooling): finalize task 09 — ruff config, CI gate, make migrate
TonyPythoneer May 15, 2026
52b2d22
refactor(tasks): merge validate+thumbnail into single PIL open
TonyPythoneer May 15, 2026
b467b72
tasks: check the tick status for refinement
TonyPythoneer May 15, 2026
3dea9f3
docs: finalize task 01 — align OBSERVABILITY.md with real wiring
TonyPythoneer May 15, 2026
da07e15
refactor(otel): move web telemetry init to project-level CoreConfig
TonyPythoneer May 15, 2026
4853d15
refactor(images): pull ImageTask runtime import to top of tasks.py
TonyPythoneer May 15, 2026
afb7440
test(api): assert images_list issues constant queries
TonyPythoneer May 15, 2026
fe425f5
docs(tasks): close refinement plan — task 10 verification gate
TonyPythoneer May 15, 2026
25bf195
ci: align integration workflow with project defaults
TonyPythoneer May 15, 2026
587a2c2
chore(tasks): remove refinement plan and prune CLAUDE.md
TonyPythoneer May 15, 2026
67bf785
Merge pull request #2 from TonyPythoneer/refactor/simply
TonyPythoneer May 15, 2026
4c52eb1
chore(skills): retire uv plugin and prune README ghost skills
TonyPythoneer May 15, 2026
8d04e5c
chore(skills): align type checker references to pyrefly
TonyPythoneer May 15, 2026
04b5c81
feat(skills): complete wave 1 — celery-patterns skill plus htmx cleanup
TonyPythoneer May 15, 2026
3883f88
feat(skills): complete waves 2-3 — storage-s3, opentelemetry-patterns…
TonyPythoneer May 15, 2026
56f5a35
chore(skills): retire SKILLS_HIRE / SKILLS_RESEARCH planning docs
TonyPythoneer May 15, 2026
e07ba5b
chore(skills): add andrej-karpathy-skills
TonyPythoneer May 15, 2026
8597184
Merge pull request #4 from TonyPythoneer/claude/skills
TonyPythoneer May 15, 2026
4c65a8c
chore(typing): enforce ruff ANN rules, ban Any
TonyPythoneer May 15, 2026
ed4310f
chore(typing): extend ANN coverage to manage.py, conftest, tests
TonyPythoneer May 15, 2026
005df2f
refactor(tests): parametrize test_api.py ownership/payload matrices
TonyPythoneer May 15, 2026
d17cb36
refactor(tests): introduce typed factory helpers (make_image et al.)
TonyPythoneer May 15, 2026
5381918
chore(typing): clear remaining pyrefly errors in tests + management
TonyPythoneer May 16, 2026
1917e61
refactor(api): remove user-facing task cancel endpoint
TonyPythoneer May 16, 2026
846817f
refactor(tests): clarify intent of test helpers and parametrize matrices
TonyPythoneer May 16, 2026
50c0909
feat(smoke): propagate trace context from smoke tests into Jaeger
TonyPythoneer May 16, 2026
4cdeb39
refactor(smoke): extract typed Jaeger client + simplify root span
TonyPythoneer May 16, 2026
47d3d2e
Merge pull request #5 from TonyPythoneer/chore/typing
TonyPythoneer May 16, 2026
4abfa40
refactor(settings): centralize test accounts via settings.TEST_USERS
TonyPythoneer May 16, 2026
a777cad
chore(typing): add types-requests dev dep
TonyPythoneer May 16, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
135 changes: 135 additions & 0 deletions .claude/SKILLS_POLICY.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,135 @@
# .claude/SKILLS_POLICY.md — Skills Enablement Policy

> This document governs how the ~36 skills bundled in the
> `python-engineering@jamie-bitflight-skills` plugin should be used (or
> ignored) for this project. The plugin is installed atomically — individual
> skills cannot be removed — so policy is the only available control.
>
> **Baseline**: 2026-05-16 **Branch**: `claude/skills`
>
> **Project stack divergence from plugin defaults** (read first):
> - **No** `src/` layout — Django app-per-folder (`images/`, `django_thumbnail/`)
> - **No** `prek` — pre-commit hook framework is not installed
> - **No** Astral `ty` — type-checking is done with `pyrefly` (Meta's checker, used by `make check`)
> - **Not** a CLI / TUI / PyPI package — this is a Django web app + Celery worker
> - **No** asyncio — synchronous Django views + Celery tasks
> - **No** Typer / Rich — Django views + bootstrap5 templates

---

## 1. Approved (use as conceptual reference)

The skills below are treated as **principle references**. **Do not copy
commands verbatim** — their tooling assumptions (`src/` layout, `prek`,
`ty`, etc.) do not match this project.

| Skill | Use | Caveats |
|---|---|---|
| `python-engineering:python3-web` | Django/Flask/FastAPI design principles | Apply Django sections only; ignore FastAPI/async parts |
| `python-engineering:python3-typing` | Typing strategy (Protocol, TypedDict, TypeIs) | Use with **pyrefly**; skip ty-specific directives |
| `python-engineering:python3-testing` | pytest fixture / coverage strategy | Concepts only; concrete fixtures live in local `pytest-django-patterns` |
| `python-engineering:python3-core` | Python 3.11+ SOLID / design signals | General-purpose, no conflict |
| `python-engineering:python3-tdd` | Five-phase red-green-refactor flow | Concept usable; align tool commands to ruff + pyrefly + pytest |
| `python-engineering:python3-test-design` | Test pyramid / coverage tiering | Pure strategy, no tooling conflict |
| `python-engineering:modernpython` | PEP 585 / 604 / 634 / 673 modern syntax | General-purpose, no conflict |
| `python-engineering:comprehensive-test-review` | Test-suite review checklist | Complements local `code-quality` (former is quality strategy, latter is command execution) |
| `python-engineering:analyze-test-failures` | Test-failure root-cause method | General-purpose, no conflict |
| `python-engineering:test-failure-mindset` | Dual-hypothesis investigation mindset | General-purpose, no conflict |
| `python-engineering:standards-for-python-development` | Shared Python 3.11+ standards | Concepts only; tool commands defer to this project |
| `python-engineering:uv` | uv usage | This project manages dev deps with uv; safe to consult |

**Total: 12 skills**

---

## 2. Disabled

These skills conflict with this project's stack or duplicate local tools.

### 2.1 CLI / TUI family (no CLI/TUI surface in this project)

- `python-engineering:typer`
- `python-engineering:typer-and-rich`
- `python-engineering:textual`
- `python-engineering:python3-cli`
- `python-engineering:designing-ui-for-cli`
- `python-engineering:python-cross-platform-smoothing`

### 2.2 Packaging / publishing family (this is not a PyPI package)

- `python-engineering:hatchling`
- `python-engineering:python3-packaging`
- `python-engineering:pypi-readme-creator`
- `python-engineering:python3-publish-release-pipeline`
- `python-engineering:shebangpython`
- `python-engineering:mkdocs`

### 2.3 Orchestrator / SAM family (conflicts with local task flow)

- `python-engineering:orchestrate`
- `python-engineering:orchestrating-python-development`
- `python-engineering:python3-add-feature`
- `python-engineering:create-feature-task`
- `python-engineering:specialist-skill-routing`

### 2.4 Tool assumptions mismatch this project

- `python-engineering:ty` — this project uses **pyrefly**, not Astral ty
- `python-engineering:stinkysnake` — assumes prek + ty + `src/` layout
- `python-engineering:snakepolish` — downstream of the stinkysnake workflow
- `python-engineering:pre-commit` — this project has no prek / pre-commit framework
- `python-engineering:toml-python` — this project does not need dynamic TOML read/write
- `python-engineering:python3-tools` — aggregator routing to ty / hatchling / prek skills already disabled here

### 2.5 Stack not applicable

- `python-engineering:async-python-patterns` — this project is synchronous Django + Celery, no asyncio
- `python-engineering:python3-data` — no pandas / polars / DuckDB usage
- `python-engineering:python3-stdlib-only` — this project has third-party deps, not airgapped

**Total: 24 skills**

---

## 3. Pending evaluation

Currently empty — all 36 plugin skills (12 approved + 24 disabled) are classified above.
When the plugin ships new skills, place them here first, then promote
to §1 or §2 after evaluation.

---

## 4. Mapping to local tools

| Need | Use local | Why not the python-engineering counterpart |
|---|---|---|
| Code review | `.claude/agents/code-reviewer.md` | `python-engineering`'s review flow depends on `dh:` / `holistic-linting` plugins not installed here |
| Lint / format / type / test bundle | `.claude/skills/code-quality/SKILL.md` | No equivalent plugin skill; **do not** substitute stinkysnake |
| In-edit fast check | `.claude/commands/fix.md` | No equivalent plugin skill |
| Celery patterns | `.claude/skills/celery-patterns/SKILL.md` | python-engineering has no Celery-specific skill |
| Django models / forms / templates | `.claude/skills/django-*/SKILL.md` | python-engineering's `python3-web` is concept-only reference |
| pytest + Django + Factory Boy | `.claude/skills/pytest-django-patterns/SKILL.md` | python-engineering's `python3-testing` is concept-only reference |

---

## 5. Quality-check chain (P4)

| Stage | Entry point | Tool scope |
|---|---|---|
| **Inner loop** (while editing) | `/fix` (local) | `ruff check` + `ruff format --check` + `pyrefly check` — on modified files only |
| **Pre-PR** (before submitting) | `/code-quality apps/` (local) + `code-reviewer` agent | Full sweep: lint + format + types + `pytest` + manual checklist |
| **Disabled** | python-engineering's command-style `lint` / `review` / `debug` / `cleanup` skills | Duplicate local tools; use local versions |

**Rules**:
1. During editing, run only `/fix` — fast, scoped to modified files.
2. Before submitting a PR, run `/code-quality apps/` and trigger the `code-reviewer` agent.
3. CI runs `make check` (pyrefly) + `make test` (pytest) — consistent with local tooling.
4. **Never** substitute `python-engineering:stinkysnake` or `:snakepolish` for the above (their tool assumptions do not match).

---

## 6. Maintenance

- Revisit this list when the python-engineering plugin upgrades (new skills go to §3 pending).
- When adding a new local skill that overlaps an existing python-engineering skill, **record the rationale for choosing the local version** in §4.
- If the django-extensions package is later installed (currently DORMANT — see `.claude/skills/django-extensions/SKILL.md`), the local `django-extensions` skill policy is handled separately — it is unrelated to python-engineering policy.
7 changes: 1 addition & 6 deletions .claude/agents/code-reviewer.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,17 +31,13 @@ Senior code reviewer ensuring high standards for the Django codebase.
### Django Views
- **Correct HTTP methods** - GET for reads, POST for writes
- **Proper status codes** - 200, 201, 400, 404, etc.
- **HTMX handling** - Check `request.htmx` for partial responses
- **select_related/prefetch_related** - Avoid N+1 queries

```python
# CORRECT - Proper view pattern
def post_list(request):
posts = Post.objects.select_related("author").all()

if request.htmx:
return render(request, "posts/_list.html", {"posts": posts})

return render(request, "posts/list.html", {"posts": posts})
```

Expand Down Expand Up @@ -148,14 +144,13 @@ if form.is_valid(): # Good
## Review Process

1. **Run checks**: `uv run ruff check .` for linting
2. **Type check**: `uv run pyright` for type errors
2. **Type check**: `uv run pyrefly check` for type errors
3. **Analyze diff**: `git diff` for all changes
4. **Logic review**: Read line by line, trace execution paths
5. **Apply checklist**: Python, Django, testing, security

## Integration with Other Skills

- **htmx-alpine-patterns**: Partial template responses
- **django-models**: QuerySet optimization
- **django-forms**: Form validation patterns
- **pytest-django-patterns**: Factory functions, fixtures
Expand Down
2 changes: 1 addition & 1 deletion .claude/commands/fix.md
Original file line number Diff line number Diff line change
@@ -1 +1 @@
Run `ruff check`, `ruff format --check`, and `ty check` on the files that were modified. Fix any errors or warnings reported. Do not suppress errors with `# noqa` or `# type: ignore` unless absolutely necessary.
Run `ruff check`, `ruff format --check`, and `pyrefly check` on the files that were modified. Fix any errors or warnings reported. Do not suppress errors with `# noqa` or `# type: ignore` unless absolutely necessary.
6 changes: 3 additions & 3 deletions .claude/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@
"hooks": [
{
"type": "command",
"command": "bash -c 'case \"$CLAUDE_TOOL_INPUT_FILE_PATH\" in *.py) echo \"{\\\"feedback\\\": \\\"Type checking with pyright...\\\"}\" >&2; output=$(uv run pyright \"$CLAUDE_TOOL_INPUT_FILE_PATH\" 2>&1); if [ $? -eq 0 ]; then echo \"{\\\"feedback\\\": \\\"No type errors.\\\", \\\"suppressOutput\\\": true}\"; else echo \"$output\" | head -20 >&2; echo \"{\\\"feedback\\\": \\\"Pyright found type errors.\\\"}\" >&2; fi; exit 0 ;; esac'",
"command": "bash -c 'case \"$CLAUDE_TOOL_INPUT_FILE_PATH\" in *.py) echo \"{\\\"feedback\\\": \\\"Type checking with pyrefly...\\\"}\" >&2; output=$(uv run pyrefly check \"$CLAUDE_TOOL_INPUT_FILE_PATH\" 2>&1); if [ $? -eq 0 ]; then echo \"{\\\"feedback\\\": \\\"No type errors.\\\", \\\"suppressOutput\\\": true}\"; else echo \"$output\" | head -20 >&2; echo \"{\\\"feedback\\\": \\\"Pyrefly found type errors.\\\"}\" >&2; fi; exit 0 ;; esac'",
"timeout": 30
}
]
Expand All @@ -83,7 +83,7 @@
]
},
"enabledPlugins": {
"uv@jamie-bitflight-skills": true,
"python-engineering@jamie-bitflight-skills": true
"python-engineering@jamie-bitflight-skills": true,
"andrej-karpathy-skills@karpathy-skills": true
}
}
4 changes: 2 additions & 2 deletions .claude/settings.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,9 +38,9 @@
- **Command**: `uv run pytest <file> -x -q`
- **Behavior**: Runs tests in modified file, shows last 30 lines of output, non-blocking

4. **Pyright Type Check**: Type-check Python files (30s timeout)
4. **Pyrefly Type Check**: Type-check Python files (30s timeout)
- **Triggers**: After editing `.py` files
- **Command**: `uv run pyright`
- **Command**: `uv run pyrefly check`
- **Behavior**: Shows first 20 lines of errors only, non-blocking, exit 0

5. **Ruff Linting**: Lint Python files (30s timeout)
Expand Down
15 changes: 2 additions & 13 deletions .claude/skills/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,8 @@ This directory contains project-specific skills that provide Claude with domain
### Workflows
| Skill | Description |
|-------|-------------|
| [onboard](./onboard/SKILL.md) | Onboard Claude to a new task by exploring the codebase and building context |
| [ticket](./ticket/SKILL.md) | Work on a JIRA/Linear ticket end-to-end |
| [pr-review](./pr-review/SKILL.md) | Review a pull request using project standards |
| [pr-summary](./pr-summary/SKILL.md) | Generate a pull request summary for the current branch |
| [code-quality](./code-quality/SKILL.md) | Run code quality checks and report findings by severity |
| [docs-sync](./docs-sync/SKILL.md) | Check if documentation is in sync with code |
| [worktree-commit-merge](./worktree-commit-merge/SKILL.md) | Commit worktree changes, merge into master/main, sync branch |

### Testing & Debugging
| Skill | Description |
Expand All @@ -34,11 +29,6 @@ This directory contains project-specific skills that provide Claude with domain
| [django-forms](./django-forms/SKILL.md) | Form handling, validation, ModelForm patterns |
| [django-templates](./django-templates/SKILL.md) | Template inheritance, tags, filters, partials |

### Frontend & UI
| Skill | Description |
|-------|-------------|
| [htmx-patterns](./htmx-patterns/SKILL.md) | HTMX attributes, partial templates, dynamic UI |

### Background Tasks
| Skill | Description |
|-------|-------------|
Expand All @@ -49,9 +39,8 @@ This directory contains project-specific skills that provide Claude with domain
### Building a New Feature
1. **django-models** - Design models
2. **django-forms** - Create forms for user input
3. **htmx-patterns** - Dynamic UI
4. **django-templates** - Page templates
5. **pytest-django-patterns** - Write tests (TDD)
3. **django-templates** - Page templates
4. **pytest-django-patterns** - Write tests (TDD)

### Building a Background Task
1. **celery-patterns** - Task definition
Expand Down
Loading
Loading