Skip to content

feat(factory): port swarmify feed fixes into apps/factory (supersedes #732)#737

Merged
muqsitnawaz merged 1 commit into
mainfrom
factory-parity-v2
Jul 7, 2026
Merged

feat(factory): port swarmify feed fixes into apps/factory (supersedes #732)#737
muqsitnawaz merged 1 commit into
mainfrom
factory-parity-v2

Conversation

@muqsitnawaz

Copy link
Copy Markdown
Contributor

What

Supersedes #732. Ports the swarmify/extension feed bug-fixes into apps/factory, rebuilt on current main (which now includes the tmux merge #734) with the feed model reconciled so both feature sets coexist.

#732 was based on the pre-#724/#734 layout and went CONFLICTING once #734 (tmux terminals + pane/viewing-in) merged. This PR is the clean rebuild.

Changes (feed "workable" fixes)

  • Correct per-device attribution. Fan-out remote-session enrichment attributes each row to the right machine (machine) and surfaces worktree slug + live preview + structured ticket id + real branch — so co-located sessions stop rendering as identical, contextless cards.
  • No more startedAtMs drift. resolveStartedAtMs caches start time by PID instead of stamping Date.now() on every republish.
  • One shared feed model. Collapsed the "keep two impls in lockstep" duplication into a single @shared implementation guarded by a MISSING_EXPORT build-time drift check.

Merge reconciliation (vs the merged #734)

  • RemoteSession / FloorAgent now carry both viewingIn + tmuxPane (feat(factory): tmux terminals + pane/viewing-in on Factory Floor (extension half of #731) #734) and preview / pr / worktree / machine (this PR); ticket uses the broader string | {id,url} | null.
  • foreman.registry keeps the resolveStartedAtMs fix and publishes tmuxSession/tmuxPane/tabIndex.
  • FeedItem meta line shows worktree slug and pane + "viewing in".
  • normalizeRecentSession defaults the live-only tmux fields to '' for idle/historical rows.

Release landmine defused

Added apps/factory/CHANGELOG.md with a ## [0.9.283] entry. The prix-cloud review of #732 flagged that its new scripts/release.sh CHANGELOG preflight (grep '^## \[<version>\]' CHANGELOG.md) would exit 1 on every release because the file didn't exist. Verified the preflight grep now passes.

Testing

  • tsc -p ./ clean; bun run compile:ui clean (drift guard passes)
  • Merge-critical tests (remoteSessions, remoteSessions.enrich, tabIndex, processStartTime, utils, floorModel, floorModel.fixes): 237 pass, 0 fail
  • Full factory suite: 1063 pass, 4 fail — the 4 are pre-existing live-LLM/network/timing integration tests (generateCommitMessageWithClaude, draftDispatchPrompt, resolveAlias, SessionWatcher 5s timeout), none in this diff.

…parity sync)

Rebuilt on current main (post apps/factory tmux merge #734), reconciling the feed
model so both the tmux pane/viewing-in fields and the parity-sync fields coexist.

- Fan-out remote-session enrichment: correct per-device attribution (machine),
  worktree slug + live preview + structured ticket + real branch surfaced on cards.
- resolveStartedAtMs caches start time by PID (no more Date.now() drift per republish).
- Single @shared feed model with a MISSING_EXPORT build-time drift guard.
- Merge reconciliation: FloorAgent/RemoteSession carry both viewingIn/tmuxPane (#734)
  and preview/pr/worktree/machine (this PR); normalizeRecentSession defaults the
  live-only tmux fields to '' for idle/historical rows.
- Add apps/factory/CHANGELOG.md so scripts/release.sh preflight passes (was missing;
  every release attempt would exit 1 on the CHANGELOG grep).

Supersedes #732 (which was based on the pre-#734 layout and conflicted).
@muqsitnawaz muqsitnawaz merged commit 36227a2 into main Jul 7, 2026
4 checks passed
@muqsitnawaz muqsitnawaz deleted the factory-parity-v2 branch July 7, 2026 12:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant