From 17d2afff4819aa878932dd704cbe974e78f54f46 Mon Sep 17 00:00:00 2001 From: Chris Troutner Date: Fri, 18 Sep 2026 06:36:58 -0700 Subject: [PATCH] Record topic-metadata completion in backlog and briefing By specifier. --- specifier-prompt.md | 29 ++++++++++++++++++++--------- specs/feature-backlog.md | 30 ++++++++++++++++++------------ 2 files changed, 38 insertions(+), 21 deletions(-) diff --git a/specifier-prompt.md b/specifier-prompt.md index 4b836da..f985590 100644 --- a/specifier-prompt.md +++ b/specifier-prompt.md @@ -542,6 +542,17 @@ that a single user-facing feature may require specs in more than one component. `bb gherkin-parser`, generate with `acceptance/lib/generate.js`, then run the generated test) instead of the full suite. +40. **Tool-written mutation manifests land in the feature files.** The + architect's soft Gherkin mutation run wrote `# mutation-stamp` and + `# acceptance-mutation-manifest-*` blocks into the three topic-metadata + feature files. These are tool-owned; commit them as-is and never hand-edit + them. The run's survivors are specifier-side weak-assertion equivalents: + indexer `height`/`firstHeight`/`secondHeight` mutations feed scenarios that + do not assert height, `firstSeen`/`secondSeen` mutations that do not cross + the asserted `max(seen)` survive, and client `lastSeen` mutations that stay + inside the same relative-time bucket survive. Tighten only if a future spec + needs those fields asserted independently. + --- ## 10. Run / verify the app @@ -592,17 +603,17 @@ 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: `090f41f` (`topic-recency-pagination` merged from +Current `master` HEAD: `af54b0e` (`topic-metadata` merged from `swarmforge-architect`). The three verification records name the architect code -review commit `0e8f8f0`; the commits after it (`090f41f`) added only `docs/` +review commit `3f05488`; the only later commit (`af54b0e`) added `docs/` (records and summary), so the records are valid for the merged tree. This task -made `GET /topics` order by most recent post and paginate using two new indexes -(`topicSummaries`, `topicRecency`) plus an idempotent backfill and client -topics-page pagination. Records: -`docs/reviews/topic-recency-pagination-verification.json` (indexer), -`-client-verification.json`, `-db-verification.json`. The specifier merged the -branch and ran only the merged features' acceptance suites (indexer 8/8, db -31/31, client 4/4) as the independent check. Run `swarmforge/scripts/state.sh` +added `lastSeen` and `followerCount` to `topicSummaries`, exposed them from +`GET /topics`, rebuilt them in the backfill, and rendered four columns on the +client topics page. Records: +`docs/reviews/topic-metadata-verification.json` (indexer), +`-db-verification.json`, `-client-verification.json`. The specifier merged the +branch and ran only the merged features' acceptance suites (indexer 12/12, db +14/14, client 9/9) as the independent check. Run `swarmforge/scripts/state.sh` to refresh these HEAD lines. Next action: **TBD** — ask the user for the next feature. Current direction is front-end improvements to `psf-memo-client` (UI/UX polish, accessibility, diff --git a/specs/feature-backlog.md b/specs/feature-backlog.md index 9f492fd..6cc37e5 100644 --- a/specs/feature-backlog.md +++ b/specs/feature-backlog.md @@ -2,7 +2,7 @@ **Status**: DRAFT — refreshed 2026-09-03. **Owner**: specifier. -**Last updated**: 2026-09-17 +**Last updated**: 2026-09-18 --- @@ -31,20 +31,26 @@ focus is **front-end improvements** to `psf-memo-client` (the React SPA). ## In progress -- **Topic metadata columns (spec approved):** add the four memo.cash topic - columns to the `/topics` page: topic name, time since the most recent post, - post count, and follower count. Requires new indexer metadata (`lastSeen`, - `followerCount`) on `topicSummaries`, `GET /topics` returning them, a - backfill for existing `rooms`, and client rendering with relative-time - formatting (`No posts` / `Less than an hour ago` / `N hours ago` / - `N days ago`). Client + indexer + DB. Specs: - `psf-memo-indexer/specs/topic-metadata-indexing.feature`, - `psf-memo-db/specs/topic-metadata.feature`, - `psf-memo-client/specs/topic-metadata-columns.feature`. Task - `topic-metadata`; spec committed, handed off to coder. +_(none)_ ## Recently completed +- **Topic metadata columns (2026-09-18):** the `/topics` page now shows four + columns — topic name, time since the most recent post, post count, and + follower count. The indexer writes `lastSeen` (epoch-ms of the newest room + post; 0 for follow-only rooms) and `followerCount` (active follows) into each + `topicSummaries` record, idempotently and without disturbing the room's post + metadata; `GET /topics` returns both; the room backfill rebuilds both from + `rooms`; and the client formats `No posts` / `Less than an hour ago` / + `N hours ago` / `N days ago` from `lastSeen`. Client + indexer + DB. Specs: + `psf-memo-indexer/specs/topic-metadata-indexing.feature`, + `psf-memo-db/specs/topic-metadata.feature`, + `psf-memo-client/specs/topic-metadata-columns.feature`. Merged to `master` + at `af54b0e` (review commit `3f05488`; records + `docs/reviews/topic-metadata-verification.json` (indexer), + `-db-verification.json`, `-client-verification.json`). Independent acceptance + check: indexer 12/12, db 14/14, client 9/9. + - **Topic recency ordering and pagination (2026-09-17):** `GET /topics` now orders topics by each room's most recent post and paginates without scanning the whole `rooms` store. The indexer maintains two new stores: