added backlog to help me manage claude things

This commit is contained in:
Jun-te Kim 2026-04-18 19:08:56 +00:00
parent b81a1aaf61
commit 0afb2c14c7
14 changed files with 190 additions and 6931 deletions

View file

@ -23,6 +23,9 @@ RUN curl -fsSL https://deb.nodesource.com/setup_22.x | bash - \
&& node -v \
&& npm -v
# Install Backlog.md (task/todo CLI: https://github.com/MrLesk/Backlog.md)
RUN npm install -g backlog.md
# # Install aws
# RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
# RUN unzip awscliv2.zip

View file

@ -5,8 +5,8 @@
"remoteUser": "vscode",
"workspaceFolder": "/workspaces/assessment-model",
"postStartCommand": "bash .devcontainer/post-install.sh",
"forwardPorts": [3000], # For vscode
"appPort": ["3000:3000"], # For devcontainer shell
"forwardPorts": [3000, 6420], # 3000 = Next.js, 6420 = Backlog.md browser
"appPort": ["3000:3000", "6420:6420"], # For devcontainer shell
"mounts": [
// Optional, just makes getting from Downloads (local env) easier
"source=${localEnv:HOME},target=/workspaces/home,type=bind"

9
.mcp.json Normal file
View file

@ -0,0 +1,9 @@
{
"mcpServers": {
"backlog": {
"type": "stdio",
"command": "backlog",
"args": ["mcp", "start"]
}
}
}

View file

@ -7,3 +7,11 @@
## Next.js 15 route handlers
- `params` is a `Promise` — type as `{ params: Promise<{ ... }> }` and `await params` before destructuring.
## Task tracking — Backlog.md
- Project uses [Backlog.md](https://github.com/MrLesk/Backlog.md) for manual/human todos (CLI `backlog`, web UI on port 6420).
- MCP server is wired via `.mcp.json` — tools exposed under the `backlog` server. Use those tools instead of shelling out when possible.
- Tasks live as markdown under `backlog/tasks/`. Committed to git. Read them for context on outstanding manual work (env vars, IAM, infra) owed by humans.
- To start the web UI during development: `backlog browser` (port 6420, forwarded by devcontainer).
- Do NOT mirror Backlog.md tasks into Claude's internal todo system. Use one or the other — Backlog for durable cross-session work, internal todos for within-turn progress tracking.

14
backlog/config.yml Normal file
View file

@ -0,0 +1,14 @@
project_name: "assessment-model"
default_status: "To Do"
statuses: ["To Do", "In Progress", "Done"]
labels: []
date_format: yyyy-mm-dd
max_column_width: 20
auto_open_browser: false
default_port: 6420
remote_operations: false
auto_commit: false
bypass_git_hooks: false
check_active_branches: true
active_branch_days: 30
task_prefix: "task"

View file

@ -0,0 +1,26 @@
---
id: TASK-1
title: Add BULK_ADDRESS2UPRN_COMBINER_QUEUE_NAME to staging and prod env
status: To Do
assignee:
- Jun-te Kim
created_date: '2026-04-18 19:01'
labels:
- env
- infra
dependencies: []
priority: high
---
## Description
<!-- SECTION:DESCRIPTION:BEGIN -->
Dev .env.local has it; non-dev envs still missing. Combine route returns 500 'Server misconfiguration' without it.
<!-- SECTION:DESCRIPTION:END -->
## Acceptance Criteria
<!-- AC:BEGIN -->
- [ ] #1 Value set in staging env: bulk-address2uprn-combiner-queue-staging (or matching stage suffix)
- [ ] #2 Value set in prod env: bulk-address2uprn-combiner-queue-prod
- [ ] #3 Deploy redeployed; /api/portfolio/{pid}/bulk-uploads/{uid}/combine returns 200 not 500
<!-- AC:END -->

View file

@ -0,0 +1,25 @@
---
id: TASK-2
title: 'Grant sqs:SendMessage IAM on combiner queue to assessment-model runtime'
status: To Do
assignee:
- Jun-te Kim
created_date: '2026-04-18 19:01'
labels:
- infra
- iam
dependencies: []
priority: high
---
## Description
<!-- SECTION:DESCRIPTION:BEGIN -->
Combine route sends to bulk-address2uprn-combiner-queue-<stage>. Runtime role needs sqs:SendMessage + sqs:GetQueueUrl on that queue ARN.
<!-- SECTION:DESCRIPTION:END -->
## Acceptance Criteria
<!-- AC:BEGIN -->
- [ ] #1 IAM policy updated in terraform for staging + prod
- [ ] #2 Verified via AWS console or 'aws sqs get-queue-url' using runtime creds
<!-- AC:END -->

View file

@ -0,0 +1,26 @@
---
id: TASK-3
title: Deploy bulk_address2uprn_combiner Lambda + queue via terraform to staging/prod
status: To Do
assignee:
- Jun-te Kim
created_date: '2026-04-18 19:01'
labels:
- infra
- terraform
dependencies: []
priority: high
---
## Description
<!-- SECTION:DESCRIPTION:BEGIN -->
Lambda source at /workspaces/home/github/Model/backend/bulk_address2uprn_combiner/. Uses lambda_with_sqs module. Needs S3_BUCKET_NAME=retrofit_sap_data_bucket_name and DB creds envs. Confirm queue name convention bulk-address2uprn-combiner-queue-<stage>.
<!-- SECTION:DESCRIPTION:END -->
## Acceptance Criteria
<!-- AC:BEGIN -->
- [ ] #1 Lambda + queue exist in staging
- [ ] #2 Lambda + queue exist in prod
- [ ] #3 Lambda has read on ara_raw_outputs/ and write on bulk_final_outputs/ in retrofit_sap_data bucket
<!-- AC:END -->

View file

@ -0,0 +1,27 @@
---
id: TASK-4
title: Smoke-test combiner end-to-end on dev
status: To Do
assignee:
- Jun-te Kim
created_date: '2026-04-18 19:02'
labels:
- qa
- bulk-upload
dependencies: []
priority: medium
---
## Description
<!-- SECTION:DESCRIPTION:BEGIN -->
After env var + IAM ready, run a real bulk upload -> map columns -> onboard -> wait for terminal complete. Confirm combiner fires.
<!-- SECTION:DESCRIPTION:END -->
## Acceptance Criteria
<!-- AC:BEGIN -->
- [ ] #1 POST /combine returns 200 with {taskId, subTaskId}
- [ ] #2 CloudWatch for bulk_address2uprn_combiner shows the subtask picked up
- [ ] #3 bulk_final_outputs/{task_id}/combined_<timestamp>.csv exists in retrofit_sap_data bucket
- [ ] #4 bulk_address_uploads.combined_output_s3_uri populated for the test upload
<!-- AC:END -->

View file

@ -0,0 +1,28 @@
---
id: TASK-5
title: >-
Squash migrations 0178 (DROP) + 0179 (re-ADD) next time bulk_address_uploads
touched
status: Done
assignee:
- Jun-te Kim
created_date: '2026-04-18 19:02'
updated_date: '2026-04-18 19:06'
labels:
- tech-debt
- db
dependencies: []
priority: low
---
## Description
<!-- SECTION:DESCRIPTION:BEGIN -->
0178 DROPs task_id + combined_output_s3_uri; 0179 re-ADDs them. Net-zero on live, wasted churn on fresh envs. Collapse to single migration next time schema changes in this area.
<!-- SECTION:DESCRIPTION:END -->
## Implementation Notes
<!-- SECTION:NOTES:BEGIN -->
Squashed in-place: deleted 0179.sql + 0179_snapshot.json, removed from _journal.json, patched 0178_snapshot.json to include task_id + combined_output_s3_uri cols. Orphan row may remain in live __drizzle_migrations but drizzle tolerates it.
<!-- SECTION:NOTES:END -->

View file

@ -1,2 +0,0 @@
ALTER TABLE "bulk_address_uploads" ADD COLUMN "task_id" uuid;--> statement-breakpoint
ALTER TABLE "bulk_address_uploads" ADD COLUMN "combined_output_s3_uri" text;

View file

@ -303,6 +303,18 @@
"primaryKey": false,
"notNull": false
},
"task_id": {
"name": "task_id",
"type": "uuid",
"primaryKey": false,
"notNull": false
},
"combined_output_s3_uri": {
"name": "combined_output_s3_uri",
"type": "text",
"primaryKey": false,
"notNull": false
},
"created_at": {
"name": "created_at",
"type": "timestamp with time zone",
@ -6467,8 +6479,8 @@
"schema": "public",
"values": [
"none",
"cladded with “sufficient space to fill the wall”",
"cladded with “insufficient space to fill the wall”"
"cladded with \u201csufficient space to fill the wall\u201d",
"cladded with \u201cinsufficient space to fill the wall\u201d"
]
},
"public.inspections_insulation_material": {
@ -6495,8 +6507,8 @@
"schema": "public",
"values": [
"no render",
"rendered with “insufficient” space between dpc and render",
"rendered with “sufficient” space between dpc and render"
"rendered with \u201cinsufficient\u201d space between dpc and render",
"rendered with \u201csufficient\u201d space between dpc and render"
]
},
"public.inspections_roof_orientation": {
@ -6850,13 +6862,13 @@
"schema": "public",
"values": [
"1",
"25",
"620",
"2\u20135",
"6\u201320",
"21+",
"150",
"51100",
"101300",
"3011000",
"1\u201350",
"51\u2013100",
"101\u2013300",
"301\u20131000",
"1000+"
]
},

File diff suppressed because it is too large Load diff

View file

@ -1254,13 +1254,6 @@
"when": 1776458454019,
"tag": "0178_parched_midnight",
"breakpoints": true
},
{
"idx": 179,
"version": "7",
"when": 1776459924335,
"tag": "0179_mighty_cardiac",
"breakpoints": true
}
]
}