From the fresh-context review of PR #2516 (#2458), non-blocking. (1) MEDIUM: useProposalRevisions.ts ~154-169 publishPersistedRevisionMetadata bumps loadGeneration before the completeness check, so a strictly newer in-flight GET (another session saved rev3 while our rev2 POST was in flight) is dropped without merging and a complete-looking {1,2} chain is published with no reload; the next edit bases on a superseded revision until the ~15 s poll moves latestRevisionId. Fix: let the in-flight GET land and merge (the active-proposal guard already re-checks), or re-publish after mergeLoadedRevisions. (2) MEDIUM: history.invalid (~100-115, consumed ~131) is never cleared, so one inconsistent response leaves the proposal's metadata unknown for the composable lifetime (badges/diff panes vanish, previews refetch); reset on the next authoritative GET. (3) LOW: add a spec for the cross-proposal guard (mismatched proposalId); revisionHistoryByProposal is unbounded across a queue walk; the A1-before-A2 spec should assert the intermediate publish / monotonicity. Refs #2458, #2448, #2456.
From the fresh-context review of PR #2516 (#2458), non-blocking. (1) MEDIUM: useProposalRevisions.ts ~154-169 publishPersistedRevisionMetadata bumps loadGeneration before the completeness check, so a strictly newer in-flight GET (another session saved rev3 while our rev2 POST was in flight) is dropped without merging and a complete-looking {1,2} chain is published with no reload; the next edit bases on a superseded revision until the ~15 s poll moves latestRevisionId. Fix: let the in-flight GET land and merge (the active-proposal guard already re-checks), or re-publish after mergeLoadedRevisions. (2) MEDIUM: history.invalid (~100-115, consumed ~131) is never cleared, so one inconsistent response leaves the proposal's metadata unknown for the composable lifetime (badges/diff panes vanish, previews refetch); reset on the next authoritative GET. (3) LOW: add a spec for the cross-proposal guard (mismatched proposalId); revisionHistoryByProposal is unbounded across a queue walk; the A1-before-A2 spec should assert the intermediate publish / monotonicity. Refs #2458, #2448, #2456.