Commit Graph
225 Commits
Author SHA1 Message Date
Chris Troutner 5bbe276c58 Generate acceptance entry points incrementally
Every acceptance run re-parsed and regenerated all features even when only
one changed. Record feature_hash and aps_commit in the per-feature metadata
and skip parse/generate when both match, and drop generated tests for
features that no longer exist.

By specifier.
2026-09-15 18:13:11 -07:00
Chris Troutner 66a791bd72 Single-source the APS checkout under tmp/aps
There were up to four APS copies (tmp/aps, tmp/aps-spec, tmp/aps-fresh, and a
component-local client copy) and the briefing, wrappers, and runners disagreed
on which to use. Add ensure-aps.sh (ensure/update/reclone) as the one canonical
tmp/aps checkout, point the gherkin-parser wrapper, architect startup, and all
three acceptance runners at it, and update the architect cheat-sheet.

By specifier.
2026-09-15 17:47:33 -07:00
Chris Troutner 053e8e3d33 Self-heal the handoff daemon
Handoffs sit undelivered when handoffd is not running, and recovery was a
manual step. Add ensure_handoff_daemon.sh and call it from swarm_handoff.sh
and ready_for_next.sh so the daemon is restarted whenever it is missing.

By specifier.
2026-09-15 17:40:33 -07:00
Chris Troutner eb308d2f49 Clean up acceptance LevelDB temp dirs
Each psf-memo-db acceptance scenario opened an isolated LevelDB directory
but close() only closed the handles, so tmp/acceptance grew without bound
(found at 961 dirs / 293 MB). Delete the scenario dir in close() and sweep
tmp/acceptance at the start of the acceptance run.

By specifier.
2026-09-15 17:40:10 -07:00
Chris Troutner 0bc73ec072 Always notify the specifier at the end of the pipeline
The architect's terminal handoff went only to coder and refactorer, so the
specifier never received a merge notification and a human had to bridge the
gap. Require an end-of-chain git_handoff to the specifier for every completed
task or batch, including manifest- and metadata-only churn.

By specifier.
2026-09-15 17:37:48 -07:00
Chris Troutner f44de33362 Using Deepseek v4.1 flash for all bots 2026-09-15 17:22:19 -07:00
Chris Troutner 0e1549406f Mark thread-query-bounds complete and refresh specifier notes
Merge hardening verified on master: psf-memo-db unit (357), property (44),
acceptance (11 suites, including thread-query-performance), and lint all
pass. Record the completion and add a gotcha about upper-bound performance
assertions surviving Gherkin mutation.

By specifier.
2026-09-15 16:57:14 -07:00
Chris Troutner c8ceb825f7 Note mutate4javascript differential under-selection and gherkin report capture
By architect.
2026-09-15 13:13:12 -07:00
Chris Troutner 1ff2c020ac Review thread-query-bounds: hide postChildren representation, drop dead like scan
Encapsulate the postChildren prefix scan in PostQuery.listChildTxids and have
GetPostThread depend only on the PostQuery interface (listChildTxids,
getPostOrNull). countRepliesForTxids now reuses listChildTxids. Remove the dead
whole-database buildLikeCountMap that this task made obsolete. Cover the
prefix-scan guards and cycle back-edge, realign the thread property tests to the
adapter seam, and refresh mutation/Gherkin-acceptance manifests.

By architect.
2026-09-15 13:10:46 -07:00
Chris Troutner d422db0e3a Merge thread-query-bounds refactorer work
By architect.
2026-09-15 12:36:48 -07:00
Chris Troutner 386fea9162 Add thread query property tests and cover GetPostThread edge cases
By refactorer.
2026-09-15 12:34:23 -07:00
Chris Troutner 3c4de9c59e Implement bounded thread query for /posts/:txid/thread
Scope the thread endpoint to per-thread reads:
- Count likes for only the thread's txids via countLikesForTxids instead of
  the whole-database buildLikeCountMap scan.
- Prefix-scan postChildren by parent txid in loadChildTxids instead of walking
  the entire store for every node.
- Add unit tests pinning bounded postChildren reads and thread-scoped likes.

By coder.
2026-09-15 12:21:54 -07:00
Chris Troutner 9db1137686 Add thread query performance specification
Bound /posts/:txid/thread to per-thread reads: prefix-scan postChildren
by parent txid and scope like counts to the thread's txids instead of
the global postLikes scan. Record both implementation parts in the
feature backlog.

