Skip to content

feat(web): filter archived threads by project - #31

Merged
lastobelus merged 9 commits into
lastcode/mainfrom
port/upstream/pr-7282-archive-project-filtering
Aug 17, 2026
Merged

feat(web): filter archived threads by project#31
lastobelus merged 9 commits into
lastcode/mainfrom
port/upstream/pr-7282-archive-project-filtering

Conversation

@lastobelus

@lastobelus lastobelus commented Aug 17, 2026

Copy link
Copy Markdown
Owner

Problem

Large archives are difficult to navigate because every archived thread is shown at once. LastCode should adopt the project-scoped Archive filter now without waiting for the upstream review schedule.

Source provenance

Import

The complete eight-commit upstream graph was derived from the pinned Git objects and cherry-picked oldest-first with -x onto exact LastCode base 6ebffe1965126f81e1ee65ba5bee9726d6cb4b10.

The upstream stack applied without textual conflicts or LastCode-specific adaptations. Range-diff shows only the provenance trailers, and both source and the initial port aggregate to stable patch ID d9e9829895c1cbb1ee796950022e39f59095c8f3.

LastCode exact-head review then found that saved disconnected environments could leave the archive aggregate loading forever. A downstream follow-up limits archive snapshot requests to connected environments and adds a regression test for the offline case.

Validation

  • dependency installation completed with vp i
  • 7/7 focused archive-filtering tests passed, including disconnected-environment coverage
  • targeted formatter and linter checks passed for all eight changed files
  • the web package typecheck passed under Node 24.13.1
  • committed-range git diff --check passed
  • the guarded push's lastcode:ci:quick hook passed formatting, workspace typechecks, and all workspace test groups
  • a LastCode web client at 1280×800 used disposable state with three projects and five archived threads:
    • All showed Alpha, Beta, and the archive-only Legacy project
    • selecting Beta Project updated the route and hid Alpha and Legacy rows
    • selecting All cleared the query and restored all groups

The shared preview could exercise the interaction but could not capture a screenshot while its tab was hidden. The published images below are from the patch-identical upstream candidate; the LastCode client assertions above were verified independently.

UI evidence

Default Archive scope:

Default — Archive / All

Filtered Archive scope:

Filtered — Archive / Beta Project

Implemented by GPT-5.6-sol through the Codex harness.

@lastobelus

Copy link
Copy Markdown
Owner Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 13e8aaed51

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread apps/web/src/lib/archivedThreadsState.ts Outdated
@lastobelus

Copy link
Copy Markdown
Owner Author

@codex review

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. 🎉

Reviewed commit: 0b1a2d6c16

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@lastobelus
lastobelus merged commit ca5fa98 into lastcode/main Aug 17, 2026
@lastobelus
lastobelus deleted the port/upstream/pr-7282-archive-project-filtering branch August 17, 2026 21:13
lastobelus added a commit that referenced this pull request Aug 17, 2026
## Problem

Large archives are difficult to navigate because every archived thread
is shown at once. LastCode should adopt the project-scoped Archive
filter now without waiting for the upstream review schedule.

## Source provenance

- Upstream PR: pingdotgg#7282
- Title: `feat(web): filter archived threads by project`
- Author: Michael Johnston (`lastobelus`)
- Observed August 17, 2026 (America/Vancouver): open and unmerged, with
the upstream vouch gate blocking merge
- Pinned upstream base: `949feb61e4bfd96669ba0e8cf3dca7c6d7f885b3`
- Pinned upstream head: `535a7b11358d8f0b4b302e4261b769dbafffc643`
- Linked request: pingdotgg#6780
- Review context: all 13 upstream review threads are resolved; upstream
checks are supporting evidence only

## Import

The complete eight-commit upstream graph was derived from the pinned Git
objects and cherry-picked oldest-first with `-x` onto exact LastCode
base `6ebffe1965126f81e1ee65ba5bee9726d6cb4b10`.

The upstream stack applied without textual conflicts or
LastCode-specific adaptations. Range-diff shows only the provenance
trailers, and both source and the initial port aggregate to stable patch
ID `d9e9829895c1cbb1ee796950022e39f59095c8f3`.

LastCode exact-head review then found that saved disconnected
environments could leave the archive aggregate loading forever. A
downstream follow-up limits archive snapshot requests to connected
environments and adds a regression test for the offline case.

## Validation

- dependency installation completed with `vp i`
- 7/7 focused archive-filtering tests passed, including
disconnected-environment coverage
- targeted formatter and linter checks passed for all eight changed
files
- the web package typecheck passed under Node `24.13.1`
- committed-range `git diff --check` passed
- the guarded push's `lastcode:ci:quick` hook passed formatting,
workspace typechecks, and all workspace test groups
- a LastCode web client at 1280×800 used disposable state with three
projects and five archived threads:
  - `All` showed Alpha, Beta, and the archive-only Legacy project
- selecting `Beta Project` updated the route and hid Alpha and Legacy
rows
  - selecting `All` cleared the query and restored all groups

The shared preview could exercise the interaction but could not capture
a screenshot while its tab was hidden. The published images below are
from the patch-identical upstream candidate; the LastCode client
assertions above were verified independently.

## UI evidence

Default Archive scope:

<img width="1280" height="800" alt="Default — Archive / All"
src="https://github.com/user-attachments/assets/26167028-e14c-43fa-958d-37c96392bec7"
/>

Filtered Archive scope:

<img width="1280" height="800" alt="Filtered — Archive / Beta Project"
src="https://github.com/user-attachments/assets/c4547658-26c1-43ea-84e7-3ddfd48e5782"
/>

Implemented by GPT-5.6-sol through the Codex harness.
lastobelus added a commit that referenced this pull request Aug 18, 2026
## Problem

Large archives are difficult to navigate because every archived thread
is shown at once. LastCode should adopt the project-scoped Archive
filter now without waiting for the upstream review schedule.

## Source provenance

- Upstream PR: pingdotgg#7282
- Title: `feat(web): filter archived threads by project`
- Author: Michael Johnston (`lastobelus`)
- Observed August 17, 2026 (America/Vancouver): open and unmerged, with
the upstream vouch gate blocking merge
- Pinned upstream base: `949feb61e4bfd96669ba0e8cf3dca7c6d7f885b3`
- Pinned upstream head: `535a7b11358d8f0b4b302e4261b769dbafffc643`
- Linked request: pingdotgg#6780
- Review context: all 13 upstream review threads are resolved; upstream
checks are supporting evidence only

## Import

The complete eight-commit upstream graph was derived from the pinned Git
objects and cherry-picked oldest-first with `-x` onto exact LastCode
base `6ebffe1965126f81e1ee65ba5bee9726d6cb4b10`.

The upstream stack applied without textual conflicts or
LastCode-specific adaptations. Range-diff shows only the provenance
trailers, and both source and the initial port aggregate to stable patch
ID `d9e9829895c1cbb1ee796950022e39f59095c8f3`.

LastCode exact-head review then found that saved disconnected
environments could leave the archive aggregate loading forever. A
downstream follow-up limits archive snapshot requests to connected
environments and adds a regression test for the offline case.

## Validation

- dependency installation completed with `vp i`
- 7/7 focused archive-filtering tests passed, including
disconnected-environment coverage
- targeted formatter and linter checks passed for all eight changed
files
- the web package typecheck passed under Node `24.13.1`
- committed-range `git diff --check` passed
- the guarded push's `lastcode:ci:quick` hook passed formatting,
workspace typechecks, and all workspace test groups
- a LastCode web client at 1280×800 used disposable state with three
projects and five archived threads:
  - `All` showed Alpha, Beta, and the archive-only Legacy project
- selecting `Beta Project` updated the route and hid Alpha and Legacy
rows
  - selecting `All` cleared the query and restored all groups

The shared preview could exercise the interaction but could not capture
a screenshot while its tab was hidden. The published images below are
from the patch-identical upstream candidate; the LastCode client
assertions above were verified independently.

## UI evidence

Default Archive scope:

<img width="1280" height="800" alt="Default — Archive / All"
src="https://github.com/user-attachments/assets/26167028-e14c-43fa-958d-37c96392bec7"
/>

Filtered Archive scope:

<img width="1280" height="800" alt="Filtered — Archive / Beta Project"
src="https://github.com/user-attachments/assets/c4547658-26c1-43ea-84e7-3ddfd48e5782"
/>

Implemented by GPT-5.6-sol through the Codex harness.
lastobelus added a commit that referenced this pull request Aug 19, 2026
## Problem

Large archives are difficult to navigate because every archived thread
is shown at once. LastCode should adopt the project-scoped Archive
filter now without waiting for the upstream review schedule.

## Source provenance

- Upstream PR: pingdotgg#7282
- Title: `feat(web): filter archived threads by project`
- Author: Michael Johnston (`lastobelus`)
- Observed August 17, 2026 (America/Vancouver): open and unmerged, with
the upstream vouch gate blocking merge
- Pinned upstream base: `949feb61e4bfd96669ba0e8cf3dca7c6d7f885b3`
- Pinned upstream head: `535a7b11358d8f0b4b302e4261b769dbafffc643`
- Linked request: pingdotgg#6780
- Review context: all 13 upstream review threads are resolved; upstream
checks are supporting evidence only

## Import

The complete eight-commit upstream graph was derived from the pinned Git
objects and cherry-picked oldest-first with `-x` onto exact LastCode
base `6ebffe1965126f81e1ee65ba5bee9726d6cb4b10`.

The upstream stack applied without textual conflicts or
LastCode-specific adaptations. Range-diff shows only the provenance
trailers, and both source and the initial port aggregate to stable patch
ID `d9e9829895c1cbb1ee796950022e39f59095c8f3`.

LastCode exact-head review then found that saved disconnected
environments could leave the archive aggregate loading forever. A
downstream follow-up limits archive snapshot requests to connected
environments and adds a regression test for the offline case.

## Validation

- dependency installation completed with `vp i`
- 7/7 focused archive-filtering tests passed, including
disconnected-environment coverage
- targeted formatter and linter checks passed for all eight changed
files
- the web package typecheck passed under Node `24.13.1`
- committed-range `git diff --check` passed
- the guarded push's `lastcode:ci:quick` hook passed formatting,
workspace typechecks, and all workspace test groups
- a LastCode web client at 1280×800 used disposable state with three
projects and five archived threads:
  - `All` showed Alpha, Beta, and the archive-only Legacy project
- selecting `Beta Project` updated the route and hid Alpha and Legacy
rows
  - selecting `All` cleared the query and restored all groups

The shared preview could exercise the interaction but could not capture
a screenshot while its tab was hidden. The published images below are
from the patch-identical upstream candidate; the LastCode client
assertions above were verified independently.

## UI evidence

Default Archive scope:

<img width="1280" height="800" alt="Default — Archive / All"
src="https://github.com/user-attachments/assets/26167028-e14c-43fa-958d-37c96392bec7"
/>

Filtered Archive scope:

<img width="1280" height="800" alt="Filtered — Archive / Beta Project"
src="https://github.com/user-attachments/assets/c4547658-26c1-43ea-84e7-3ddfd48e5782"
/>

Implemented by GPT-5.6-sol through the Codex harness.
lastobelus added a commit that referenced this pull request Aug 19, 2026
## Problem

Large archives are difficult to navigate because every archived thread
is shown at once. LastCode should adopt the project-scoped Archive
filter now without waiting for the upstream review schedule.

## Source provenance

- Upstream PR: pingdotgg#7282
- Title: `feat(web): filter archived threads by project`
- Author: Michael Johnston (`lastobelus`)
- Observed August 17, 2026 (America/Vancouver): open and unmerged, with
the upstream vouch gate blocking merge
- Pinned upstream base: `949feb61e4bfd96669ba0e8cf3dca7c6d7f885b3`
- Pinned upstream head: `535a7b11358d8f0b4b302e4261b769dbafffc643`
- Linked request: pingdotgg#6780
- Review context: all 13 upstream review threads are resolved; upstream
checks are supporting evidence only

## Import

The complete eight-commit upstream graph was derived from the pinned Git
objects and cherry-picked oldest-first with `-x` onto exact LastCode
base `6ebffe1965126f81e1ee65ba5bee9726d6cb4b10`.

The upstream stack applied without textual conflicts or
LastCode-specific adaptations. Range-diff shows only the provenance
trailers, and both source and the initial port aggregate to stable patch
ID `d9e9829895c1cbb1ee796950022e39f59095c8f3`.

LastCode exact-head review then found that saved disconnected
environments could leave the archive aggregate loading forever. A
downstream follow-up limits archive snapshot requests to connected
environments and adds a regression test for the offline case.

## Validation

- dependency installation completed with `vp i`
- 7/7 focused archive-filtering tests passed, including
disconnected-environment coverage
- targeted formatter and linter checks passed for all eight changed
files
- the web package typecheck passed under Node `24.13.1`
- committed-range `git diff --check` passed
- the guarded push's `lastcode:ci:quick` hook passed formatting,
workspace typechecks, and all workspace test groups
- a LastCode web client at 1280×800 used disposable state with three
projects and five archived threads:
  - `All` showed Alpha, Beta, and the archive-only Legacy project
- selecting `Beta Project` updated the route and hid Alpha and Legacy
rows
  - selecting `All` cleared the query and restored all groups

The shared preview could exercise the interaction but could not capture
a screenshot while its tab was hidden. The published images below are
from the patch-identical upstream candidate; the LastCode client
assertions above were verified independently.

## UI evidence

Default Archive scope:

<img width="1280" height="800" alt="Default — Archive / All"
src="https://github.com/user-attachments/assets/26167028-e14c-43fa-958d-37c96392bec7"
/>

Filtered Archive scope:

<img width="1280" height="800" alt="Filtered — Archive / Beta Project"
src="https://github.com/user-attachments/assets/c4547658-26c1-43ea-84e7-3ddfd48e5782"
/>

Implemented by GPT-5.6-sol through the Codex harness.
lastobelus added a commit that referenced this pull request Aug 19, 2026
## Problem

Large archives are difficult to navigate because every archived thread
is shown at once. LastCode should adopt the project-scoped Archive
filter now without waiting for the upstream review schedule.

## Source provenance

- Upstream PR: pingdotgg#7282
- Title: `feat(web): filter archived threads by project`
- Author: Michael Johnston (`lastobelus`)
- Observed August 17, 2026 (America/Vancouver): open and unmerged, with
the upstream vouch gate blocking merge
- Pinned upstream base: `949feb61e4bfd96669ba0e8cf3dca7c6d7f885b3`
- Pinned upstream head: `535a7b11358d8f0b4b302e4261b769dbafffc643`
- Linked request: pingdotgg#6780
- Review context: all 13 upstream review threads are resolved; upstream
checks are supporting evidence only

## Import

The complete eight-commit upstream graph was derived from the pinned Git
objects and cherry-picked oldest-first with `-x` onto exact LastCode
base `6ebffe1965126f81e1ee65ba5bee9726d6cb4b10`.

The upstream stack applied without textual conflicts or
LastCode-specific adaptations. Range-diff shows only the provenance
trailers, and both source and the initial port aggregate to stable patch
ID `d9e9829895c1cbb1ee796950022e39f59095c8f3`.

LastCode exact-head review then found that saved disconnected
environments could leave the archive aggregate loading forever. A
downstream follow-up limits archive snapshot requests to connected
environments and adds a regression test for the offline case.

## Validation

- dependency installation completed with `vp i`
- 7/7 focused archive-filtering tests passed, including
disconnected-environment coverage
- targeted formatter and linter checks passed for all eight changed
files
- the web package typecheck passed under Node `24.13.1`
- committed-range `git diff --check` passed
- the guarded push's `lastcode:ci:quick` hook passed formatting,
workspace typechecks, and all workspace test groups
- a LastCode web client at 1280×800 used disposable state with three
projects and five archived threads:
  - `All` showed Alpha, Beta, and the archive-only Legacy project
- selecting `Beta Project` updated the route and hid Alpha and Legacy
rows
  - selecting `All` cleared the query and restored all groups

The shared preview could exercise the interaction but could not capture
a screenshot while its tab was hidden. The published images below are
from the patch-identical upstream candidate; the LastCode client
assertions above were verified independently.

## UI evidence

Default Archive scope:

<img width="1280" height="800" alt="Default — Archive / All"
src="https://github.com/user-attachments/assets/26167028-e14c-43fa-958d-37c96392bec7"
/>

Filtered Archive scope:

<img width="1280" height="800" alt="Filtered — Archive / Beta Project"
src="https://github.com/user-attachments/assets/c4547658-26c1-43ea-84e7-3ddfd48e5782"
/>

Implemented by GPT-5.6-sol through the Codex harness.
lastobelus added a commit that referenced this pull request Aug 19, 2026
## Problem

The project-scoped Archive breadcrumb adopted in #31 can read
`/settings/archived` search state while navigation to that route is
still pending. At that instant the browser location already names
Archive but the route match does not exist yet, so strict route search
lookup can fail instead of rendering a safe interim breadcrumb.

## Source provenance

- Upstream PR: pingdotgg#7282
(`feat(web): filter archived threads by project`)
- New upstream commit:
pingdotgg@a5bed62
- Author: Michael Johnston (`lastobelus`)
- Observed August 19, 2026 (America/Vancouver): upstream PR open and
unmerged; head `a5bed62d299e343646f0a6272d936b875df55cb9`; mergeable but
blocked by upstream policy/review state
- Pinned upstream base: `949feb61e4bfd96669ba0e8cf3dca7c6d7f885b3`
- Prior LastCode adoption: #31 pinned the earlier upstream head
`535a7b11358d8f0b4b302e4261b769dbafffc643`
- Linked request: pingdotgg#6780
- Upstream context: all 13 review threads remain resolved; the
current-head bot checks are terminal and acceptable, but are supporting
evidence only

## Import

The new one-commit delta was derived from the pinned Git graph and
cherry-picked with `-x` onto exact LastCode base
`7f9f0ecf7d5cd7865f9453a819390d2852890369`.

It applied without textual conflicts or LastCode-specific adaptations.
The source and port both have stable patch ID
`802299eab4778fd2608662714563aceefacf73eb`.

The fix performs a non-throwing archive-route search lookup before
selecting the Archive-specific breadcrumb. While the route is pending it
renders the ordinary Settings breadcrumb; once matched it renders the
selected Archive project. The new tests cover both a deliberately paused
navigation and a direct selected-project deep link.

## Validation

- dependency installation completed with `vp i`
- Node `24.13.1`; pnpm `11.10.0`
- 9/9 focused Archive tests passed across `SettingsBreadcrumb.test.tsx`
and `archiveProjectFiltering.test.ts`
- targeted formatter and linter checks passed for both changed files
- web package typecheck passed
- committed-range `git diff --check` passed
- the guarded push's `lastcode:ci:quick` hook passed formatting,
workspace typechecks, and every workspace test group

This timing fix does not change the settled Archive UI, so the
final-state evidence from #31 remains representative. The pending-route
regression is deterministic in the focused router test rather than
dependent on recording a transient frame.

Implemented by GPT-5.6-sol through the Codex harness.
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