Waits for #1832 (pull #2218), which adds proposeToParentForge, forgeProposals, POST …/following/propose-parent and the Proposals card on /<org>/forge/following. Start only once those are on main.
#2224 made the chain page live for sever; this does the same for proposals.
Done looks like:
[ ] When proposeToParentForge writes a proposal row, the change is published on the live channel #2224 uses for the chain page, and an open /<org>/forge/following re-renders its Proposals card with no reload.
[ ] When forgeProposals reads back a changed state from the parent (open → merged or closed), the same event is published once, and not again while the state stays the same.
[ ] A test makes a proposal through the terminal action (p on the Chain card) and sees the live event. A second test changes the fake parent's state and sees one event.
[ ] A reader receives the event only for a forge they can already see.
Files: the module that holds proposeToParentForge/forgeProposals, the live publisher #2224 added, the following page fragment, and a test next to test/upstream-forge.test.ts.
Waits for #1832 (pull #2218), which adds
proposeToParentForge,forgeProposals,POST …/following/propose-parentand the Proposals card on/<org>/forge/following. Start only once those are onmain.#2224 made the chain page live for sever; this does the same for proposals.
Done looks like:
proposeToParentForgewrites a proposal row, the change is published on the live channel #2224 uses for the chain page, and an open/<org>/forge/followingre-renders its Proposals card with no reload.forgeProposalsreads back a changed state from the parent (open → merged or closed), the same event is published once, and not again while the state stays the same.pon the Chain card) and sees the live event. A second test changes the fake parent's state and sees one event.Files: the module that holds
proposeToParentForge/forgeProposals, the live publisher #2224 added, the following page fragment, and a test next totest/upstream-forge.test.ts.