Skip to content

Commit dc3d549

Browse files
docs: add backlog tasks, add security.md, update agents.md
1 parent 5a91d83 commit dc3d549

6 files changed

Lines changed: 287 additions & 0 deletions

AGENTS.md

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,17 @@
1010
- If the token limit is close or it's over 50 LOC, print the line numbers and avoid comments altogether
1111
- Explain as much as possible in the chat unless asked to annotate (i.e., docstrings, newline comments, etc.)
1212

13+
## Context7
14+
15+
Always use Context7 MCP when I need library/API documentation, code generation, setup or configuration steps without me having to explicitly ask.
16+
17+
### Libraries
18+
19+
- fastapi/fastapi
20+
- roborev-dev/roborev
21+
- websites/deno
22+
- websites/taskfile_dev_usage
23+
1324
## Build, Lint, and Test Commands
1425

1526
- Full test suite: `uv run pytest` or `task test`
@@ -35,11 +46,13 @@
3546
When debugging GraphQL API issues (particularly for Meetup API):
3647

3748
### 1. Direct GraphQL Testing
49+
3850
- Test queries directly against the GraphQL endpoint using curl before debugging application code
3951
- Example: `curl -X POST "https://api.meetup.com/gql-ext" -H "Authorization: Bearer <token>" -H "Content-Type: application/json" -d '{"query": "query { self { id name } }"}'`
4052
- Start with simple queries (like `self { id name }`) then gradually add complexity
4153

4254
### 2. API Migration Validation
55+
4356
- Check API documentation for migration guides when encountering field errors
4457
- Common Meetup API changes:
4558
- `count``totalCount`
@@ -48,6 +61,7 @@ When debugging GraphQL API issues (particularly for Meetup API):
4861
- Syntax changes: `field(input: {first: N})``field(first: N)`
4962