By specifier.
2026-09-15 12:10:01 -07:00
Chris Troutner 8244e11ec4 New posts display TXID after broadcast 2026-09-13 06:42:14 -07:00
Chris Troutner d2c0bedab3 Changing order of nav menu 2026-09-13 06:26:54 -07:00
Chris Troutner 407b9f5e4a Fixing nav menu for small screens 2026-09-13 06:15:25 -07:00
Chris Troutner c612212342 Adding tooltip when copyin txid of a post 2026-09-13 05:54:05 -07:00
Chris Troutner de74551101 fix(docker): Removing VOLUME calls 2026-09-12 06:31:51 -07:00
Chris Troutner e8bf4ee5eb Update backlog and briefing after account-avatar-display merge
By specifier.
2026-09-05 14:25:40 -07:00
Chris Troutner 5afaa64b26 Review account-avatar-display: refresh mutation manifests, add review summary
By architect.
2026-09-05 13:17:41 -07:00
Chris Troutner a58929b688 Merge account-avatar-display refactorer work
By architect.
2026-09-05 13:09:38 -07:00
Chris Troutner 8088d73fc3 Add property tests for account page avatar display logic
By refactorer.
2026-09-05 13:09:09 -07:00
Chris Troutner afd4585374 Implement account avatar image display on the account page
By coder.
2026-09-05 13:04:24 -07:00
Chris Troutner c849c41dbc Specify account avatar image display on the account page
By specifier.
2026-09-05 12:58:56 -07:00
Chris Troutner 32d5a283d8 Improvements to engineering.prompt 2026-09-05 12:14:18 -07:00
Chris Troutner 13201d4923 Update backlog and briefing after feed-query-performance merge
By specifier.
2026-09-04 19:29:29 -07:00
Chris Troutner 2bcc965efb Review feed-query-performance: remove dead full-scan methods, harden mutation coverage
Remove the full-scan methods the capped-scan optimization replaced
(topLevelPostTxids, countTopLevelPosts, countTopLevelPostsByAddr,
buildReplyCountMap) and their tests, keeping the backwards-compat wrappers.
Add hardening tests to kill 4 mutation survivors (raw scan bound, viewerAddr
fallback). Refresh mutation manifests and Gherkin acceptance-mutation stamps.

By architect.
2026-09-04 18:59:27 -07:00
Chris Troutner 2455745d97 Reduce CRAP in capped-scan recent feed query
Extract reply/mute eligibility check into PostQuery.isEligibleRecentPost,
lowering scanRecentPostTxidsAndCount CRAP from 7 to 6. Refresh mutation
manifest.

By refactorer.
2026-09-04 18:16:10 -07:00
Chris Troutner 65e85c9aef Implement capped-scan feed query performance for /posts/recent
- Replace full-postHeights and full-postChildren scans in ListRecentPosts with
  a single capped scan and per-page reply counting.
- Add PostQuery.scanRecentPostTxidsAndCount with TOTAL_SCAN_CAP=10.
- Update acceptance handlers and fixture for the new feed-query-performance
  spec, and add entry-count wrappers for bounded-read assertions.

By coder.
2026-09-04 17:55:35 -07:00
Chris Troutner df39b47eb1 Spec feed query performance: per-page reply counting and capped total scan
By specifier.
2026-09-04 17:36:26 -07:00
Chris Troutner 09e5981353 Update backlog and briefing after mute-feed-filtering merge
By specifier.
2026-09-04 13:55:16 -07:00
Chris Troutner 3992395480 Review mute-feed-filtering: fix mute dependency order and follow-key fallback, add helper coverage
Fix Adapters.openDatabases so muteQuery is constructed before postQuery, which
previously resolved an undefined muteQuery at PostQuery construction and silently
disabled recent-feed mute filtering. Fix the follow-notification key fallback to
strip the :<followeePkHash> suffix instead of key.split(':')[0] (which yielded
only the "bitcoincash" network prefix). Add unit tests for the shared muted-posts
helper and the follow key-fallback path.

By architect.
2026-09-04 13:35:02 -07:00
Chris Troutner a2e0b7691b Refactor mute filtering onto shared helper, reduce CRAP, add property coverage
Extract the duplicated _mutedAddrs lookup and _isMutedPost check into a shared
lib helper (loadMutedAddrs / isMutedPost) used by the post, topic, search, and
notifications adapters. Extract follow/like notification predicates in
NotificationsQuery to bring CRAP down to 6. Add a mute-filtering conservation,
exclusion, and pagination property test for topic queries.

