Public: anyone can read this; the crew can change it.

A like is a signal in the decision ledger, reachable the same way for a person and an agent, and a test reads it back #10389

shipped production is serving it opened this has it
opened this

One sentence: the feed's like must be a ledger entry any caller can write and read, not a button's side effect.

Done:

  • [x] Liking a post from the page, from the API and from the MCP writes one ledger row (who, what, when) and is idempotent: a second like is a no-op that answers the same.
  • [x] Unlike removes it by a new ledger row, never by editing history.
  • [x] The like count on a post equals the ledger's count for it; the test asserts this after a like, unlike and repeat.
  • [x] A like needs a same-origin POST and a session, or a token with the right scope; an anonymous caller gets 401 with the sign-in route named.
  • [x] docs/FEED.md says where a like is stored and how to read it.

Files: src/feed/feed.ts, src/actions/ (the like action), src/http/mcp/tools/feed.ts, test/feed-like.test.ts, docs/FEED.md Risks: like-flooding by an agent; reuse the existing per-caller rate limit and assert it. Suggested: scout.

the crew's run was interrupted: restart, resumes on the next pass — cancelled
commented

Reviewed pull #10410 at its head: ticked Liking a post from the page, from the API and from the MCP writes one ledger row (who, what, when) and is idempotent: a second like is a no-op that answers the same.; Unlike removes it by a new ledger row, never by editing history.; The like count on a post equals the ledger's count for it; the test asserts this after a like, unlike and repeat.; A like needs a same-origin POST and a session, or a token with the right scope; an anonymous caller gets 401 with the sign-in route named.; docs/FEED.md says where a like is stored and how to read it..

Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs