Public: anyone can read this; the crew can change it.
Home is the feed: signed in, / is a composer above one timeline, and your apps move one step away #813
Check · Review · Land · Live done — Landed and live in production.
Closes #599
shipped production is serving it for issue #599 — its issue is already done deploy 4345bb2
Closes #599 (P1 Feed, umbrella #587). Builds on the front page (#686): signed out, / is still the front door; signed in, home is the feed.
What a person sees. Signed in, / opens like X:
- The composer on top. It sends a tell to one of your apps. With a script it goes through the outbox to
POST /api/v1/feed/tells; without one it posts to the newPOST /tell. - One timeline below it. Tells are posts in their own words, comments are replies, and runs, changes and looks are posts by whoever made them. Each post shows the author's initial in a circle (an avatar) and their name, what was said (a link into its tell, change, run or look), a small line saying why it is in your timeline, then Tell the crew or Steer, Dismiss and Mute.
- Your apps one step away. On a desk they are a narrow column (each app with its production state, plus All apps, New app, Map, Board, and Front page for admins) above On you. On a phone they are a "Feed | Your apps" tab, and the tab goes to
/apps.
Same items over the API and MCP. GET /api/v1/feed and the new MCP tool feed {limit, cursor} return the same posts, page by page. Each item now carries what (the post's own words) beside reason.
What it removes (contract).
- The app rows ("the shelf") as the home page. They were already drawn on
/apps, which keeps them. - The cost line. It moves to
/apps(studio/cost_line.ts), where it answers the owner's question about their apps. /live/appsnow refreshes the narrow apps column, not the shelf.- Not removed: the dev dashboard (
?mode=dev), which #603 owns.
Taken from scout's #676, which closed red:
- the three post kinds:
tellfromissue.opened(in its title's words),replyfromissue|pull.commented(in the comment's words), andlookfromlook.taken; whaton the item;- the avatar and name on the post;
- the composer through the outbox;
- the MCP
feedtool; - moving the cost line to
/apps; - retargeting the shelf tests to
/apps.
Dropped or changed from #676:
- Its
/:owner/:name/issues/nlinks. Tells link to/tells/n, the studio's noun. - Its indented replies. Replies are not grouped under their tell by the ranking, so indenting misled.
- Its no-JS composer that only reached the first app.
POST /tellreaches whichever app the select names, and refuses a repository the person cannot read. - Its untested studio retargets. All are run here.
- Its phone card, where the head stacked every element in a column. A post is now head (who, kind, app), words, why, then a foot (say, dismiss, mute).
Safety. Every item comes from candidatesFor, which reads events through listEventsVisibleTo and then audienceFilter (the rule #793 restored for the activity rail). Configuration events such as webhooks, variables and outside reports stay their admins'. Tested:
- a reader's timeline has the public repository's tell and reply;
- it does not have the private repository's tell, or a webhook URL on the public one;
POST /tellrefuses an unreadable repository (404), a stranger (sign in) and a cross-site form (403).
No ranking weights changed.
Tests. New test/home-feed.test.ts (in the gate):
- composer above timeline, and tell and reply posts in their own words linking in one tap;
- the apps column and tab, and the cost line on
/apps; - the reader-leak checks;
- the no-script composer and its refusals;
- MCP
feedmatchingreadFeedacross two pages.
Also: test/feed-page.test.ts covers the escaped what. The test/studio.test.ts shelf, cost and heading tests now point at /apps and "Home", and the On you test reads /live/on-you. test/mcp.test.ts lists feed. Local runs: reserved-names, check-list, hollow, home-feed, feed-page, feed, mcp, feeds, studio and event-audience give 269 pass, 0 fail. tsc is clean.
Looks. I seeded a local forge with four apps, tells, replies, runs and a merge. At desktop 1280 and iPhone 15 there is no horizontal scroll. On a phone a post reads like a post (who, kind, app; the words; why), then say, dismiss and mute.
🤖 Generated with Claude Code
Closes #599
Work in progress: the description follows as the first comment when it is ready for review.
🤖 Generated with Claude Code