By refactorer.
2026-09-04 12:34:35 -07:00
Chris Troutner bdf1de97bd Merge mute-feed-filtering coder changes 2026-09-04 12:23:32 -07:00
Chris Troutner 448bddc31f Implement mute feed filtering across recent, topic, search, and notifications feeds
By coder.
2026-09-04 12:23:00 -07:00
Chris Troutner c8ef2ddd95 Spec mute feed filtering across recent, topic, search, and notifications feeds
By specifier.
2026-09-04 12:09:02 -07:00
Chris Troutner b9d2be63ed Update briefing and backlog after binary-payload-broadcast merge
By specifier.
2026-09-04 11:34:03 -07:00
Chris Troutner 984e691006 Merge architect branch for binary-payload-broadcast
Follow/mute/unfollow/unmute now broadcast the target's raw 20-byte hash160
as the OP_RETURN payload via a browser-safe Uint8Array (no Node Buffer
global), shared through the new MemoStateAction base.

By specifier.
2026-09-04 11:31:54 -07:00
Chris Troutner 167a64ae6b Review binary-payload-broadcast: verify MemoStateAction dedup, document Gherkin equivalents
By architect.
2026-09-04 11:30:12 -07:00
Chris Troutner 53f6b90f56 Deduplicate Memo follow/mute onto shared MemoStateAction base
Extract the near-identical follow/unfollow and mute/unmute action classes
onto a config-driven MemoStateAction base, removing 150 duplicated lines.
Preserves public API and static exports. Coder's hexToBytes broadcast stays
intact. Refreshed mutation manifests via the tool.

By refactorer.
2026-09-04 11:25:28 -07:00
Chris Troutner 8d40f2bdcd Merge binary-payload-broadcast coder changes
By refactorer.
2026-09-04 11:13:40 -07:00
Chris Troutner 5e1f4739e3 Broadcast follow/mute/unfollow/unmute hash160 payloads as Uint8Array
Replaces the Node-only Buffer global in memo-follow and memo-mute with
the existing hexToBytes helper, which returns a Uint8Array. Updates unit
and property tests to assert bytes without requiring Buffer in the
production source, and adds an acceptance handler for the new binary
payload wording so the Binary Payload Broadcast regression spec passes.

By coder.
2026-09-04 11:13:15 -07:00
Chris Troutner f741119d8e Merge specifier binary-payload-broadcast spec
By coder.
2026-09-04 11:08:22 -07:00
Chris Troutner 62e04799c8 Specify binary hash160 broadcast payload for follow/mute
Client follow/mute (and their inverse unmute/unfollow) must broadcast the
target's raw 20-byte hash160 as the OP_RETURN payload and must not depend on
the Node-only Buffer global. Adds the Binary Payload Broadcast regression
spec covering the binary payload for all four actions.

By specifier.
2026-09-04 11:07:25 -07:00
Chris Troutner 5602975a37 Update briefing and backlog after page-size-50 merge
By specifier.
2026-09-04 10:54:33 -07:00
Chris Troutner cfe67110ca Merge architect branch for page-size-50
Merge finalized architect work: reduce paginated client page size to 50,
refactor paginated pages onto a shared base, and carry in the reviewed
youtube-embed property tests and startup smoke-check polish.

By specifier.
2026-09-04 10:52:28 -07:00
Chris Troutner feabfd43f8 Merge commit 'a4cd814931' into swarmforge-coder 2026-09-04 10:46:14 -07:00
Chris Troutner a4cd814931 Review page-size-50: harden pagination null edge, document equivalents
By architect.
2026-09-04 10:45:35 -07:00
Chris Troutner a9488d9ae2 Refactor paginated pages onto shared base, add property coverage
Extract PaginatedPage base for the recent feed and recent profiles page
controllers to remove the duplicated load/canLoadMore pattern introduced
with the 50-item page size. Refresh mutation manifests via the tool. Add
property tests for the base pagination invariants (canLoadMore mirrors
hasMore, load forwards limit/offset, item lookup).

By refactorer.
2026-09-04 10:06:27 -07:00
Chris Troutner bf51558800 Merge commit '7ca73cffdc' into swarmforge-coder 2026-09-04 10:00:45 -07:00