Skip to content

feat(search): enrich Commander result previews - #554

Merged
lopugit merged 11 commits into
developfrom
codex/rich-commander-previews
Sep 5, 2026
Merged

feat(search): enrich Commander result previews#554
lopugit merged 11 commits into
developfrom
codex/rich-commander-previews

Conversation

@lopugit

@lopugit lopugit commented Sep 1, 2026

Copy link
Copy Markdown
Owner

Summary

  • enrich Commander results with shared Thing type icons and profile-photo user previews with a compact user marker
  • add a rendered preview and independent Preview/Data toggles to /thing/:id
  • cover the result visual mapping and document browser regression checks

Validation

  • corepack pnpm --dir remix run test:commander
  • corepack pnpm --dir remix run build:client
  • targeted ESLint check (no errors; existing Commander hook warnings remain)
  • browser validation at desktop and 390px mobile widths, including all toggle states and full-page scrolling

@github-actions github-actions Bot added lopu: mergeable The PR branches can currently be merged without conflicts lopu: overlapping files This PR changes files also changed by another open PR labels Sep 1, 2026
@github-actions
github-actions Bot temporarily deployed to develop-pr-554 September 1, 2026 08:58 Destroyed
@github-actions

github-actions Bot commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

🧹 Develop S3 preview removed

The PR-specific alias and every workflow-created develop deployment were removed when this PR closed.

The ordinary generated Vercel Preview remains available on the shared development runtime.

@github-actions
github-actions Bot temporarily deployed to develop-pr-554 September 1, 2026 09:20 Destroyed
@github-actions
github-actions Bot temporarily deployed to develop-pr-554 September 1, 2026 09:26 Destroyed
@github-actions
github-actions Bot temporarily deployed to develop-pr-554 September 1, 2026 09:30 Destroyed
@github-actions github-actions Bot removed the lopu: overlapping files This PR changes files also changed by another open PR label Sep 1, 2026
@github-actions
github-actions Bot temporarily deployed to develop-pr-554 September 1, 2026 09:49 Destroyed
@github-actions

github-actions Bot commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

Lopu repository review

Lopu reviewed this PR against develop as Thingtime's principal PR and repository manager. Using Claude Opus 5.

Lopu found no justified local change to publish from this review pass.

Lopu review — PR #554 · Enrich Commander result previews

Compared head 090b5973 against base develop @ bc061f63 (merge-base
f31864b2, 11 commits ahead). Non-generated change surface is five files:

remix/app/components/Things/thingDetailSectionsCore.ts (new),
remix/app/components/Things/thingDetailSectionsCore.test.ts (new),
remix/app/routes/thing.tsx, remix/package.json, TESTING.md.

Check state

No failing checks on 090b5973: 24 success, 58 skipped, 1 neutral (GitGuardian,
skipped). CodeQL alert snapshot for this head is empty, so
lopu-codeql-dispositions/554.json stays [].

The check results date from 2026-09-03 rather than today. They are the runs that
belong to this exact head SHA, so they are current for the code under review, not
stale results from a superseded commit.

What the change does

/thing/:id serves two different payloads: an ordinary Thing, which renders the
Views card with Rendered preview / Thing data switches, and a migration
diagnostic, whose only content is a redacted error card and which renders no
switches.

React keeps the route component mounted across id changes, so switch state set
while viewing a Thing survived a client-side navigation to a diagnostic. With
Thing data toggled off, the diagnostic rendered blank, with no control left
on screen to turn it back on
— only a full reload recovered it. This PR
extracts the visibility decision into a pure function and fixes that case.

Assessment — correctness

thingDetailSections encodes the right invariant — a switch may gate a section
only where that switch is on screen:

viewToggles: hasThing,
preview:     hasThing && showPreview,
detail:      !hasThing || showData

detail: !hasThing || showData is the fix: with no Thing (a diagnostic) the
redacted error always renders regardless of remembered switch state, and with a
Thing the switch is honoured. preview gains an explicit hasThing guard it did
not previously have; the three call sites in thing.tsx that it replaces were
already showPreview && attachment, showPreview && post, and
showPreview && thing && !post, so no preview surface changes for a real Thing.

Pulling the decision into a dependency-free module is the right shape here: it
makes the one interesting rule testable without mounting a Chakra/React tree,
which is why the new test is four cheap assertions rather than a render harness.

showPreview / showData remain live — they still drive the Switch
isChecked props at thing.tsx:356 and :360 — so nothing is left dangling by
the refactor.

The new test file is correctly registered in the test:things script, so it
runs in CI rather than only when invoked by hand. The TESTING.md addition
describes the exact manual repro (toggle off, client-side navigate to a
diagnostic permalink, confirm the error still renders, navigate back and confirm
the OFF state is still remembered).

Repository-health check

I checked whether this branch would push Graphify snapshot bloat into develop,
since its head carries 27 snapshot directories (~1,126 MB) against develop's 1
(~51 MB). It will not: the merge-base f31864b2 already carried 26 of them
(~1,076 MB), so those blobs are inherited history that develop has since
pruned, unmodified on this branch. A normal three-way merge takes develop's
deletions and adds only this branch's one new snapshot. No action needed.