5063
### 3. Response Structure Analysis
64+
5165
- Add temporary debug logging to inspect actual GraphQL responses
5266
- Check for `errors` array in GraphQL responses, not just HTTP status codes
5367
- Verify field existence with introspection or simple field queries
@@ -59,12 +73,85 @@ When debugging GraphQL API issues (particularly for Meetup API):
5973
```
6074

6175
### 4. Field Validation Process
76+
6277
- Use GraphQL validation errors to identify undefined fields
6378
- Test field names individually: `{ self { fieldName } }`
6479
- Check if field requires parameters (e.g., `memberEvents` requires `first`)
6580
- Validate nested field access patterns
6681

6782
### 5. Token and Authentication Debugging
83+
6884
- Verify token generation is working: `uv run python -c "from app.sign_jwt import main; print(main())"`
6985
- Test tokens directly against GraphQL endpoint outside of application
7086
- Check token expiration and refresh token logic
87+
88+
## Code Review (roborev)
89+
90+
Every commit is automatically reviewed by [roborev](https://www.roborev.io/) via git hooks. Reviews run in the background and findings must be addressed before merging.
91+
92+
Config: `.roborev.toml` (project), `~/.roborev/config.toml` (global)
93+
94+
### CLI Commands
95+
96+
```bash
97+
roborev show # List recent reviews
98+
roborev show --job <id> # View a specific review
99+
roborev show --job <id> --json # Machine-readable review output
100+
roborev fix # Fix all unaddressed reviews
101+
roborev fix <job_id> # Fix a specific review
102+
roborev fix --unaddressed --list # List unaddressed reviews without fixing
103+
roborev refine # Fix, re-review, repeat until passing
104+
roborev comment --job <id> "<msg>" # Add a comment to a review
105+
roborev address <job_id> # Mark a review as addressed
106+
```
107+
108+
### Agent Skills
109+
110+
| Skill | Purpose |
111+
| ----- | ------- |
112+
| `/roborev-review` | Request a code review for a specific commit |
113+
| `/roborev-review-branch` | Review all commits on the current branch |
114+
| `/roborev-fix` | Discover and fix all unaddressed review findings |
115+
| `/roborev-address` | Fetch a review and make code changes to address findings |
116+
| `/roborev-respond` | Comment on a review and mark it as addressed |
117+
| `/roborev-design-review` | Request a design review for a commit |
118+
| `/roborev-design-review-branch` | Design review for all commits on current branch |
119+
120+
### Workflow
121+
122+
1. **Commit** — roborev automatically reviews in the background
123+
2. **Check**`roborev show` or `roborev fix --unaddressed --list` to see findings
124+
3. **Fix**`/roborev-fix` addresses findings, runs tests, comments, and marks addressed
125+
4. **Refine**`roborev refine` loops fix-and-review in an isolated worktree until passing
126+
127+
When `roborev fix` cannot automatically resolve a finding, create a backlog task with the `roborev` label and reference the job ID.
128+
129+
<!-- BACKLOG.MD MCP GUIDELINES START -->
130+
131+
<CRITICAL_INSTRUCTION>
132+
133+
## BACKLOG WORKFLOW INSTRUCTIONS
134+
135+
This project uses Backlog.md MCP for all task and project management activities.
136+
137+
**CRITICAL GUIDANCE**
138+
139+
- If your client supports MCP resources, read `backlog://workflow/overview` to understand when and how to use Backlog for this project.
140+
- If your client only supports tools or the above request fails, call `backlog.get_workflow_overview()` tool to load the tool-oriented overview (it lists the matching guide tools).
141+
142+
- **First time working here?** Read the overview resource IMMEDIATELY to learn the workflow
143+
- **Already familiar?** You should have the overview cached ("## Backlog.md Overview (MCP)")
144+
- **When to read it**: BEFORE creating tasks, or when you're unsure whether to track work
145+
146+
These guides cover:
147+
148+
- Decision framework for when to create tasks
149+
- Search-first workflow to avoid duplicates
150+
- Links to detailed guides for task creation, execution, and finalization
151+
- MCP tools reference
152+
153+
You MUST read the overview resource to understand the complete workflow. The information is NOT summarized here.
154+
155+
</CRITICAL_INSTRUCTION>
156+
157+
<!-- BACKLOG.MD MCP GUIDELINES END -->

