From 2eb86e2d07ff4d64f1ff60af3c85a8a566708560 Mon Sep 17 00:00:00 2001 From: Chris Troutner Date: Thu, 27 Aug 2026 08:13:55 -0700 Subject: [PATCH] Mark Set Bio complete and set next feature to profile picture Update the P1 backlog and standing specifier briefing for the merged set-bio task. Add gotcha for the 217-byte profile-text limit vs the indexer's looser validation. By specifier. --- specifier-prompt.md | 27 ++++++++++++++++++--------- specs/feature-backlog.md | 23 ++++++++++------------- 2 files changed, 28 insertions(+), 22 deletions(-) diff --git a/specifier-prompt.md b/specifier-prompt.md index 3a4d713..ca614df 100644 --- a/specifier-prompt.md +++ b/specifier-prompt.md @@ -167,16 +167,16 @@ Goal: reach feature parity with [memo.cash](https://memo.cash). | Tier | Features | Status | |------|----------|--------| | **P0** | Post, Set name, Reply, Efficient pagination | ✅ shipped | -| **P1** | Like counts (read side) ✅; client display ✅; Set profile text, Set profile picture, Follow/Unfollow | next | +| **P1** | Like counts (read side) ✅; client display ✅; Set profile text ✅; Set profile picture, Follow/Unfollow | next | | **P2** | Topics (list, feed, post, follow/unfollow) | later | | **P3** | Polls (create, add option, vote) | later | | **P4** | Mute / unmute user | later | | **P5** | Send money memo action, MIP-0009 token exchange | later | | **P6** | Repost, ranked feed, notifications, search, tags, following feed | later | -**Suggested next spec:** P1.3 — add a "Set Bio" UI on the Account page that -broadcasts the `0x6d05` Set profile text action. The indexer and DB already -read/store profile text; the missing piece is the client write path and the +**Suggested next spec:** P1.4 — add a "Set Avatar URL" UI on the Account page that +broadcasts the `0x6d0a` Set profile picture action. The indexer and DB already +read/store profile pictures; the missing piece is the client write path and the Account page editor. --- @@ -305,7 +305,14 @@ that a single user-facing feature may require specs in more than one component. `no-new` errors in unit tests that must be resolved before master is clean. 12. **Weak Gherkin examples can survive mutation** — when example values are both the input and the expected output, mutating them passes trivially. Tie - assertions to independent fixture data where possible. + assertions to independent fixture data where possible. (Observed in + set-bio Scenario 1: the account-page bio assertion echoes the same example + value that was broadcast.) +13. **Profile-text byte limit is 217 bytes (protocol), but the indexer validates + looser.** The Memo protocol says `0x6d05` profile text is ≤ 217 bytes. The + client Set Bio UI enforces 217. The indexer's `handleSetProfile` still + validates against `MAX_POST_SIZE = 65000`; the looser indexer limit is a + separate hardening item (protocol parity would use 217). --- @@ -343,7 +350,9 @@ At the end of each session, update this file: - Note the current `master` HEAD commit. - State the next feature to work on. -Current `master` HEAD: `21373f4` (like-count-display merged to `master`; -client + DB tests, build, and lint passing). -Next action: **spec P1.3** — add a "Set Bio" UI on the Account page that -broadcasts the `0x6d05` Set profile text action. +Current `master` HEAD: `e321c7f` (set-bio merged to `master`; client unit 48, +property 6, acceptance all-features, lint, and build passing). An unrelated +`swarmforge.conf` specifier-model switch that leaked in with the merge was +reverted to keep the merge focused on set-bio. +Next action: **spec P1.4** — add a "Set Avatar URL" UI on the Account page that +broadcasts the `0x6d0a` Set profile picture action. diff --git a/specs/feature-backlog.md b/specs/feature-backlog.md index 07aa833..5dfd018 100644 --- a/specs/feature-backlog.md +++ b/specs/feature-backlog.md @@ -121,7 +121,7 @@ adding/editing the client UI. |---|---------|-------------|------------|--------|-----------| | 1.1 | Like / tip a Memo — read side | `0x6d04` | D | ✅ | `likeCount` returned on `/posts/*` and `/posts/:txid/thread` | | 1.2 | Like / tip a Memo — client display | `0x6d04` | C | ✅ | Feed/Profile/Thread read `likeCount` from API instead of defaulting to 0 | -| 1.3 | Set profile text (bio) | `0x6d05` | C, I, D | 🟡 partial | C: add "Set Bio" UI on Account page; I/D already read | +| 1.3 | Set profile text (bio) | `0x6d05` | C | ✅ | C: "Set Bio" UI on Account page broadcasts `0x6d05` (217-byte limit) | | 1.4 | Set profile picture | `0x6d0a` | C, I, D | 🟡 partial | C: add "Set Avatar URL" UI; I/D already read | | 1.5 | Follow a user | `0x6d06` | C, I, D | 🔴 missing | C: follow button on profile; D: follow state + following/followers lists | | 1.6 | Unfollow a user | `0x6d07` | C, I, D | 🔴 missing | C: unfollow button; D: follow state | @@ -132,8 +132,8 @@ adding/editing the client UI. 2. **Like / tip a Memo — client display** ✅ DONE. The feed, profile, and thread views now read `likeCount` from the API (profile shows a read-only like button). -3. **Set profile text** — simple text broadcast + Account page UI. -4. **Set profile picture** — URL broadcast + Account page UI. +3. **Set profile text** ✅ DONE. Account page "Set Bio" UI broadcasts `0x6d05` with a 217-byte limit and byte counter (task `set-bio`). +4. **Set profile picture** — URL broadcast + Account page UI. NEXT. 5. **Follow / Unfollow user** — social graph; enables the following feed later. ### Like / tip details @@ -211,18 +211,15 @@ Polls require a new data model and rendering. The indexer has no handler yet. --- -## Suggested first spec for the next session +## Suggested next spec -**Set profile text (bio)** (P1.3): -- `psf-memo-client`: add a "Set Bio" UI on the Account page that broadcasts the - `0x6d05` Set profile text action via `minimal-slp-wallet.sendOpReturn()`. -- `psf-memo-indexer` and `psf-memo-db` already read/store profile text, so this - is primarily a client broadcast + Account page UI feature. -- The profile page already renders `profileText` from the API; the missing piece - is the write path (broadcast) and the Account page editor. +**Set profile picture (bio)** (P1.4): +- `psf-memo-client`: add a "Set Avatar URL" UI on the Account page that broadcasts + the `0x6d0a` Set profile picture action via `minimal-slp-wallet.sendOpReturn()`. +- The indexer and DB already read/store profile pictures; the missing piece is + the client write path and the Account page editor. -This is the next smallest end-to-end win toward memo.cash parity after the -like-count read/display loop closed. +This is the next smallest end-to-end win after the set-bio write path closed. ---