max / goingson
- Co-Authored-By
- Claude Opus 5 (1M context) <noreply@anthropic.com>
1 file changed,
+0 insertions,
-133 deletions
| @@ -1,133 +1,0 @@ | |||
| 1 | - | # Task-to-Problem migration plan | |
| 2 | - | ||
| 3 | - | Written 2026-07-25. One-time triage of the GoingsOn backlog against the Problems | |
| 4 | - | inbox that migration 061 introduces. | |
| 5 | - | ||
| 6 | - | ## Why | |
| 7 | - | ||
| 8 | - | GoingsOn is the list of solutions. The Tasks view had 643 open rows, most of them | |
| 9 | - | candidates rather than committed work: audit findings, deferred piles, numbered | |
| 10 | - | backlog phases. That is the same shape as an unread inbox, and the fix is the same | |
| 11 | - | one email got. A problem is pre-triage; promoting it is what creates a task. | |
| 12 | - | ||
| 13 | - | Target: Tasks drops from 643 open to roughly 90. | |
| 14 | - | ||
| 15 | - | ## The line | |
| 16 | - | ||
| 17 | - | A row stays a task only if it is committed work: | |
| 18 | - | ||
| 19 | - | - tagged with an active ship set (`af-ship`, `go-ship`, `bb-ship`) | |
| 20 | - | - tagged `phase-0` (security and de-risk that gates a credible ship) | |
| 21 | - | - `status = Started` | |
| 22 | - | ||
| 23 | - | Everything else becomes a problem. That includes, explicitly: | |
| 24 | - | ||
| 25 | - | - every `deepaudit` / `deepexorcise` / `fuzz` rollup and finding | |
| 26 | - | - everything tagged `deferred` | |
| 27 | - | - mnw-server Phase 8 through Phase 12 | |
| 28 | - | - sando Phase 5 through Phase 9 | |
| 29 | - | - the goingson `dellm` `sprint-*` pile | |
| 30 | - | - feature wishlists, UX polish, open questions, "decide X" stubs | |
| 31 | - | ||
| 32 | - | ## The move, per task | |
| 33 | - | ||
| 34 | - | 1. `report_problems` with: | |
| 35 | - | - `source`: `task-migration` | |
| 36 | - | - `source_ref`: the original task id (provenance survives, and a re-run | |
| 37 | - | upserts rather than duplicating) | |
| 38 | - | - `title`: the task's first line | |
| 39 | - | - `body`: the full task description, plus a `Migrated from task <id>` line | |
| 40 | - | - `project`: the task's project name | |
| 41 | - | - `tags`: the task's tags, unchanged | |
| 42 | - | - `pain` / `scale`: scored per the table below | |
| 43 | - | 2. `update_task` with `status: "Deleted"`. | |
| 44 | - | ||
| 45 | - | ### On step 2 | |
| 46 | - | ||
| 47 | - | There is no `delete_task` tool in go-mcp. `Deleted` is the app's real soft-delete: | |
| 48 | - | every repo query filters `status != 'Deleted'`, so the row leaves all views without | |
| 49 | - | being faked into `Completed` and polluting the done history. It is reversible by | |
| 50 | - | setting `status` back to `Pending`. | |
| 51 | - | ||
| 52 | - | ### Scoring | |
| 53 | - | ||
| 54 | - | `pain` is how much it hurts a hit user; `scale` is how broadly it hits. Both 1-5. | |
| 55 | - | Together with age they drive the painhours ranking, so an untriaged problem climbs | |
| 56 | - | on its own. | |
| 57 | - | ||
| 58 | - | | Input | Effect | | |
| 59 | - | |---|---| | |
| 60 | - | | priority High | pain 4, scale 4 | | |
| 61 | - | | priority Medium | pain 3, scale 3 | | |
| 62 | - | | priority Low | pain 2, scale 2 | | |
| 63 | - | | tagged `deferred` | pain 1 (overrides the above) | | |
| 64 | - | | tagged `security` | pain +1, capped at 5 | | |
| 65 | - | | tagged `blocked` or `human` | scale unchanged, no boost (it is not ours to move) | | |
| 66 | - | ||
| 67 | - | Age is taken from the task's own creation instant, not the migration run, so a | |
| 68 | - | finding filed weeks ago does not read as new. | |
| 69 | - | ||
| 70 | - | ## Order | |
| 71 | - | ||
| 72 | - | Run project by project, largest first, verifying the count after each: | |
| 73 | - | ||
| 74 | - | goingson (140), mnw-server (102), sando (64), synckit-client (52), audiofiles (42), | |
| 75 | - | multithreaded (39), balanced_breakfast (33), everycycle (33), alloy (19), spaghetti | |
| 76 | - | (12), pom (12), infra (10), buckets_of_money (10), livechat (9), wam (9), deox (9), | |
| 77 | - | docengine (8), kberg (7), haircut (6), bento (6), mnw-cli (6), tagtree (5), | |
| 78 | - | pom-contract (4), ops-exec (3), MNW (1), s3-storage (1), pter (1). | |
| 79 | - | ||
| 80 | - | ## Rollback | |
| 81 | - | ||
| 82 | - | Pre-migration DB snapshot: `~/.local/share/com.goingson.app/goingson.db.pre-problems-20260725` | |
| 83 | - | (6.7 MB, 1082 tasks, 35 projects, schema at migration 058). | |
| 84 | - | ||
| 85 | - | Per-task rollback without restoring: `update_task {id, status: "Pending"}`. The | |
| 86 | - | problem row can stay; it is a mirror, and a task that returns simply has both. | |
| 87 | - | ||
| 88 | - | ## Prerequisites | |
| 89 | - | ||
| 90 | - | - [x] DB snapshot taken | |
| 91 | - | - [x] go-mcp rebuilt from `bfa70e9` and installed to `~/.local/bin/go-mcp` | |
| 92 | - | (previous binary kept as `go-mcp.bak-20260725`) | |
| 93 | - | - [x] goingson-desktop rebuilt; `GoingsOn_0.5.0_amd64.deb` bundled and installed | |
| 94 | - | over the stale 0.4.2 package | |
| 95 | - | - [x] App launched once: migrations 059, 060, 061 applied, `problems` table | |
| 96 | - | created empty, 688 Pending tasks intact, no errors in the launch log | |
| 97 | - | - [x] Claude Code restarted so the four problem tools load (the running go-mcp | |
| 98 | - | process still holds the old inode; only a respawn picks up the new binary) | |
| 99 | - | ||
| 100 | - | ## Run record (2026-07-25) | |
| 101 | - | ||
| 102 | - | Executed. 706 open rows in, **663 migrated**, 43 kept: 18 Started, 15 | |
| 103 | - | ship/`phase-0`, 10 launch-blocking. Problems table 0 -> 663; open tasks 706 -> 43. | |
| 104 | - | ||
| 105 | - | Two departures from the rule as written above: | |
| 106 | - | ||
| 107 | - | - **`launch` was not in the keep set and had to be.** The written line kept only | |
| 108 | - | `af-ship`/`go-ship`/`bb-ship`/`phase-0`/Started, which is 33 rows, against this | |
| 109 | - | plan's own target of ~90 and its estimate of ~40 committed launch items. The | |
| 110 | - | `launch` tag carries both: 10 are launch blockers (Phase 0 Stripe/webhook gates, | |
| 111 | - | signed-build distribution, tester invites) and were kept; 20 are prefixed | |
| 112 | - | `(post-launch)` and migrated, since that pile is candidates by definition. | |
| 113 | - | - **Written in SQL, not through `report_problems`.** The MCP tool has no | |
| 114 | - | `created_at` field, so every problem would have been born today and lost the age | |
| 115 | - | input the ranking depends on. The insert carries each task's own `created_at`. | |
| 116 | - | Sync-safe either way: `problems` has no sync triggers (local mirror, off the | |
| 117 | - | SyncKit manifest), and the task soft-delete went through `tasks`, firing the | |
| 118 | - | existing `sync_tasks_update` and FTS triggers exactly as the repo layer does. | |
| 119 | - | ||
| 120 | - | Verified by reading all 663 back through `list_problems`, which parses each row | |
| 121 | - | via the real repository layer. Ranking is live: top band is the CDN unsigned-serving | |
| 122 | - | check at painhours 85, then a run of 74s. | |
| 123 | - | ||
| 124 | - | Extra snapshot taken immediately before the write: | |
| 125 | - | `~/.local/share/com.goingson.app/goingson.db.pre-taskmigration-20260725`. The app | |
| 126 | - | was running during the migration, so it needs a restart to show the new state. | |
| 127 | - | ||
| 128 | - | ## Open question for the next session | |
| 129 | - | ||
| 130 | - | `deox` still reads Active in GoingsOn but was archived 2026-07-25 in favour of | |
| 131 | - | `wright`. Its 9 tasks are all candidates under this rule and will migrate, which is | |
| 132 | - | harmless, but the project status wants flipping to Archived either way. `wright` and | |
| 133 | - | `shop` have no GoingsOn project at all yet. |