SECURITY.md

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
# Security Policy
2+
3+
* [Security Policy](#security-policy)
4+
* [Reporting Security Problems](#reporting-security-problems)
5+
* [Security Point of Contact](#security-point-of-contact)
6+
* [Incident Response Process](#incident-response-process)
7+
* [1. Containment](#1-containment)
8+
* [2. Response](#2-response)
9+
* [3. Remediation](#3-remediation)
10+
11+
<a name="reporting"></a>
12+
13+
## Reporting Security Problems
14+
15+
**DO NOT CREATE AN ISSUE** to report a security problem. Instead, please
16+
send an email to <burrows_remix6p@icloud.com>.
17+
18+
<a name="contact"></a>
19+
20+
## Security Point of Contact
21+
22+
The security point of contact is Lance Stephens. Lance responds to security incident reports as fast as possible, within one business day
23+
at the latest.
24+
25+
If they don't respond within two days, please try emailing again.
26+
27+
<a name="process"></a>
28+
29+
## Incident Response Process
30+
31+
In case an incident is discovered or reported, I will follow the following
32+
process to contain, respond and remediate:
33+
34+
### 1. Containment
35+
36+
The first step is to find out the root cause, nature and scope of the incident.
37+
38+
* Is still ongoing? If yes, first priority is to stop it.
39+
* Is the incident outside of my influence? If yes, first priority is to contain it.
40+
* Find out knows about the incident and who is affected.
41+
* Find out what data was potentially exposed.
42+
43+
### 2. Response
44+
45+
After the initial assessment and containment to my best abilities, I will
46+
document all actions taken in a response plan.
47+
48+
I will create a comment in [the issues](https://github.com/pythoninthegrass/meetup_bot/issues) to inform users about
49+
the incident and what I actions I took to contain it.
50+
51+
### 3. Remediation
52+
53+
Once the incident is confirmed to be resolved, I will summarize the lessons learned from the incident and create a list of actions I will
54+
take to prevent it from happening again.

backlog/config.yml

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
project_name: "meetup_bot"
2+
default_status: "To Do"
3+
statuses: ["To Do", "In Progress", "Done"]
4+
labels: []
5+
milestones: []
6+
date_format: yyyy-mm-dd
7+
max_column_width: 20
8+
auto_open_browser: true
9+
default_port: 6425
10+
remote_operations: false
11+
auto_commit: false
12+
zero_padded_ids: 3
13+
bypass_git_hooks: true
14+
check_active_branches: false
15+
active_branch_days: 30
16+
task_prefix: "task"
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
---
2+
id: TASK-001
3+
title: Bump FastAPI from >=0.115.6 to >=0.133.1
4+
status: To Do
5+
assignee: []
6+
created_date: '2026-02-26 16:25'
7+
labels:
8+
- dependencies
9+
dependencies: []
10+
references:
11+
- 'https://github.com/fastapi/fastapi/pull/14964'
12+
- pyproject.toml
13+
priority: low
14+
---
15+
16+
## Description
17+
18+
<!-- SECTION:DESCRIPTION:BEGIN -->
19+
Update FastAPI dependency in pyproject.toml from >=0.115.6 to >=0.133.1. This is a routine dependency bump covering ~18 minor versions. Notable changes include Rust-powered JSON serialization via Pydantic (0.131.0) and deprecation of ORJSONResponse/UJSONResponse. Test suite should be reviewed and updated before upgrading to ensure compatibility.
20+
<!-- SECTION:DESCRIPTION:END -->
21+
22+
## Acceptance Criteria
23+
<!-- AC:BEGIN -->
24+
- [ ] #1 Review and update test suite for compatibility with FastAPI 0.133.1 before upgrading
25+
- [ ] #2 Bump fastapi dependency to >=0.133.1 in pyproject.toml
26+
- [ ] #3 All existing tests pass after upgrade
27+
- [ ] #4 Verify /token, /healthz, /, and /auth/login endpoints work correctly
28+
<!-- AC:END -->
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
---
2+
id: TASK-002
3+
title: Replace pre-commit with prek
4+
status: In Progress
5+
assignee: []
6+
created_date: '2026-02-26 16:56'
7+
updated_date: '2026-02-26 17:16'
8+
labels:
9+
- tooling
10+
- dx
11+
dependencies: []
12+
references:
13+
- 'https://github.com/j178/prek'
14+
- .pre-commit-config.yaml
15+
- CLAUDE.md
16+
documentation:
17+
- 'https://prek.j178.dev'
18+
priority: medium
19+
ordinal: 1000
20+
---
21+
22+
## Description
23+
24+
<!-- SECTION:DESCRIPTION:BEGIN -->
25+
Replace the Python-based `pre-commit` tool with `prek` (j178/prek), a Rust-based reimplementation that is faster, dependency-free, and compatible with existing `.pre-commit-config.yaml` configuration.
26+
27+
## Current Setup
28+
29+
The project uses pre-commit with these hooks (`.pre-commit-config.yaml`):
30+
31+
- **gitleaks** (`zricethezav/gitleaks` v8.30.0) - secret detection
32+
- **ruff** (`astral-sh/ruff-pre-commit` v0.15.3) - Python linting with `--fix --exit-non-zero-on-fix`
33+
- **pre-commit-hooks** (`pre-commit/pre-commit-hooks` v6.0.0) - check-added-large-files, check-executables-have-shebangs, check-merge-conflict, check-shebang-scripts-are-executable, check-symlinks, debug-statements, destroyed-symlinks, detect-private-key, end-of-file-fixer, fix-byte-order-marker, mixed-line-ending, requirements-txt-fixer, check-toml, check-yaml, pretty-format-json
34+
35+
## Migration Notes
36+
37+
- prek is a drop-in replacement that reads `.pre-commit-config.yaml` natively
38+
- prek has built-in Rust implementations for `pre-commit-hooks` repo hooks (faster)
39+
- Install via `mise` (preferred): add `prek` to `.tool-versions` or `mise.toml`
40+
- Run `prek install` to set up git hooks
41+
- Run `prek run --all-files` to verify all hooks pass
42+
- Update Taskfile, CLAUDE.md, and CI workflows to reference `prek` instead of `pre-commit`
43+
<!-- SECTION:DESCRIPTION:END -->
44+
45+
## Acceptance Criteria
46+
<!-- AC:BEGIN -->
47+
- [ ] #1 prek is installed via mise and configured as the git hook runner
48+
- [ ] #2 All existing hooks (gitleaks, ruff, pre-commit-hooks) pass with prek
49+
- [ ] #3 pre-commit Python package is removed from dev dependencies
50+
- [ ] #4 Taskfile `pre-commit` task updated to use prek
51+
- [ ] #5 CLAUDE.md references updated from pre-commit to prek
52+
- [ ] #6 CI workflows updated if applicable
53+
- [ ] #7 `prek run --all-files` passes cleanly
54+
<!-- AC:END -->
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
---
2+
id: TASK-003
3+
title: Replace Node.js with Deno via mise
4+
status: In Progress
5+
assignee: []
6+
created_date: '2026-02-26 17:10'
7+
updated_date: '2026-02-26 17:16'
8+
labels:
9+
- infra
10+
- deno
11+
- mise
12+
dependencies: []
13+
priority: medium
14+
ordinal: 2000
15+
---
16+
17+
## Description
18+
19+
<!-- SECTION:DESCRIPTION:BEGIN -->
20+
Replace the Node.js runtime with Deno for all JS/TS tooling in the project.
21+
22+
**Current state:**
23+
- `.tool-versions` declares `nodejs 24.5.0`
24+
- `package.json` has commitlint and cz-conventional-changelog dependencies
25+
- `package-lock.json` exists with Node.js dependency tree
26+
- `taskfiles/deno.yml` already exists with Deno-based task definitions (vite, playwright, etc.)
27+
- `devbox.json` references `nodejs`
28+
29+
**Work required:**
30+
1. Install Deno via mise (`mise use deno@latest`) and remove Node.js from `.tool-versions`
31+
2. Migrate commitlint and commitizen (cz-conventional-changelog) to Deno-compatible alternatives or run via `deno run -A npm:`
32+
3. Remove `package.json`, `package-lock.json`, and `node_modules/` once all deps are migrated
33+
4. Update `devbox.json` to replace `nodejs` with `deno`
34+
5. Update `.pre-commit-config.yaml` if any hooks depend on Node.js
35+
6. Wire up `taskfiles/deno.yml` into `taskfile.yml` (replace `taskfiles/poetry.yml` or Node-based includes)
36+
7. Verify all task commands work with Deno runtime
37+
<!-- SECTION:DESCRIPTION:END -->
38+
39+
## Acceptance Criteria
40+
<!-- AC:BEGIN -->
41+
- [ ] #1 Node.js removed from .tool-versions
42+
- [ ] #2 Deno installed via mise and declared in .tool-versions
43+
- [ ] #3 package.json and package-lock.json removed
44+
- [ ] #4 commitlint and commitizen work under Deno
45+
- [ ] #5 All task commands in taskfile.yml pass
46+
- [ ] #6 devbox.json updated to reference deno instead of nodejs
47+
- [ ] #7 Pre-commit hooks function without Node.js
48+
<!-- AC:END -->

0 commit comments

Comments
 (0)