Note for whoever merges: this branch predates the
graphify-out/snapshots/** -diff linguist-generated rule added to
.gitattributes on 2026-09-03, so its .gitattributes still lacks it. That is
why GitHub reports 1,328,425 additions here — it is textually diffing the new
snapshot. Merging or rebasing onto current develop picks the rule up; nothing
to change on the branch itself.

Changes I made

None. The change is small, correct, tested, and documented.

Validation

  • node --test app/components/Things/thingDetailSectionsCore.test.ts
    4/4 pass.
  • pnpm run test:things28/28 pass (the suite the new file was added to).
  • npx tsc --noEmit reports no errors in thing.tsx or
    thingDetailSectionsCore.ts
    . The repository baseline is 108 pre-existing
    errors elsewhere, which the warning-only typecheck ratchet covers.

Verdict

A real UX bug — a page that could render blank with no way to recover it without
a reload — fixed at the right altitude. No blocking findings.

View Lopu workflow run

@github-actions github-actions Bot added lopu: conflicting GitHub reports merge conflicts for the current PR snapshot lopu: queued The current PR snapshot is waiting in Lopu's PR-management queue and removed lopu: mergeable The PR branches can currently be merged without conflicts labels Sep 1, 2026
@github-actions

github-actions Bot commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

🤖 Lopu live PR update

Status: ↪️ Resolver finished; a newer conflict remains

Current phase: The next detector event will own the current branch state

Estimated completion: Done — no further active-work ETA.

Time conversion (UTC source)

Moment UTC Los Angeles Melbourne
Updated 2026-09-01 12:29 UTC (UTC+00:00) 2026-09-01 05:29 PDT (UTC-07:00) 2026-09-01 22:29 AEST (UTC+10:00)

Los Angeles and Melbourne use their real IANA time zones, so PDT/PST and AEST/AEDT offsets change automatically.

Lopu queue and PR pulse

Scope Metric Count
Repository Open PRs 41
Repository Conflicting 30
Repository Out-of-date with target 3
Repository GitHub state unknown 0
Repository Part of an open stack 0
Repository Touch files changed by another open PR 36
Repository Target a non-root branch without an open parent PR 0
This resolver batch Admitted snapshots 10
This resolver batch Currently resolving 1
This resolver batch Waiting 4
This resolver batch Finished 5

Related PR context

  • Stack: No open parent or child PR currently links to this branch.
  • Target: develop is a repository root/integration branch.
  • Changed-file overlap: No changed paths overlap another open PR in this snapshot.

Exact branch pair: developcodex/rich-commander-previews.

Timeline

  • 10:12 UTC — Detected conflicts between develop and codex/rich-commander-previews; assigning the exact snapshot to the resolver queue.
  • 10:14 UTC — Still safely queued behind earlier admitted Lopu work; no duplicate resolver was spawned.
  • 10:25 UTC — 10-minute check-in: still working — Waiting in Lopu's serialized PR-management lane.
  • 10:36 UTC — 10-minute check-in: still working — Waiting in Lopu's serialized PR-management lane.
  • 10:47 UTC — 10-minute check-in: still working — Waiting in Lopu's serialized PR-management lane.
  • 10:57 UTC — 10-minute check-in: still working — Waiting in Lopu's serialized PR-management lane.
  • 11:08 UTC — 10-minute check-in: still working — Waiting in Lopu's serialized PR-management lane.
  • 11:19 UTC — 10-minute check-in: still working — Waiting in Lopu's serialized PR-management lane.
  • 11:30 UTC — 10-minute check-in: still working — Waiting in Lopu's serialized PR-management lane.
  • 11:40 UTC — 10-minute check-in: still working — Waiting in Lopu's serialized PR-management lane.
  • 11:51 UTC — 10-minute check-in: still working — Waiting in Lopu's serialized PR-management lane.
  • 12:02 UTC — 10-minute check-in: still working — Waiting in Lopu's serialized PR-management lane.
  • 12:13 UTC — 10-minute check-in: still working — Waiting in Lopu's serialized PR-management lane.
  • 12:24 UTC — 10-minute check-in: still working — Waiting in Lopu's serialized PR-management lane.
  • 12:29 UTC — The worker published its verified result, but GitHub reports the latest PR state as conflicting again; Lopu will rediscover it automatically.

Technical run details — optional; this comment is the human-facing source of truth.

@github-actions github-actions Bot added lopu: queued The current PR snapshot is waiting in Lopu's PR-management queue and removed lopu: queued The current PR snapshot is waiting in Lopu's PR-management queue labels Sep 1, 2026
@github-actions

github-actions Bot commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

🤖 Lopu detected merge conflicts

Status: Work detected — Lopu is taking ownership.

Current phase: Entering Lopu's serialized PR-resolution queue.

Estimated completion: around 10:41 UTC (~20 minutes; this adjusts as the queue moves).

Next automatic check-in: within 10 minutes while work remains active. You can stay on this PR; there is no need to find the Actions run.

Time conversion (UTC source)

Moment UTC Los Angeles Melbourne
Updated 2026-09-01 10:21 UTC (UTC+00:00) 2026-09-01 03:21 PDT (UTC-07:00) 2026-09-01 20:21 AEST (UTC+10:00)
Estimated finish 2026-09-01 10:41 UTC (UTC+00:00) 2026-09-01 03:41 PDT (UTC-07:00) 2026-09-01 20:41 AEST (UTC+10:00)

Los Angeles and Melbourne use their real IANA time zones, so PDT/PST and AEST/AEDT offsets change automatically.

Lopu queue and PR pulse

Scope Metric Count
Repository Open PRs 39
Repository Conflicting 29
Repository Out-of-date with target 0
Repository GitHub state unknown 0
Repository Part of an open stack 0
Repository Touch files changed by another open PR 36
Repository Target a non-root branch without an open parent PR 0
This resolver batch Admitted snapshots 28
This resolver batch Currently resolving 0
This resolver batch Waiting 28
This resolver batch Finished 0

Related PR context

  • Stack: No open parent or child PR currently links to this branch.
  • Target: develop is a repository root/integration branch.
  • Changed-file overlap: No changed paths overlap another open PR in this snapshot.

Exact branch pair: developcodex/rich-commander-previews.

Timeline

  • 10:21 UTC — Detected conflicts between develop and codex/rich-commander-previews; assigning the exact snapshot to the resolver queue.

@github-actions

github-actions Bot commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

🤖 Lopu detected merge conflicts

Status: Work detected — Lopu is taking ownership.

Current phase: Entering Lopu's serialized PR-resolution queue.

Estimated completion: around 10:48 UTC (~20 minutes; this adjusts as the queue moves).

Next automatic check-in: within 10 minutes while work remains active. You can stay on this PR; there is no need to find the Actions run.

Time conversion (UTC source)

Moment UTC Los Angeles Melbourne
Updated 2026-09-01 10:28 UTC (UTC+00:00) 2026-09-01 03:28 PDT (UTC-07:00) 2026-09-01 20:28 AEST (UTC+10:00)
Estimated finish 2026-09-01 10:48 UTC (UTC+00:00) 2026-09-01 03:48 PDT (UTC-07:00) 2026-09-01 20:48 AEST (UTC+10:00)

Los Angeles and Melbourne use their real IANA time zones, so PDT/PST and AEST/AEDT offsets change automatically.

Lopu queue and PR pulse

Scope Metric Count
Repository Open PRs 39
Repository Conflicting 29
Repository Out-of-date with target 1
Repository GitHub state unknown 0
Repository Part of an open stack 0
Repository Touch files changed by another open PR 36
Repository Target a non-root branch without an open parent PR 0
This resolver batch Admitted snapshots 28
This resolver batch Currently resolving 0
This resolver batch Waiting 28
This resolver batch Finished 0

Related PR context

  • Stack: No open parent or child PR currently links to this branch.
  • Target: develop is a repository root/integration branch.
  • Changed-file overlap: No changed paths overlap another open PR in this snapshot.

Exact branch pair: developcodex/rich-commander-previews.

Timeline

  • 10:28 UTC — Detected conflicts between develop and codex/rich-commander-previews; assigning the exact snapshot to the resolver queue.

@github-actions

github-actions Bot commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

🤖 Lopu detected merge conflicts

Status: Work detected — Lopu is taking ownership.

Current phase: Entering Lopu's serialized PR-resolution queue.

Estimated completion: around 10:56 UTC (~20 minutes; this adjusts as the queue moves).

Next automatic check-in: within 10 minutes while work remains active. You can stay on this PR; there is no need to find the Actions run.

Time conversion (UTC source)

Moment UTC Los Angeles Melbourne
Updated 2026-09-01 10:36 UTC (UTC+00:00) 2026-09-01 03:36 PDT (UTC-07:00) 2026-09-01 20:36 AEST (UTC+10:00)
Estimated finish 2026-09-01 10:56 UTC (UTC+00:00) 2026-09-01 03:56 PDT (UTC-07:00) 2026-09-01 20:56 AEST (UTC+10:00)

Los Angeles and Melbourne use their real IANA time zones, so PDT/PST and AEST/AEDT offsets change automatically.

Lopu queue and PR pulse

Scope Metric Count
Repository Open PRs 38
Repository Conflicting 29
Repository Out-of-date with target 0
Repository GitHub state unknown 0
Repository Part of an open stack 0
Repository Touch files changed by another open PR 35
Repository Target a non-root branch without an open parent PR 0
This resolver batch Admitted snapshots 28
This resolver batch Currently resolving 0
This resolver batch Waiting 28
This resolver batch Finished 0

Related PR context

  • Stack: No open parent or child PR currently links to this branch.
  • Target: develop is a repository root/integration branch.
  • Changed-file overlap: No changed paths overlap another open PR in this snapshot.

Exact branch pair: developcodex/rich-commander-previews.

Timeline

  • 10:36 UTC — Detected conflicts between develop and codex/rich-commander-previews; assigning the exact snapshot to the resolver queue.

@github-actions github-actions Bot added lopu: unknown state GitHub is still computing the PR branch state lopu: conflicting GitHub reports merge conflicts for the current PR snapshot and removed lopu: conflicting GitHub reports merge conflicts for the current PR snapshot labels Sep 1, 2026
@github-actions

github-actions Bot commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

🤖 Lopu review — PR #554 (head 090b5973 vs develop 81bce89d)

No changes needed — I made none. Validated green:

node --import tsx --test app/components/Things/thingDetailSectionsCore.test.ts
# pass 4 | fail 0

Heads-up: the title no longer describes the diff

The Commander preview work this PR is named for has already landed on develop (d1dad4c3 feat(search): enrich Commander result previews). Against the current base, what's left on this branch is one unrelated /thing/:id fix — thingDetailSectionsCore.ts + its test, ~16 lines of thing.tsx, and a TESTING.md line. Ten files total, five of which are one regenerated graphify-out/ snapshot.

Worth retitling before merge so remix/CHANGELOG.md and the squash message stay honest — as it stands the changelog entry would credit Commander work that landed separately. Bookkeeping, not a code defect.

The fix itself is good

The diagnosis is precise: React keeps the /thing/:id component mounted across id changes, so showData: false set on an ordinary Thing survives a client-side navigation to a migration-diagnostic-* permalink. A diagnostic renders no Views card, so honouring that remembered switch blanked the page with no control left to turn it back on — only a reload recovered it.

The extracted invariant generalises past the reported bug: a switch may gate a section only where that switch is on screen. The fourth test enforces that across the whole input space rather than just re-testing the one case, which is what justifies pulling a three-line boolean into its own core.

I checked all four call-site substitutions in thing.tsx against the corresponding fields — faithful, and the && attachment / && post / && thing && !post guards are preserved. The .ts import extension matches the sibling thingAttachmentDetailCore.test.ts convention in the same directory, so it's consistent rather than an oversight.

CodeQL: 0 open alerts on this head.

@github-actions github-actions Bot mentioned this pull request Sep 3, 2026
@github-actions

github-actions Bot commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

🤖 Lopu detected an out-of-date PR branch

Status: Work detected — Lopu is taking ownership.

Current phase: Entering Lopu's serialized PR-resolution queue.

Estimated completion: around 10:48 UTC (~20 minutes; this adjusts as the queue moves).

Next automatic check-in: within 10 minutes while work remains active. You can stay on this PR; there is no need to find the Actions run.

Time conversion (UTC source)

Moment UTC Los Angeles Melbourne
Updated 2026-09-03 10:28 UTC (UTC+00:00) 2026-09-03 03:28 PDT (UTC-07:00) 2026-09-03 20:28 AEST (UTC+10:00)
Estimated finish 2026-09-03 10:48 UTC (UTC+00:00) 2026-09-03 03:48 PDT (UTC-07:00) 2026-09-03 20:48 AEST (UTC+10:00)

Los Angeles and Melbourne use their real IANA time zones, so PDT/PST and AEST/AEDT offsets change automatically.

Lopu queue and PR pulse

Scope Metric Count
Repository Open PRs 16
Repository Conflicting 4
Repository Out-of-date with target 4
Repository GitHub state unknown 2
Repository Part of an open stack 0
Repository Touch files changed by another open PR 8
Repository Target a non-root branch without an open parent PR 0
This resolver batch Admitted snapshots 10
This resolver batch Currently resolving 0
This resolver batch Waiting 10
This resolver batch Finished 0

Related PR context

  • Stack: No open parent or child PR currently links to this branch.
  • Target: develop is a repository root/integration branch.
  • Changed-file overlap: 2 changed files are also touched by #10, #291, #295, #564, #578, #595.

Exact branch pair: developcodex/rich-commander-previews.

Timeline

  • 10:28 UTC — Detected that develop needs to be merged into codex/rich-commander-previews; assigning the exact snapshot to the resolver queue.

@github-actions

github-actions Bot commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

🤖 Lopu detected an out-of-date PR branch

Status: Work detected — Lopu is taking ownership.

Current phase: Entering Lopu's serialized PR-resolution queue.

Estimated completion: around 11:07 UTC (~20 minutes; this adjusts as the queue moves).

Next automatic check-in: within 10 minutes while work remains active. You can stay on this PR; there is no need to find the Actions run.

Time conversion (UTC source)

Moment UTC Los Angeles Melbourne
Updated 2026-09-03 10:47 UTC (UTC+00:00) 2026-09-03 03:47 PDT (UTC-07:00) 2026-09-03 20:47 AEST (UTC+10:00)
Estimated finish 2026-09-03 11:07 UTC (UTC+00:00) 2026-09-03 04:07 PDT (UTC-07:00) 2026-09-03 21:07 AEST (UTC+10:00)

Los Angeles and Melbourne use their real IANA time zones, so PDT/PST and AEST/AEDT offsets change automatically.

Lopu queue and PR pulse

Scope Metric Count
Repository Open PRs 17
Repository Conflicting 5
Repository Out-of-date with target 5
Repository GitHub state unknown 2
Repository Part of an open stack 0
Repository Touch files changed by another open PR 9
Repository Target a non-root branch without an open parent PR 0
This resolver batch Admitted snapshots 10
This resolver batch Currently resolving 0
This resolver batch Waiting 10
This resolver batch Finished 0

Related PR context

  • Stack: No open parent or child PR currently links to this branch.
  • Target: develop is a repository root/integration branch.
  • Changed-file overlap: 2 changed files are also touched by #10, #291, #295, #564, #578, #595, #601.

Exact branch pair: developcodex/rich-commander-previews.

Timeline

  • 10:47 UTC — Detected that develop needs to be merged into codex/rich-commander-previews; assigning the exact snapshot to the resolver queue.

@github-actions

github-actions Bot commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

🦄 Lopu review — the Commander feature already shipped; this PR is now a different (good) fix

The headline change in the title is already in develop. Commit d1dad4c3 ("feat(search): enrich Commander result previews") is an ancestor of af9a0b22; it reached main via #558 (codex/promote-pr-554-main, merged 2026-09-01) and came back down. Verified at content level, not just ancestry:

git diff develop head -- app/components/Commander/CommanderV2.tsx \
                          app/components/Search/commanderSearch.ts \
                          app/components/Commander/commanderSearch.test.ts
(empty)

So the remaining delta against the merge-base is 5 files, +109/−6, and it's a different fix:

/thing/:id must not gate a migration diagnostic on the Thing data switch.

The route stays mounted across id changes, so showData: false set on an ordinary Thing survives a client-side navigation to a migration-diagnostic-* permalink — which renders no Views card, and so no switch to turn the content back on. Blank page, reload the only way out.

Suggested: retitle to that. The current title describes work that's already merged, and it'll carry into the changelog.

On the fix itself — no changes needed

thingDetailSectionsCore.ts encodes one invariant: a switch may gate a section only where that switch is on screen. I checked thing.tsx has no raw reads left — the only surviving showPreview/showData references are the two useStates and the two <Switch> bindings; all four render sites go through sections.*.

The test I liked most is the general one rather than the regression case:

// for any input where viewToggles is false, the result must equal
// the all-switches-on result
if (sections.viewToggles) continue
assert.deepEqual(sections, thingDetailSections({ hasThing, showPreview: true, showData: true }))

That catches a future section added behind an unrendered switch, not just today's bug. TESTING.md gets the matching manual line, per the house rule.

Validated: node --test app/components/Things/thingDetailSectionsCore.test.ts → 4/4 pass.

Checks: 24 pass, 57 skipping, 0 failing. Nothing to diagnose.

Changes made: none. The remaining change is correct, minimal and well covered — editing it would be churn. The only ask is the retitle, which I've left to you rather than rewriting the PR metadata myself.

— Lopu, automated repository review. Full report accompanies this PR.

@github-actions

github-actions Bot commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

🤖 Lopu detected an out-of-date PR branch

Status: Work detected — Lopu is taking ownership.

Current phase: Entering Lopu's serialized PR-resolution queue.

Estimated completion: around 12:15 UTC (~20 minutes; this adjusts as the queue moves).

Next automatic check-in: within 10 minutes while work remains active. You can stay on this PR; there is no need to find the Actions run.

Time conversion (UTC source)

Moment UTC Los Angeles Melbourne
Updated 2026-09-03 11:55 UTC (UTC+00:00) 2026-09-03 04:55 PDT (UTC-07:00) 2026-09-03 21:55 AEST (UTC+10:00)
Estimated finish 2026-09-03 12:15 UTC (UTC+00:00) 2026-09-03 05:15 PDT (UTC-07:00) 2026-09-03 22:15 AEST (UTC+10:00)

Los Angeles and Melbourne use their real IANA time zones, so PDT/PST and AEST/AEDT offsets change automatically.

Lopu queue and PR pulse

Scope Metric Count
Repository Open PRs 16
Repository Conflicting 4
Repository Out-of-date with target 5
Repository GitHub state unknown 1
Repository Part of an open stack 0
Repository Touch files changed by another open PR 8
Repository Target a non-root branch without an open parent PR 0
This resolver batch Admitted snapshots 9
This resolver batch Currently resolving 0
This resolver batch Waiting 9
This resolver batch Finished 0

Related PR context

  • Stack: No open parent or child PR currently links to this branch.
  • Target: develop is a repository root/integration branch.
  • Changed-file overlap: 2 changed files are also touched by #10, #291, #295, #564, #578, #595.

Exact branch pair: developcodex/rich-commander-previews.

Timeline

  • 11:55 UTC — Detected that develop needs to be merged into codex/rich-commander-previews; assigning the exact snapshot to the resolver queue.

@github-actions

github-actions Bot commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

🤖 Lopu detected an out-of-date PR branch

Status: Work detected — Lopu is taking ownership.

Current phase: Entering Lopu's serialized PR-resolution queue.

Estimated completion: around 13:08 UTC (~20 minutes; this adjusts as the queue moves).

Next automatic check-in: within 10 minutes while work remains active. You can stay on this PR; there is no need to find the Actions run.

Time conversion (UTC source)

Moment UTC Los Angeles Melbourne
Updated 2026-09-03 12:48 UTC (UTC+00:00) 2026-09-03 05:48 PDT (UTC-07:00) 2026-09-03 22:48 AEST (UTC+10:00)
Estimated finish 2026-09-03 13:08 UTC (UTC+00:00) 2026-09-03 06:08 PDT (UTC-07:00) 2026-09-03 23:08 AEST (UTC+10:00)

Los Angeles and Melbourne use their real IANA time zones, so PDT/PST and AEST/AEDT offsets change automatically.

Lopu queue and PR pulse

Scope Metric Count
Repository Open PRs 17
Repository Conflicting 3
Repository Out-of-date with target 5
Repository GitHub state unknown 1
Repository Part of an open stack 0
Repository Touch files changed by another open PR 9
Repository Target a non-root branch without an open parent PR 0
This resolver batch Admitted snapshots 10
This resolver batch Currently resolving 0
This resolver batch Waiting 10
This resolver batch Finished 0

Related PR context

  • Stack: No open parent or child PR currently links to this branch.
  • Target: develop is a repository root/integration branch.
  • Changed-file overlap: 2 changed files are also touched by #10, #291, #295, #564, #578, #595.

Exact branch pair: developcodex/rich-commander-previews.

Timeline

  • 12:48 UTC — Detected that develop needs to be merged into codex/rich-commander-previews; assigning the exact snapshot to the resolver queue.

@github-actions

github-actions Bot commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

🤖 Lopu detected an out-of-date PR branch

Status: Work detected — Lopu is taking ownership.

Current phase: Entering Lopu's serialized PR-resolution queue.

Estimated completion: around 13:59 UTC (~20 minutes; this adjusts as the queue moves).

Next automatic check-in: within 10 minutes while work remains active. You can stay on this PR; there is no need to find the Actions run.

Time conversion (UTC source)

Moment UTC Los Angeles Melbourne
Updated 2026-09-04 13:39 UTC (UTC+00:00) 2026-09-04 06:39 PDT (UTC-07:00) 2026-09-04 23:39 AEST (UTC+10:00)
Estimated finish 2026-09-04 13:59 UTC (UTC+00:00) 2026-09-04 06:59 PDT (UTC-07:00) 2026-09-04 23:59 AEST (UTC+10:00)

Los Angeles and Melbourne use their real IANA time zones, so PDT/PST and AEST/AEDT offsets change automatically.

Lopu queue and PR pulse

Scope Metric Count
Repository Open PRs 19
Repository Conflicting 3
Repository Out-of-date with target 5
Repository GitHub state unknown 1
Repository Part of an open stack 2
Repository Touch files changed by another open PR 13
Repository Target a non-root branch without an open parent PR 0
This resolver batch Admitted snapshots 11
This resolver batch Currently resolving 0
This resolver batch Waiting 11
This resolver batch Finished 0

Related PR context

  • Stack: No open parent or child PR currently links to this branch.
  • Target: develop is a repository root/integration branch.
  • Changed-file overlap: 3 changed files are also touched by #10, #291, #295, #564, #578, #595, #596, #607, #610, #611, #612.

Exact branch pair: developcodex/rich-commander-previews.

Timeline

  • 13:39 UTC — Detected that develop needs to be merged into codex/rich-commander-previews; assigning the exact snapshot to the resolver queue.

@github-actions

github-actions Bot commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

⏳ Lopu — re-measured against the new base; the title drift still holds, and staleness is now the headline

develop has moved to 6e18d175 since the last pass, so I re-verified rather
than inheriting the conclusion. No changes made.

The Commander work is still already in develop — verified at content
level, not just by ancestry:

$ git diff develop head -- remix/app/components/Commander/CommanderV2.tsx \
                           remix/app/components/Search/commanderSearch.ts \
                           remix/app/components/Commander/commanderSearch.test.ts
(empty)
$ git merge-base --is-ancestor d1dad4c3 6e18d175 && echo "already in develop"
already in develop

So the real remaining change is 5 files, +109/−6 — and it's a good fix worth
naming properly: a trapped UI state on /thing/:id.

React keeps that route mounted across id changes, so switch state set on an
ordinary Thing survives a client-side navigation to a migration diagnostic. The
diagnostic's only content was gated on showData, so a user who'd toggled
Thing data off and then navigated to a diagnostic got a blank page with no
control left to turn it back on
— only a reload recovered it.

The fix encodes the general rule rather than patching the symptom:

detail: !hasThing || showData

with the invariant stated in the source — "a switch may gate a section only
where that switch is on screen."
That's the kind of rule that prevents the
next instance of this bug, not just this one. thingDetailSectionsCore.test.ts
(+59) covers it directly, nearly twice the source lines.

The actual problem now is age

115 commits behind develop — by a wide margin the stalest branch in the
current batch, and the reason the title drifted out of date in the first place.
The green checks attest to a base from long before current develop. Note that
remix/app/routes/thing.tsx is heavily trafficked and #612 changes it by
+586/−55.

CodeQL snapshot: empty. Checks 24 pass / 0 fail.

Suggested: retitle to describe the /thing/:id fix (the Commander feature
in the title shipped via #558), refresh against develop, and land it. The real
change is ~109 well-tested lines — there's no reason for it to keep aging.

Lopu · automated repository review

@github-actions

github-actions Bot commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

🕵️ Lopu — this PR's headline feature is already on develop

Reviewing this against develop@6e18d175 I hit something worth surfacing before merge.

GitHub's file view is misleading here. The two-dot diff shows 199 files / −25,389 lines, which reads like this PR deletes the design-system entries/* tree. It doesn't — that's develop moving ahead of a merge-base at f31864b2. The diff that would actually land is:

git diff develop...HEAD  →  5 files, +109/−6
  TESTING.md
  remix/app/components/Things/thingDetailSectionsCore.ts       (new)
  remix/app/components/Things/thingDetailSectionsCore.test.ts  (new)
  remix/app/routes/thing.tsx
  remix/package.json

CommanderV2.tsx, commanderSearch.ts and commanderSearch.test.ts are byte-identical to develop. Commit 04e286b8 feat(search): enrich Commander result previews is still on the branch, but its content reached develop by another route, so it contributes nothing to the merge.

So the title no longer describes the change. What's left is a small, unrelated, and genuinely good fix — worth retitling so the changelog and the diff agree.

On the fix that remains

It's a real soft-lock, not a cosmetic nit. The route component stays mounted across id changes, so Thing data: off set on an ordinary Thing survives a client-side navigation to a /thing/migration-diagnostic-* permalink. A diagnostic renders no Views card — so honouring that remembered switch hid the redacted error with no control left on screen to bring it back. Only a reload recovered it.

The generalisation is the right one:

a switch may gate a section only where that switch is on screen

and the fourth test asserts that invariant directly rather than special-casing diagnostics — for every input where viewToggles is false, the result must equal the all-switches-on result. That's the test that catches the next instance of this bug in a different section.

I ran it in the worktree:

node --experimental-strip-types --test app/components/Things/thingDetailSectionsCore.test.ts
# tests 4   # pass 4   # fail 0

One thing to watch on merge

The merge-base is far back, and thing.tsx has moved substantially on both sides. Git will merge cleanly, but the section guards are exactly the lines this patches — worth eyeballing the merged file rather than trusting the clean-merge signal. #612 also touches thing.tsx.

Checks are green. No changes made — nothing here needed one.

@github-actions

github-actions Bot commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

🤖 Lopu detected an out-of-date PR branch

Status: Work detected — Lopu is taking ownership.

Current phase: Entering Lopu's serialized PR-resolution queue.

Estimated completion: around 06:41 UTC (~20 minutes; this adjusts as the queue moves).

Next automatic check-in: within 10 minutes while work remains active. You can stay on this PR; there is no need to find the Actions run.

Time conversion (UTC source)

Moment UTC Los Angeles Melbourne
Updated 2026-09-05 06:21 UTC (UTC+00:00) 2026-09-04 23:21 PDT (UTC-07:00) 2026-09-05 16:21 AEST (UTC+10:00)
Estimated finish 2026-09-05 06:41 UTC (UTC+00:00) 2026-09-04 23:41 PDT (UTC-07:00) 2026-09-05 16:41 AEST (UTC+10:00)

Los Angeles and Melbourne use their real IANA time zones, so PDT/PST and AEST/AEDT offsets change automatically.

Lopu queue and PR pulse

Scope Metric Count
Repository Open PRs 25
Repository Conflicting 1
Repository Out-of-date with target 0
Repository GitHub state unknown 7
Repository Part of an open stack 2
Repository Touch files changed by another open PR 14
Repository Target a non-root branch without an open parent PR 0
This resolver batch Admitted snapshots 13
This resolver batch Currently resolving 0
This resolver batch Waiting 13
This resolver batch Finished 0

Related PR context

  • Stack: No open parent or child PR currently links to this branch.
  • Target: develop is a repository root/integration branch.
  • Changed-file overlap: 3 changed files are also touched by #10, #291, #295, #564, #578, #595, #607, #610, #611, #612, #613, #631.

Exact branch pair: developcodex/rich-commander-previews.

Timeline

  • 06:21 UTC — Detected that develop needs to be merged into codex/rich-commander-previews; assigning the exact snapshot to the resolver queue.

@github-actions

github-actions Bot commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

🤖 Lopu detected an out-of-date PR branch

Status: Work detected — Lopu is taking ownership.

Current phase: Entering Lopu's serialized PR-resolution queue.

Estimated completion: around 07:21 UTC (~20 minutes; this adjusts as the queue moves).

Next automatic check-in: within 10 minutes while work remains active. You can stay on this PR; there is no need to find the Actions run.

Time conversion (UTC source)

Moment UTC Los Angeles Melbourne
Updated 2026-09-05 07:01 UTC (UTC+00:00) 2026-09-05 00:01 PDT (UTC-07:00) 2026-09-05 17:01 AEST (UTC+10:00)
Estimated finish 2026-09-05 07:21 UTC (UTC+00:00) 2026-09-05 00:21 PDT (UTC-07:00) 2026-09-05 17:21 AEST (UTC+10:00)

Los Angeles and Melbourne use their real IANA time zones, so PDT/PST and AEST/AEDT offsets change automatically.

Lopu queue and PR pulse

Scope Metric Count
Repository Open PRs 22
Repository Conflicting 5
Repository Out-of-date with target 0
Repository GitHub state unknown 7
Repository Part of an open stack 2
Repository Touch files changed by another open PR 16
Repository Target a non-root branch without an open parent PR 0
This resolver batch Admitted snapshots 12
This resolver batch Currently resolving 0
This resolver batch Waiting 12
This resolver batch Finished 0

Related PR context

  • Stack: No open parent or child PR currently links to this branch.
  • Target: develop is a repository root/integration branch.
  • Changed-file overlap: 3 changed files are also touched by #10, #291, #295, #564, #578, #595, #596, #607, #610, #611, #612, #613, +1 more.

Exact branch pair: developcodex/rich-commander-previews.

Timeline

  • 07:01 UTC — Detected that develop needs to be merged into codex/rich-commander-previews; assigning the exact snapshot to the resolver queue.

@github-actions

github-actions Bot commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

🤖 Lopu review — green; the headline feature already landed, and I confirmed nothing was lost

The branch still carries 04e286b8 feat(search): enrich Commander result previews, but none of
it shows up in the diff against develop
. With 371c11b9 Merge develop into codex/rich-commander-previews (AI-resolved conflicts) in the history, the obvious worry is that
an automated resolution silently ate the feature — so I checked instead of assuming:

  • Search/commanderSearch.ts and Commander/CommanderV2.tsx are byte-identical between this
    head and develop
    .
  • That commit's actual additions — the thingIcon import, icon, avatarUrl,
    icon: thingIcon(thing), avatarUrl: person.avatarUrl — are all present in develop
    today
    (commanderSearch.ts lines 2, 9, 12, 71-72, 84-85), via Fix Commander search relevance, latency, and spinner stability #599.

No silent feature loss. The enrichment is shipped; this branch just no longer adds it.

What merging this actually changes today is one real bug fix, and it's a good one.
/thing/:id serves two payloads — a Thing (renders the Views card with both switches) and a
migration diagnostic (renders no switches). React keeps the route mounted across id changes, so
showData: false set on a Thing survived navigation into a diagnostic, and the old code gated
the diagnostic's redacted error on that same flag. Result: a dead-end blank page — the only
content hidden, and the control to bring it back not on screen. Only a reload recovered it.

The extraction into thingDetailSectionsCore.ts states the invariant properly — a switch may
gate a section only where that switch is on screen
— as detail: !hasThing || showData. Worth
calling out that the fourth test asserts the property rather than instances of it: it
enumerates all eight combinations and requires that whenever viewToggles is false the result
equals the all-switches-on result. That keeps holding if a third switch is added later.

Nice catch in TESTING.md too — specifying the navigation must happen without reloading,
since a reload resets the state and hides the bug.

Validation: thingDetailSectionsCore.test.ts plus the rest of the test:things component
suite — 12/12 pass under the repo's own runner. The new test file is properly registered in
test:things rather than left unreferenced.

No code changes needed. One ask: retitle / rewrite the description — as written it promises
Commander work that's already in develop, which will mislead whoever merges it.

Cosmetic, not worth a change: the new test imports './thingDetailSectionsCore.ts' with an
explicit extension while thing.tsx imports it without one. Both resolve under tsx.

@github-actions

github-actions Bot commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

Lopu · review — plus a cross-PR conflict worth acting on now

The thingDetailSectionsCore extraction is a good fix and a good shape of fix. The bug is real: React keeps /thing/:id mounted across id changes, so Thing data: off set on a Thing survived a client-side navigation to /thing/migration-diagnostic-* and hid the redacted error with no switch on screen to bring it back — reload-only recovery. Encoding the general invariant ("a switch may gate a section only where that switch is on screen") beats patching the one symptom, and the test file pins that invariant directly rather than only the three instances.

I traced hasThing through the real render tree rather than reading it in isolation, since !hasThing looks like it could also mean "still loading". It can't: the whole block sits inside {!loading && (diagnostic || thing) ? …} (thing.tsx:303), so inside that subtree !hasThing means exactly "diagnostic". No flash-of-hidden-card path either. test:things picks up the new suite (4/4 pass), and TESTING.md has the exact manual repro including the "without reloading" part that makes it reproducible at all.

No changes needed here. But there's something neither PR can see from the inside:


⚠️ #612 reintroduces this exact bug

thingDetailSectionsCore.ts is on neither develop (04d77964) nor #612's base claude/builder-demo-library. #612 rewrites the same remix/app/routes/thing.tsx (+586/−55) and still gates on the raw switch state:

#554 (fixed) #612 (rewritten)
Views card {sections.viewToggles ? ( {thing ? (thing.tsx:876
Detail card {sections.detail ? ( {showData ? (thing.tsx:958
Enclosing guard `{!loading && (diagnostic

#612 dropping !loading from the guard is correct for its new optimistic-paint model, and inside that subtree !thing still means "diagnostic" — so this fix applies there unchanged.

The risk: if #554 lands first and #612 second, the rewritten {showData ? ( region either conflicts or silently wins, and the blanking bug returns with no failing test to catch itthingDetailSectionsCore.test.ts covers the module, not the route.

I deliberately did not port the fix into #612's worktree: the module doesn't exist on its base, so #612 would have to add a second copy of the file and guarantee a conflict. The clean resolution is ordering plus a deliberate re-apply. Flagged on #612 as well.

@github-actions

github-actions Bot commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

Lopu · the "1,328,425 additions" on this PR is not what it looks like

Adding one thing to my earlier review, which still stands — the fix and the #612 ordering risk are unchanged. This is about the scary number at the top of the Files tab, because it's the kind of thing that stalls a merge for the wrong reason.

I checked whether merging this would dump Graphify snapshot bloat into develop. It won't.

ref snapshot dirs bytes under graphify-out/snapshots/
merge-base f31864b2 26 1,076.2 MB
this head 090b5973 27 1,126.0 MB
base develop@bc061f63 1 50.9 MB

Those 26 directories are inherited history, already present at the merge-base, and untouched on this branch. develop pruned them afterwards. A normal three-way merge takes develop's deletions (unmodified on our side) and adds only the one new snapshot this branch produced — so the merge result is ~2 snapshots, not 28. No action needed, and nothing to prune by hand.

The inflated count has a separate, also-harmless cause: this branch predates the graphify-out/snapshots/** -diff linguist-generated rule added to .gitattributes on 2026-09-03, so its .gitattributes still lacks it and GitHub is textually diffing the ~41 MB new snapshot — roughly 1.3 M lines. Merging or rebasing onto current develop picks the rule up. Nothing to change on the branch itself.

Worth knowing that rule is a partial mitigation, not a fix: PR #557 has it on both sides of its comparison and GitHub still can't generate that diff at all (HTTP 422), which is what times its CodeQL check out. Same root cause — ~50 MB graph.json blobs tracked as ordinary git objects. This PR just happens to sit on the benign side of it, because it only adds a snapshot rather than producing a delete+add rename pair.

No changes made. Validation this round: pnpm run test:things28/28 pass; npx tsc --noEmitno errors in thing.tsx or thingDetailSectionsCore.ts (108 pre-existing repo-wide, which the warning-only ratchet covers). Checks on 090b5973: 24 success, 58 skipped, 1 neutral (GitGuardian skipped), 0 failures. CodeQL: 0 open alerts.

@github-actions

github-actions Bot commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

Promoted to main in #659.

An earlier run stood aside on this PR; that verdict no longer applies.

@github-actions

github-actions Bot commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

✅ Promotion #659 has verified source lineage at current develop tip f20aa367fff11eb494767c02661a6ddff4c89d49.

@lopugit

lopugit commented Sep 5, 2026

Copy link
Copy Markdown
Owner Author

🚀 Promotion PR for main opened: #659

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

last preview built 03/09 01:32 AEST #554 tt-pv1:554:develop:090b59738eb5be7fcd9f4648eb033b934d53e08a:1788363137504 lopu: mergeable The PR branches can currently be merged without conflicts lopu: overlapping files This PR changes files also changed by another open PR preview: develop removed tt-preview-state:v1:develop:removed

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant