Skip to content

fix(tailscale): preserve occupied Serve handlers - #102

Merged
lastobelus merged 7 commits into
lastcode/mainfrom
port/upstream/tailscale-serve-ownership
Aug 27, 2026
Merged

fix(tailscale): preserve occupied Serve handlers#102
lastobelus merged 7 commits into
lastcode/mainfrom
port/upstream/tailscale-serve-ownership

Conversation

@lastobelus

Copy link
Copy Markdown
Owner

Tailscale Serve mappings persist independently of their loopback backends. LastCode previously treated a failed HTTP probe as permission to replace a configured port, and development sharing could proxy IPv4 while Vite listened only on IPv6 localhost.

This ports pingdotgg#8338 exactly into LastCode. It treats the live Serve configuration as authoritative, reuses or removes only a handler whose root proxy exactly matches the current LastCode lifecycle, refuses occupied foreign handlers even when their backend is unavailable, and makes shared development bind both Vite and its proxy to 127.0.0.1. Ordinary non-shared development remains on localhost.

Upstream source: pingdotgg#8338
Upstream head: 858e5eed8675b2025ec39118c7c9ae23edb7a4ad

Validation:

  • 6 focused files, 242 tests
  • shared, tailscale, web, scripts, and server typechecks
  • scoped lint, formatting, and diff checks
  • normal guarded LastCode quick CI, including 2,837 server tests

Authored with 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: f153060389

ℹ️ 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 packages/tailscale/src/tailscale.ts Outdated
Comment thread packages/shared/src/devProxy.ts Outdated
@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: 9b08a9b91f

ℹ️ 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 packages/tailscale/src/tailscale.ts
@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: b435ef7468

ℹ️ 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 packages/tailscale/src/tailscale.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: 8630c4c328

ℹ️ 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

Copy link
Copy Markdown
Owner Author

@codex review

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Swish!

Reviewed commit: 17f0f36606

ℹ️ 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 3bb142c into lastcode/main Aug 27, 2026
@lastobelus
lastobelus deleted the port/upstream/tailscale-serve-ownership branch August 27, 2026 01:55
lastobelus added a commit that referenced this pull request Aug 27, 2026
The Legacy Sidebar environment icons were not actually aligned in
scanning columns. Relative timestamp labels widened a flex container, so
the worktree and environment icons shifted horizontally from row to
row.\n\nThis replaces that flexible metadata area with fixed worktree,
environment, and timestamp tracks. Empty worktree and local-icon cells
remain mounted, while optional port and terminal indicators extend to
the left without moving the scanning columns. The newer Show worktree
indicators setting is preserved inside the fixed worktree
track.\n\nVisual QA on the isolated shared web app:\n- authenticated app
loaded successfully through vp run dev --share after rebasing onto PR
#102\n- all 10 real Legacy Sidebar rows used identical worktree,
environment, and timestamp coordinates\n- labels 2m ago, 42m ago, 1d
ago, 17h ago, and just now left every column unchanged\n- local icon off
left an aligned empty environment slot\n- local icon on filled that same
slot without moving the worktree or timestamp columns\n- worktree icons
off left an aligned empty worktree slot without moving environment icons
or timestamps\n- original isolated settings were restored after
testing\n\nValidation:\n- focused environment-icon tests: 10 passed\n-
web typecheck: passed\n- LastCode quick local CI: passed on rebased head
59ade172c\n- web tests: 2,856 passed\n- server tests: 2,838 passed, 7
skipped\n- all remaining workspace suites passed\n\nThe collaborative
preview screenshot operation itself failed, so there is no after image
attached; visual layout was verified from the rendered browser geometry
rather than inferred from source.\n\nImplemented with GPT-5.6 Codex in
the T3 Code harness.
lastobelus added a commit that referenced this pull request Aug 28, 2026
Tailscale Serve mappings persist independently of their loopback
backends. LastCode previously treated a failed HTTP probe as permission
to replace a configured port, and development sharing could proxy IPv4
while Vite listened only on IPv6 localhost.

This ports pingdotgg#8338 exactly into LastCode. It treats the
live Serve configuration as authoritative, reuses or removes only a
handler whose root proxy exactly matches the current LastCode lifecycle,
refuses occupied foreign handlers even when their backend is
unavailable, and makes shared development bind both Vite and its proxy
to `127.0.0.1`. Ordinary non-shared development remains on `localhost`.

Upstream source: pingdotgg#8338
Upstream head: `858e5eed8675b2025ec39118c7c9ae23edb7a4ad`

Validation:

- 6 focused files, 242 tests
- shared, tailscale, web, scripts, and server typechecks
- scoped lint, formatting, and diff checks
- normal guarded LastCode quick CI, including 2,837 server tests

Authored with GPT-5.6 Sol through the Codex harness.
lastobelus added a commit that referenced this pull request Aug 28, 2026
The Legacy Sidebar environment icons were not actually aligned in
scanning columns. Relative timestamp labels widened a flex container, so
the worktree and environment icons shifted horizontally from row to
row.\n\nThis replaces that flexible metadata area with fixed worktree,
environment, and timestamp tracks. Empty worktree and local-icon cells
remain mounted, while optional port and terminal indicators extend to
the left without moving the scanning columns. The newer Show worktree
indicators setting is preserved inside the fixed worktree
track.\n\nVisual QA on the isolated shared web app:\n- authenticated app
loaded successfully through vp run dev --share after rebasing onto PR
#102\n- all 10 real Legacy Sidebar rows used identical worktree,
environment, and timestamp coordinates\n- labels 2m ago, 42m ago, 1d
ago, 17h ago, and just now left every column unchanged\n- local icon off
left an aligned empty environment slot\n- local icon on filled that same
slot without moving the worktree or timestamp columns\n- worktree icons
off left an aligned empty worktree slot without moving environment icons
or timestamps\n- original isolated settings were restored after
testing\n\nValidation:\n- focused environment-icon tests: 10 passed\n-
web typecheck: passed\n- LastCode quick local CI: passed on rebased head
59ade172c\n- web tests: 2,856 passed\n- server tests: 2,838 passed, 7
skipped\n- all remaining workspace suites passed\n\nThe collaborative
preview screenshot operation itself failed, so there is no after image
attached; visual layout was verified from the rendered browser geometry
rather than inferred from source.\n\nImplemented with GPT-5.6 Codex in
the T3 Code harness.
lastobelus added a commit that referenced this pull request Aug 28, 2026
Tailscale Serve mappings persist independently of their loopback
backends. LastCode previously treated a failed HTTP probe as permission
to replace a configured port, and development sharing could proxy IPv4
while Vite listened only on IPv6 localhost.

This ports pingdotgg#8338 exactly into LastCode. It treats the
live Serve configuration as authoritative, reuses or removes only a
handler whose root proxy exactly matches the current LastCode lifecycle,
refuses occupied foreign handlers even when their backend is
unavailable, and makes shared development bind both Vite and its proxy
to `127.0.0.1`. Ordinary non-shared development remains on `localhost`.

Upstream source: pingdotgg#8338
Upstream head: `858e5eed8675b2025ec39118c7c9ae23edb7a4ad`

Validation:

- 6 focused files, 242 tests
- shared, tailscale, web, scripts, and server typechecks
- scoped lint, formatting, and diff checks
- normal guarded LastCode quick CI, including 2,837 server tests

Authored with GPT-5.6 Sol through the Codex harness.
lastobelus added a commit that referenced this pull request Aug 28, 2026
The Legacy Sidebar environment icons were not actually aligned in
scanning columns. Relative timestamp labels widened a flex container, so
the worktree and environment icons shifted horizontally from row to
row.\n\nThis replaces that flexible metadata area with fixed worktree,
environment, and timestamp tracks. Empty worktree and local-icon cells
remain mounted, while optional port and terminal indicators extend to
the left without moving the scanning columns. The newer Show worktree
indicators setting is preserved inside the fixed worktree
track.\n\nVisual QA on the isolated shared web app:\n- authenticated app
loaded successfully through vp run dev --share after rebasing onto PR
#102\n- all 10 real Legacy Sidebar rows used identical worktree,
environment, and timestamp coordinates\n- labels 2m ago, 42m ago, 1d
ago, 17h ago, and just now left every column unchanged\n- local icon off
left an aligned empty environment slot\n- local icon on filled that same
slot without moving the worktree or timestamp columns\n- worktree icons
off left an aligned empty worktree slot without moving environment icons
or timestamps\n- original isolated settings were restored after
testing\n\nValidation:\n- focused environment-icon tests: 10 passed\n-
web typecheck: passed\n- LastCode quick local CI: passed on rebased head
59ade172c\n- web tests: 2,856 passed\n- server tests: 2,838 passed, 7
skipped\n- all remaining workspace suites passed\n\nThe collaborative
preview screenshot operation itself failed, so there is no after image
attached; visual layout was verified from the rendered browser geometry
rather than inferred from source.\n\nImplemented with GPT-5.6 Codex in
the T3 Code harness.
lastobelus added a commit that referenced this pull request Aug 28, 2026
Tailscale Serve mappings persist independently of their loopback
backends. LastCode previously treated a failed HTTP probe as permission
to replace a configured port, and development sharing could proxy IPv4
while Vite listened only on IPv6 localhost.

This ports pingdotgg#8338 exactly into LastCode. It treats the
live Serve configuration as authoritative, reuses or removes only a
handler whose root proxy exactly matches the current LastCode lifecycle,
refuses occupied foreign handlers even when their backend is
unavailable, and makes shared development bind both Vite and its proxy
to `127.0.0.1`. Ordinary non-shared development remains on `localhost`.

Upstream source: pingdotgg#8338
Upstream head: `858e5eed8675b2025ec39118c7c9ae23edb7a4ad`

Validation:

- 6 focused files, 242 tests
- shared, tailscale, web, scripts, and server typechecks
- scoped lint, formatting, and diff checks
- normal guarded LastCode quick CI, including 2,837 server tests

Authored with GPT-5.6 Sol through the Codex harness.
lastobelus added a commit that referenced this pull request Aug 28, 2026
The Legacy Sidebar environment icons were not actually aligned in
scanning columns. Relative timestamp labels widened a flex container, so
the worktree and environment icons shifted horizontally from row to
row.\n\nThis replaces that flexible metadata area with fixed worktree,
environment, and timestamp tracks. Empty worktree and local-icon cells
remain mounted, while optional port and terminal indicators extend to
the left without moving the scanning columns. The newer Show worktree
indicators setting is preserved inside the fixed worktree
track.\n\nVisual QA on the isolated shared web app:\n- authenticated app
loaded successfully through vp run dev --share after rebasing onto PR
#102\n- all 10 real Legacy Sidebar rows used identical worktree,
environment, and timestamp coordinates\n- labels 2m ago, 42m ago, 1d
ago, 17h ago, and just now left every column unchanged\n- local icon off
left an aligned empty environment slot\n- local icon on filled that same
slot without moving the worktree or timestamp columns\n- worktree icons
off left an aligned empty worktree slot without moving environment icons
or timestamps\n- original isolated settings were restored after
testing\n\nValidation:\n- focused environment-icon tests: 10 passed\n-
web typecheck: passed\n- LastCode quick local CI: passed on rebased head
59ade172c\n- web tests: 2,856 passed\n- server tests: 2,838 passed, 7
skipped\n- all remaining workspace suites passed\n\nThe collaborative
preview screenshot operation itself failed, so there is no after image
attached; visual layout was verified from the rendered browser geometry
rather than inferred from source.\n\nImplemented with GPT-5.6 Codex in
the T3 Code harness.
lastobelus added a commit that referenced this pull request Aug 28, 2026
Tailscale Serve mappings persist independently of their loopback
backends. LastCode previously treated a failed HTTP probe as permission
to replace a configured port, and development sharing could proxy IPv4
while Vite listened only on IPv6 localhost.

This ports pingdotgg#8338 exactly into LastCode. It treats the
live Serve configuration as authoritative, reuses or removes only a
handler whose root proxy exactly matches the current LastCode lifecycle,
refuses occupied foreign handlers even when their backend is
unavailable, and makes shared development bind both Vite and its proxy
to `127.0.0.1`. Ordinary non-shared development remains on `localhost`.

Upstream source: pingdotgg#8338
Upstream head: `858e5eed8675b2025ec39118c7c9ae23edb7a4ad`

Validation:

- 6 focused files, 242 tests
- shared, tailscale, web, scripts, and server typechecks
- scoped lint, formatting, and diff checks
- normal guarded LastCode quick CI, including 2,837 server tests

Authored with GPT-5.6 Sol through the Codex harness.
lastobelus added a commit that referenced this pull request Aug 28, 2026
The Legacy Sidebar environment icons were not actually aligned in
scanning columns. Relative timestamp labels widened a flex container, so
the worktree and environment icons shifted horizontally from row to
row.\n\nThis replaces that flexible metadata area with fixed worktree,
environment, and timestamp tracks. Empty worktree and local-icon cells
remain mounted, while optional port and terminal indicators extend to
the left without moving the scanning columns. The newer Show worktree
indicators setting is preserved inside the fixed worktree
track.\n\nVisual QA on the isolated shared web app:\n- authenticated app
loaded successfully through vp run dev --share after rebasing onto PR
#102\n- all 10 real Legacy Sidebar rows used identical worktree,
environment, and timestamp coordinates\n- labels 2m ago, 42m ago, 1d
ago, 17h ago, and just now left every column unchanged\n- local icon off
left an aligned empty environment slot\n- local icon on filled that same
slot without moving the worktree or timestamp columns\n- worktree icons
off left an aligned empty worktree slot without moving environment icons
or timestamps\n- original isolated settings were restored after
testing\n\nValidation:\n- focused environment-icon tests: 10 passed\n-
web typecheck: passed\n- LastCode quick local CI: passed on rebased head
59ade172c\n- web tests: 2,856 passed\n- server tests: 2,838 passed, 7
skipped\n- all remaining workspace suites passed\n\nThe collaborative
preview screenshot operation itself failed, so there is no after image
attached; visual layout was verified from the rendered browser geometry
rather than inferred from source.\n\nImplemented with GPT-5.6 Codex in
the T3 Code harness.
lastobelus added a commit that referenced this pull request Sep 2, 2026
Tailscale Serve mappings persist independently of their loopback
backends. LastCode previously treated a failed HTTP probe as permission
to replace a configured port, and development sharing could proxy IPv4
while Vite listened only on IPv6 localhost.

This ports pingdotgg#8338 exactly into LastCode. It treats the
live Serve configuration as authoritative, reuses or removes only a
handler whose root proxy exactly matches the current LastCode lifecycle,
refuses occupied foreign handlers even when their backend is
unavailable, and makes shared development bind both Vite and its proxy
to `127.0.0.1`. Ordinary non-shared development remains on `localhost`.

Upstream source: pingdotgg#8338
Upstream head: `858e5eed8675b2025ec39118c7c9ae23edb7a4ad`

Validation:

- 6 focused files, 242 tests
- shared, tailscale, web, scripts, and server typechecks
- scoped lint, formatting, and diff checks
- normal guarded LastCode quick CI, including 2,837 server tests

Authored with GPT-5.6 Sol through the Codex harness.
lastobelus added a commit that referenced this pull request Sep 2, 2026
The Legacy Sidebar environment icons were not actually aligned in
scanning columns. Relative timestamp labels widened a flex container, so
the worktree and environment icons shifted horizontally from row to
row.\n\nThis replaces that flexible metadata area with fixed worktree,
environment, and timestamp tracks. Empty worktree and local-icon cells
remain mounted, while optional port and terminal indicators extend to
the left without moving the scanning columns. The newer Show worktree
indicators setting is preserved inside the fixed worktree
track.\n\nVisual QA on the isolated shared web app:\n- authenticated app
loaded successfully through vp run dev --share after rebasing onto PR
#102\n- all 10 real Legacy Sidebar rows used identical worktree,
environment, and timestamp coordinates\n- labels 2m ago, 42m ago, 1d
ago, 17h ago, and just now left every column unchanged\n- local icon off
left an aligned empty environment slot\n- local icon on filled that same
slot without moving the worktree or timestamp columns\n- worktree icons
off left an aligned empty worktree slot without moving environment icons
or timestamps\n- original isolated settings were restored after
testing\n\nValidation:\n- focused environment-icon tests: 10 passed\n-
web typecheck: passed\n- LastCode quick local CI: passed on rebased head
59ade172c\n- web tests: 2,856 passed\n- server tests: 2,838 passed, 7
skipped\n- all remaining workspace suites passed\n\nThe collaborative
preview screenshot operation itself failed, so there is no after image
attached; visual layout was verified from the rendered browser geometry
rather than inferred from source.\n\nImplemented with GPT-5.6 Codex in
the T3 Code harness.
lastobelus added a commit that referenced this pull request Sep 2, 2026
Tailscale Serve mappings persist independently of their loopback
backends. LastCode previously treated a failed HTTP probe as permission
to replace a configured port, and development sharing could proxy IPv4
while Vite listened only on IPv6 localhost.

This ports pingdotgg#8338 exactly into LastCode. It treats the
live Serve configuration as authoritative, reuses or removes only a
handler whose root proxy exactly matches the current LastCode lifecycle,
refuses occupied foreign handlers even when their backend is
unavailable, and makes shared development bind both Vite and its proxy
to `127.0.0.1`. Ordinary non-shared development remains on `localhost`.

Upstream source: pingdotgg#8338
Upstream head: `858e5eed8675b2025ec39118c7c9ae23edb7a4ad`

Validation:

- 6 focused files, 242 tests
- shared, tailscale, web, scripts, and server typechecks
- scoped lint, formatting, and diff checks
- normal guarded LastCode quick CI, including 2,837 server tests

Authored with GPT-5.6 Sol through the Codex harness.
lastobelus added a commit that referenced this pull request Sep 2, 2026
The Legacy Sidebar environment icons were not actually aligned in
scanning columns. Relative timestamp labels widened a flex container, so
the worktree and environment icons shifted horizontally from row to
row.\n\nThis replaces that flexible metadata area with fixed worktree,
environment, and timestamp tracks. Empty worktree and local-icon cells
remain mounted, while optional port and terminal indicators extend to
the left without moving the scanning columns. The newer Show worktree
indicators setting is preserved inside the fixed worktree
track.\n\nVisual QA on the isolated shared web app:\n- authenticated app
loaded successfully through vp run dev --share after rebasing onto PR
#102\n- all 10 real Legacy Sidebar rows used identical worktree,
environment, and timestamp coordinates\n- labels 2m ago, 42m ago, 1d
ago, 17h ago, and just now left every column unchanged\n- local icon off
left an aligned empty environment slot\n- local icon on filled that same
slot without moving the worktree or timestamp columns\n- worktree icons
off left an aligned empty worktree slot without moving environment icons
or timestamps\n- original isolated settings were restored after
testing\n\nValidation:\n- focused environment-icon tests: 10 passed\n-
web typecheck: passed\n- LastCode quick local CI: passed on rebased head
59ade172c\n- web tests: 2,856 passed\n- server tests: 2,838 passed, 7
skipped\n- all remaining workspace suites passed\n\nThe collaborative
preview screenshot operation itself failed, so there is no after image
attached; visual layout was verified from the rendered browser geometry
rather than inferred from source.\n\nImplemented with GPT-5.6 Codex in
the T3 Code harness.
lastobelus added a commit that referenced this pull request Sep 2, 2026
Tailscale Serve mappings persist independently of their loopback
backends. LastCode previously treated a failed HTTP probe as permission
to replace a configured port, and development sharing could proxy IPv4
while Vite listened only on IPv6 localhost.

This ports pingdotgg#8338 exactly into LastCode. It treats the
live Serve configuration as authoritative, reuses or removes only a
handler whose root proxy exactly matches the current LastCode lifecycle,
refuses occupied foreign handlers even when their backend is
unavailable, and makes shared development bind both Vite and its proxy
to `127.0.0.1`. Ordinary non-shared development remains on `localhost`.

Upstream source: pingdotgg#8338
Upstream head: `858e5eed8675b2025ec39118c7c9ae23edb7a4ad`

Validation:

- 6 focused files, 242 tests
- shared, tailscale, web, scripts, and server typechecks
- scoped lint, formatting, and diff checks
- normal guarded LastCode quick CI, including 2,837 server tests

Authored with GPT-5.6 Sol through the Codex harness.
lastobelus added a commit that referenced this pull request Sep 2, 2026
The Legacy Sidebar environment icons were not actually aligned in
scanning columns. Relative timestamp labels widened a flex container, so
the worktree and environment icons shifted horizontally from row to
row.\n\nThis replaces that flexible metadata area with fixed worktree,
environment, and timestamp tracks. Empty worktree and local-icon cells
remain mounted, while optional port and terminal indicators extend to
the left without moving the scanning columns. The newer Show worktree
indicators setting is preserved inside the fixed worktree
track.\n\nVisual QA on the isolated shared web app:\n- authenticated app
loaded successfully through vp run dev --share after rebasing onto PR
#102\n- all 10 real Legacy Sidebar rows used identical worktree,
environment, and timestamp coordinates\n- labels 2m ago, 42m ago, 1d
ago, 17h ago, and just now left every column unchanged\n- local icon off
left an aligned empty environment slot\n- local icon on filled that same
slot without moving the worktree or timestamp columns\n- worktree icons
off left an aligned empty worktree slot without moving environment icons
or timestamps\n- original isolated settings were restored after
testing\n\nValidation:\n- focused environment-icon tests: 10 passed\n-
web typecheck: passed\n- LastCode quick local CI: passed on rebased head
59ade172c\n- web tests: 2,856 passed\n- server tests: 2,838 passed, 7
skipped\n- all remaining workspace suites passed\n\nThe collaborative
preview screenshot operation itself failed, so there is no after image
attached; visual layout was verified from the rendered browser geometry
rather than inferred from source.\n\nImplemented with GPT-5.6 Codex in
the T3 Code harness.
lastobelus added a commit that referenced this pull request Sep 2, 2026
Tailscale Serve mappings persist independently of their loopback
backends. LastCode previously treated a failed HTTP probe as permission
to replace a configured port, and development sharing could proxy IPv4
while Vite listened only on IPv6 localhost.

This ports pingdotgg#8338 exactly into LastCode. It treats the
live Serve configuration as authoritative, reuses or removes only a
handler whose root proxy exactly matches the current LastCode lifecycle,
refuses occupied foreign handlers even when their backend is
unavailable, and makes shared development bind both Vite and its proxy
to `127.0.0.1`. Ordinary non-shared development remains on `localhost`.

Upstream source: pingdotgg#8338
Upstream head: `858e5eed8675b2025ec39118c7c9ae23edb7a4ad`

Validation:

- 6 focused files, 242 tests
- shared, tailscale, web, scripts, and server typechecks
- scoped lint, formatting, and diff checks
- normal guarded LastCode quick CI, including 2,837 server tests

Authored with GPT-5.6 Sol through the Codex harness.
lastobelus added a commit that referenced this pull request Sep 2, 2026
The Legacy Sidebar environment icons were not actually aligned in
scanning columns. Relative timestamp labels widened a flex container, so
the worktree and environment icons shifted horizontally from row to
row.\n\nThis replaces that flexible metadata area with fixed worktree,
environment, and timestamp tracks. Empty worktree and local-icon cells
remain mounted, while optional port and terminal indicators extend to
the left without moving the scanning columns. The newer Show worktree
indicators setting is preserved inside the fixed worktree
track.\n\nVisual QA on the isolated shared web app:\n- authenticated app
loaded successfully through vp run dev --share after rebasing onto PR
#102\n- all 10 real Legacy Sidebar rows used identical worktree,
environment, and timestamp coordinates\n- labels 2m ago, 42m ago, 1d
ago, 17h ago, and just now left every column unchanged\n- local icon off
left an aligned empty environment slot\n- local icon on filled that same
slot without moving the worktree or timestamp columns\n- worktree icons
off left an aligned empty worktree slot without moving environment icons
or timestamps\n- original isolated settings were restored after
testing\n\nValidation:\n- focused environment-icon tests: 10 passed\n-
web typecheck: passed\n- LastCode quick local CI: passed on rebased head
59ade172c\n- web tests: 2,856 passed\n- server tests: 2,838 passed, 7
skipped\n- all remaining workspace suites passed\n\nThe collaborative
preview screenshot operation itself failed, so there is no after image
attached; visual layout was verified from the rendered browser geometry
rather than inferred from source.\n\nImplemented with GPT-5.6 Codex in
the T3 Code harness.
lastobelus added a commit that referenced this pull request Sep 2, 2026
Tailscale Serve mappings persist independently of their loopback
backends. LastCode previously treated a failed HTTP probe as permission
to replace a configured port, and development sharing could proxy IPv4
while Vite listened only on IPv6 localhost.

This ports pingdotgg#8338 exactly into LastCode. It treats the
live Serve configuration as authoritative, reuses or removes only a
handler whose root proxy exactly matches the current LastCode lifecycle,
refuses occupied foreign handlers even when their backend is
unavailable, and makes shared development bind both Vite and its proxy
to `127.0.0.1`. Ordinary non-shared development remains on `localhost`.

Upstream source: pingdotgg#8338
Upstream head: `858e5eed8675b2025ec39118c7c9ae23edb7a4ad`

Validation:

- 6 focused files, 242 tests
- shared, tailscale, web, scripts, and server typechecks
- scoped lint, formatting, and diff checks
- normal guarded LastCode quick CI, including 2,837 server tests

Authored with GPT-5.6 Sol through the Codex harness.
lastobelus added a commit that referenced this pull request Sep 2, 2026
The Legacy Sidebar environment icons were not actually aligned in
scanning columns. Relative timestamp labels widened a flex container, so
the worktree and environment icons shifted horizontally from row to
row.\n\nThis replaces that flexible metadata area with fixed worktree,
environment, and timestamp tracks. Empty worktree and local-icon cells
remain mounted, while optional port and terminal indicators extend to
the left without moving the scanning columns. The newer Show worktree
indicators setting is preserved inside the fixed worktree
track.\n\nVisual QA on the isolated shared web app:\n- authenticated app
loaded successfully through vp run dev --share after rebasing onto PR
#102\n- all 10 real Legacy Sidebar rows used identical worktree,
environment, and timestamp coordinates\n- labels 2m ago, 42m ago, 1d
ago, 17h ago, and just now left every column unchanged\n- local icon off
left an aligned empty environment slot\n- local icon on filled that same
slot without moving the worktree or timestamp columns\n- worktree icons
off left an aligned empty worktree slot without moving environment icons
or timestamps\n- original isolated settings were restored after
testing\n\nValidation:\n- focused environment-icon tests: 10 passed\n-
web typecheck: passed\n- LastCode quick local CI: passed on rebased head
59ade172c\n- web tests: 2,856 passed\n- server tests: 2,838 passed, 7
skipped\n- all remaining workspace suites passed\n\nThe collaborative
preview screenshot operation itself failed, so there is no after image
attached; visual layout was verified from the rendered browser geometry
rather than inferred from source.\n\nImplemented with GPT-5.6 Codex in
the T3 Code harness.
lastobelus added a commit that referenced this pull request Sep 2, 2026
Tailscale Serve mappings persist independently of their loopback
backends. LastCode previously treated a failed HTTP probe as permission
to replace a configured port, and development sharing could proxy IPv4
while Vite listened only on IPv6 localhost.

This ports pingdotgg#8338 exactly into LastCode. It treats the
live Serve configuration as authoritative, reuses or removes only a
handler whose root proxy exactly matches the current LastCode lifecycle,
refuses occupied foreign handlers even when their backend is
unavailable, and makes shared development bind both Vite and its proxy
to `127.0.0.1`. Ordinary non-shared development remains on `localhost`.

Upstream source: pingdotgg#8338
Upstream head: `858e5eed8675b2025ec39118c7c9ae23edb7a4ad`

Validation:

- 6 focused files, 242 tests
- shared, tailscale, web, scripts, and server typechecks
- scoped lint, formatting, and diff checks
- normal guarded LastCode quick CI, including 2,837 server tests

Authored with GPT-5.6 Sol through the Codex harness.
lastobelus added a commit that referenced this pull request Sep 2, 2026
The Legacy Sidebar environment icons were not actually aligned in
scanning columns. Relative timestamp labels widened a flex container, so
the worktree and environment icons shifted horizontally from row to
row.\n\nThis replaces that flexible metadata area with fixed worktree,
environment, and timestamp tracks. Empty worktree and local-icon cells
remain mounted, while optional port and terminal indicators extend to
the left without moving the scanning columns. The newer Show worktree
indicators setting is preserved inside the fixed worktree
track.\n\nVisual QA on the isolated shared web app:\n- authenticated app
loaded successfully through vp run dev --share after rebasing onto PR
#102\n- all 10 real Legacy Sidebar rows used identical worktree,
environment, and timestamp coordinates\n- labels 2m ago, 42m ago, 1d
ago, 17h ago, and just now left every column unchanged\n- local icon off
left an aligned empty environment slot\n- local icon on filled that same
slot without moving the worktree or timestamp columns\n- worktree icons
off left an aligned empty worktree slot without moving environment icons
or timestamps\n- original isolated settings were restored after
testing\n\nValidation:\n- focused environment-icon tests: 10 passed\n-
web typecheck: passed\n- LastCode quick local CI: passed on rebased head
59ade172c\n- web tests: 2,856 passed\n- server tests: 2,838 passed, 7
skipped\n- all remaining workspace suites passed\n\nThe collaborative
preview screenshot operation itself failed, so there is no after image
attached; visual layout was verified from the rendered browser geometry
rather than inferred from source.\n\nImplemented with GPT-5.6 Codex in
the T3 Code harness.
lastobelus added a commit that referenced this pull request Sep 3, 2026
Tailscale Serve mappings persist independently of their loopback
backends. LastCode previously treated a failed HTTP probe as permission
to replace a configured port, and development sharing could proxy IPv4
while Vite listened only on IPv6 localhost.

This ports pingdotgg#8338 exactly into LastCode. It treats the
live Serve configuration as authoritative, reuses or removes only a
handler whose root proxy exactly matches the current LastCode lifecycle,
refuses occupied foreign handlers even when their backend is
unavailable, and makes shared development bind both Vite and its proxy
to `127.0.0.1`. Ordinary non-shared development remains on `localhost`.

Upstream source: pingdotgg#8338
Upstream head: `858e5eed8675b2025ec39118c7c9ae23edb7a4ad`

Validation:

- 6 focused files, 242 tests
- shared, tailscale, web, scripts, and server typechecks
- scoped lint, formatting, and diff checks
- normal guarded LastCode quick CI, including 2,837 server tests

Authored with GPT-5.6 Sol through the Codex harness.
lastobelus added a commit that referenced this pull request Sep 3, 2026
The Legacy Sidebar environment icons were not actually aligned in
scanning columns. Relative timestamp labels widened a flex container, so
the worktree and environment icons shifted horizontally from row to
row.\n\nThis replaces that flexible metadata area with fixed worktree,
environment, and timestamp tracks. Empty worktree and local-icon cells
remain mounted, while optional port and terminal indicators extend to
the left without moving the scanning columns. The newer Show worktree
indicators setting is preserved inside the fixed worktree
track.\n\nVisual QA on the isolated shared web app:\n- authenticated app
loaded successfully through vp run dev --share after rebasing onto PR
#102\n- all 10 real Legacy Sidebar rows used identical worktree,
environment, and timestamp coordinates\n- labels 2m ago, 42m ago, 1d
ago, 17h ago, and just now left every column unchanged\n- local icon off
left an aligned empty environment slot\n- local icon on filled that same
slot without moving the worktree or timestamp columns\n- worktree icons
off left an aligned empty worktree slot without moving environment icons
or timestamps\n- original isolated settings were restored after
testing\n\nValidation:\n- focused environment-icon tests: 10 passed\n-
web typecheck: passed\n- LastCode quick local CI: passed on rebased head
59ade172c\n- web tests: 2,856 passed\n- server tests: 2,838 passed, 7
skipped\n- all remaining workspace suites passed\n\nThe collaborative
preview screenshot operation itself failed, so there is no after image
attached; visual layout was verified from the rendered browser geometry
rather than inferred from source.\n\nImplemented with GPT-5.6 Codex in
the T3 Code harness.
lastobelus added a commit that referenced this pull request Sep 3, 2026
Tailscale Serve mappings persist independently of their loopback
backends. LastCode previously treated a failed HTTP probe as permission
to replace a configured port, and development sharing could proxy IPv4
while Vite listened only on IPv6 localhost.

This ports pingdotgg#8338 exactly into LastCode. It treats the
live Serve configuration as authoritative, reuses or removes only a
handler whose root proxy exactly matches the current LastCode lifecycle,
refuses occupied foreign handlers even when their backend is
unavailable, and makes shared development bind both Vite and its proxy
to `127.0.0.1`. Ordinary non-shared development remains on `localhost`.

Upstream source: pingdotgg#8338
Upstream head: `858e5eed8675b2025ec39118c7c9ae23edb7a4ad`

Validation:

- 6 focused files, 242 tests
- shared, tailscale, web, scripts, and server typechecks
- scoped lint, formatting, and diff checks
- normal guarded LastCode quick CI, including 2,837 server tests

Authored with GPT-5.6 Sol through the Codex harness.
lastobelus added a commit that referenced this pull request Sep 3, 2026
The Legacy Sidebar environment icons were not actually aligned in
scanning columns. Relative timestamp labels widened a flex container, so
the worktree and environment icons shifted horizontally from row to
row.\n\nThis replaces that flexible metadata area with fixed worktree,
environment, and timestamp tracks. Empty worktree and local-icon cells
remain mounted, while optional port and terminal indicators extend to
the left without moving the scanning columns. The newer Show worktree
indicators setting is preserved inside the fixed worktree
track.\n\nVisual QA on the isolated shared web app:\n- authenticated app
loaded successfully through vp run dev --share after rebasing onto PR
#102\n- all 10 real Legacy Sidebar rows used identical worktree,
environment, and timestamp coordinates\n- labels 2m ago, 42m ago, 1d
ago, 17h ago, and just now left every column unchanged\n- local icon off
left an aligned empty environment slot\n- local icon on filled that same
slot without moving the worktree or timestamp columns\n- worktree icons
off left an aligned empty worktree slot without moving environment icons
or timestamps\n- original isolated settings were restored after
testing\n\nValidation:\n- focused environment-icon tests: 10 passed\n-
web typecheck: passed\n- LastCode quick local CI: passed on rebased head
59ade172c\n- web tests: 2,856 passed\n- server tests: 2,838 passed, 7
skipped\n- all remaining workspace suites passed\n\nThe collaborative
preview screenshot operation itself failed, so there is no after image
attached; visual layout was verified from the rendered browser geometry
rather than inferred from source.\n\nImplemented with GPT-5.6 Codex in
the T3 Code harness.
lastobelus added a commit that referenced this pull request Sep 3, 2026
Tailscale Serve mappings persist independently of their loopback
backends. LastCode previously treated a failed HTTP probe as permission
to replace a configured port, and development sharing could proxy IPv4
while Vite listened only on IPv6 localhost.

This ports pingdotgg#8338 exactly into LastCode. It treats the
live Serve configuration as authoritative, reuses or removes only a
handler whose root proxy exactly matches the current LastCode lifecycle,
refuses occupied foreign handlers even when their backend is
unavailable, and makes shared development bind both Vite and its proxy
to `127.0.0.1`. Ordinary non-shared development remains on `localhost`.

Upstream source: pingdotgg#8338
Upstream head: `858e5eed8675b2025ec39118c7c9ae23edb7a4ad`

Validation:

- 6 focused files, 242 tests
- shared, tailscale, web, scripts, and server typechecks
- scoped lint, formatting, and diff checks
- normal guarded LastCode quick CI, including 2,837 server tests

Authored with GPT-5.6 Sol through the Codex harness.
lastobelus added a commit that referenced this pull request Sep 3, 2026
The Legacy Sidebar environment icons were not actually aligned in
scanning columns. Relative timestamp labels widened a flex container, so
the worktree and environment icons shifted horizontally from row to
row.\n\nThis replaces that flexible metadata area with fixed worktree,
environment, and timestamp tracks. Empty worktree and local-icon cells
remain mounted, while optional port and terminal indicators extend to
the left without moving the scanning columns. The newer Show worktree
indicators setting is preserved inside the fixed worktree
track.\n\nVisual QA on the isolated shared web app:\n- authenticated app
loaded successfully through vp run dev --share after rebasing onto PR
#102\n- all 10 real Legacy Sidebar rows used identical worktree,
environment, and timestamp coordinates\n- labels 2m ago, 42m ago, 1d
ago, 17h ago, and just now left every column unchanged\n- local icon off
left an aligned empty environment slot\n- local icon on filled that same
slot without moving the worktree or timestamp columns\n- worktree icons
off left an aligned empty worktree slot without moving environment icons
or timestamps\n- original isolated settings were restored after
testing\n\nValidation:\n- focused environment-icon tests: 10 passed\n-
web typecheck: passed\n- LastCode quick local CI: passed on rebased head
59ade172c\n- web tests: 2,856 passed\n- server tests: 2,838 passed, 7
skipped\n- all remaining workspace suites passed\n\nThe collaborative
preview screenshot operation itself failed, so there is no after image
attached; visual layout was verified from the rendered browser geometry
rather than inferred from source.\n\nImplemented with GPT-5.6 Codex in
the T3 Code harness.
lastobelus added a commit that referenced this pull request Sep 3, 2026
Tailscale Serve mappings persist independently of their loopback
backends. LastCode previously treated a failed HTTP probe as permission
to replace a configured port, and development sharing could proxy IPv4
while Vite listened only on IPv6 localhost.

This ports pingdotgg#8338 exactly into LastCode. It treats the
live Serve configuration as authoritative, reuses or removes only a
handler whose root proxy exactly matches the current LastCode lifecycle,
refuses occupied foreign handlers even when their backend is
unavailable, and makes shared development bind both Vite and its proxy
to `127.0.0.1`. Ordinary non-shared development remains on `localhost`.

Upstream source: pingdotgg#8338
Upstream head: `858e5eed8675b2025ec39118c7c9ae23edb7a4ad`

Validation:

- 6 focused files, 242 tests
- shared, tailscale, web, scripts, and server typechecks
- scoped lint, formatting, and diff checks
- normal guarded LastCode quick CI, including 2,837 server tests

Authored with GPT-5.6 Sol through the Codex harness.
lastobelus added a commit that referenced this pull request Sep 3, 2026
The Legacy Sidebar environment icons were not actually aligned in
scanning columns. Relative timestamp labels widened a flex container, so
the worktree and environment icons shifted horizontally from row to
row.\n\nThis replaces that flexible metadata area with fixed worktree,
environment, and timestamp tracks. Empty worktree and local-icon cells
remain mounted, while optional port and terminal indicators extend to
the left without moving the scanning columns. The newer Show worktree
indicators setting is preserved inside the fixed worktree
track.\n\nVisual QA on the isolated shared web app:\n- authenticated app
loaded successfully through vp run dev --share after rebasing onto PR
#102\n- all 10 real Legacy Sidebar rows used identical worktree,
environment, and timestamp coordinates\n- labels 2m ago, 42m ago, 1d
ago, 17h ago, and just now left every column unchanged\n- local icon off
left an aligned empty environment slot\n- local icon on filled that same
slot without moving the worktree or timestamp columns\n- worktree icons
off left an aligned empty worktree slot without moving environment icons
or timestamps\n- original isolated settings were restored after
testing\n\nValidation:\n- focused environment-icon tests: 10 passed\n-
web typecheck: passed\n- LastCode quick local CI: passed on rebased head
59ade172c\n- web tests: 2,856 passed\n- server tests: 2,838 passed, 7
skipped\n- all remaining workspace suites passed\n\nThe collaborative
preview screenshot operation itself failed, so there is no after image
attached; visual layout was verified from the rendered browser geometry
rather than inferred from source.\n\nImplemented with GPT-5.6 Codex in
the T3 Code harness.
lastobelus added a commit that referenced this pull request Sep 3, 2026
Tailscale Serve mappings persist independently of their loopback
backends. LastCode previously treated a failed HTTP probe as permission
to replace a configured port, and development sharing could proxy IPv4
while Vite listened only on IPv6 localhost.

This ports pingdotgg#8338 exactly into LastCode. It treats the
live Serve configuration as authoritative, reuses or removes only a
handler whose root proxy exactly matches the current LastCode lifecycle,
refuses occupied foreign handlers even when their backend is
unavailable, and makes shared development bind both Vite and its proxy
to `127.0.0.1`. Ordinary non-shared development remains on `localhost`.

Upstream source: pingdotgg#8338
Upstream head: `858e5eed8675b2025ec39118c7c9ae23edb7a4ad`

Validation:

- 6 focused files, 242 tests
- shared, tailscale, web, scripts, and server typechecks
- scoped lint, formatting, and diff checks
- normal guarded LastCode quick CI, including 2,837 server tests

Authored with GPT-5.6 Sol through the Codex harness.
lastobelus added a commit that referenced this pull request Sep 3, 2026
The Legacy Sidebar environment icons were not actually aligned in
scanning columns. Relative timestamp labels widened a flex container, so
the worktree and environment icons shifted horizontally from row to
row.\n\nThis replaces that flexible metadata area with fixed worktree,
environment, and timestamp tracks. Empty worktree and local-icon cells
remain mounted, while optional port and terminal indicators extend to
the left without moving the scanning columns. The newer Show worktree
indicators setting is preserved inside the fixed worktree
track.\n\nVisual QA on the isolated shared web app:\n- authenticated app
loaded successfully through vp run dev --share after rebasing onto PR
#102\n- all 10 real Legacy Sidebar rows used identical worktree,
environment, and timestamp coordinates\n- labels 2m ago, 42m ago, 1d
ago, 17h ago, and just now left every column unchanged\n- local icon off
left an aligned empty environment slot\n- local icon on filled that same
slot without moving the worktree or timestamp columns\n- worktree icons
off left an aligned empty worktree slot without moving environment icons
or timestamps\n- original isolated settings were restored after
testing\n\nValidation:\n- focused environment-icon tests: 10 passed\n-
web typecheck: passed\n- LastCode quick local CI: passed on rebased head
59ade172c\n- web tests: 2,856 passed\n- server tests: 2,838 passed, 7
skipped\n- all remaining workspace suites passed\n\nThe collaborative
preview screenshot operation itself failed, so there is no after image
attached; visual layout was verified from the rendered browser geometry
rather than inferred from source.\n\nImplemented with GPT-5.6 Codex in
the T3 Code harness.
lastobelus added a commit that referenced this pull request Sep 5, 2026
Tailscale Serve mappings persist independently of their loopback
backends. LastCode previously treated a failed HTTP probe as permission
to replace a configured port, and development sharing could proxy IPv4
while Vite listened only on IPv6 localhost.

This ports pingdotgg#8338 exactly into LastCode. It treats the
live Serve configuration as authoritative, reuses or removes only a
handler whose root proxy exactly matches the current LastCode lifecycle,
refuses occupied foreign handlers even when their backend is
unavailable, and makes shared development bind both Vite and its proxy
to `127.0.0.1`. Ordinary non-shared development remains on `localhost`.

Upstream source: pingdotgg#8338
Upstream head: `858e5eed8675b2025ec39118c7c9ae23edb7a4ad`

Validation:

- 6 focused files, 242 tests
- shared, tailscale, web, scripts, and server typechecks
- scoped lint, formatting, and diff checks
- normal guarded LastCode quick CI, including 2,837 server tests

Authored with GPT-5.6 Sol through the Codex harness.
lastobelus added a commit that referenced this pull request Sep 5, 2026
The Legacy Sidebar environment icons were not actually aligned in
scanning columns. Relative timestamp labels widened a flex container, so
the worktree and environment icons shifted horizontally from row to
row.\n\nThis replaces that flexible metadata area with fixed worktree,
environment, and timestamp tracks. Empty worktree and local-icon cells
remain mounted, while optional port and terminal indicators extend to
the left without moving the scanning columns. The newer Show worktree
indicators setting is preserved inside the fixed worktree
track.\n\nVisual QA on the isolated shared web app:\n- authenticated app
loaded successfully through vp run dev --share after rebasing onto PR
#102\n- all 10 real Legacy Sidebar rows used identical worktree,
environment, and timestamp coordinates\n- labels 2m ago, 42m ago, 1d
ago, 17h ago, and just now left every column unchanged\n- local icon off
left an aligned empty environment slot\n- local icon on filled that same
slot without moving the worktree or timestamp columns\n- worktree icons
off left an aligned empty worktree slot without moving environment icons
or timestamps\n- original isolated settings were restored after
testing\n\nValidation:\n- focused environment-icon tests: 10 passed\n-
web typecheck: passed\n- LastCode quick local CI: passed on rebased head
59ade172c\n- web tests: 2,856 passed\n- server tests: 2,838 passed, 7
skipped\n- all remaining workspace suites passed\n\nThe collaborative
preview screenshot operation itself failed, so there is no after image
attached; visual layout was verified from the rendered browser geometry
rather than inferred from source.\n\nImplemented with GPT-5.6 Codex in
the T3 Code harness.
lastobelus added a commit that referenced this pull request Sep 5, 2026
Tailscale Serve mappings persist independently of their loopback
backends. LastCode previously treated a failed HTTP probe as permission
to replace a configured port, and development sharing could proxy IPv4
while Vite listened only on IPv6 localhost.

This ports pingdotgg#8338 exactly into LastCode. It treats the
live Serve configuration as authoritative, reuses or removes only a
handler whose root proxy exactly matches the current LastCode lifecycle,
refuses occupied foreign handlers even when their backend is
unavailable, and makes shared development bind both Vite and its proxy
to `127.0.0.1`. Ordinary non-shared development remains on `localhost`.

Upstream source: pingdotgg#8338
Upstream head: `858e5eed8675b2025ec39118c7c9ae23edb7a4ad`

Validation:

- 6 focused files, 242 tests
- shared, tailscale, web, scripts, and server typechecks
- scoped lint, formatting, and diff checks
- normal guarded LastCode quick CI, including 2,837 server tests

Authored with GPT-5.6 Sol through the Codex harness.
lastobelus added a commit that referenced this pull request Sep 5, 2026
The Legacy Sidebar environment icons were not actually aligned in
scanning columns. Relative timestamp labels widened a flex container, so
the worktree and environment icons shifted horizontally from row to
row.\n\nThis replaces that flexible metadata area with fixed worktree,
environment, and timestamp tracks. Empty worktree and local-icon cells
remain mounted, while optional port and terminal indicators extend to
the left without moving the scanning columns. The newer Show worktree
indicators setting is preserved inside the fixed worktree
track.\n\nVisual QA on the isolated shared web app:\n- authenticated app
loaded successfully through vp run dev --share after rebasing onto PR
#102\n- all 10 real Legacy Sidebar rows used identical worktree,
environment, and timestamp coordinates\n- labels 2m ago, 42m ago, 1d
ago, 17h ago, and just now left every column unchanged\n- local icon off
left an aligned empty environment slot\n- local icon on filled that same
slot without moving the worktree or timestamp columns\n- worktree icons
off left an aligned empty worktree slot without moving environment icons
or timestamps\n- original isolated settings were restored after
testing\n\nValidation:\n- focused environment-icon tests: 10 passed\n-
web typecheck: passed\n- LastCode quick local CI: passed on rebased head
59ade172c\n- web tests: 2,856 passed\n- server tests: 2,838 passed, 7
skipped\n- all remaining workspace suites passed\n\nThe collaborative
preview screenshot operation itself failed, so there is no after image
attached; visual layout was verified from the rendered browser geometry
rather than inferred from source.\n\nImplemented with GPT-5.6 Codex in
the T3 Code harness.
lastobelus added a commit that referenced this pull request Sep 5, 2026
Tailscale Serve mappings persist independently of their loopback
backends. LastCode previously treated a failed HTTP probe as permission
to replace a configured port, and development sharing could proxy IPv4
while Vite listened only on IPv6 localhost.

This ports pingdotgg#8338 exactly into LastCode. It treats the
live Serve configuration as authoritative, reuses or removes only a
handler whose root proxy exactly matches the current LastCode lifecycle,
refuses occupied foreign handlers even when their backend is
unavailable, and makes shared development bind both Vite and its proxy
to `127.0.0.1`. Ordinary non-shared development remains on `localhost`.

Upstream source: pingdotgg#8338
Upstream head: `858e5eed8675b2025ec39118c7c9ae23edb7a4ad`

Validation:

- 6 focused files, 242 tests
- shared, tailscale, web, scripts, and server typechecks
- scoped lint, formatting, and diff checks
- normal guarded LastCode quick CI, including 2,837 server tests

Authored with GPT-5.6 Sol through the Codex harness.
lastobelus added a commit that referenced this pull request Sep 5, 2026
The Legacy Sidebar environment icons were not actually aligned in
scanning columns. Relative timestamp labels widened a flex container, so
the worktree and environment icons shifted horizontally from row to
row.\n\nThis replaces that flexible metadata area with fixed worktree,
environment, and timestamp tracks. Empty worktree and local-icon cells
remain mounted, while optional port and terminal indicators extend to
the left without moving the scanning columns. The newer Show worktree
indicators setting is preserved inside the fixed worktree
track.\n\nVisual QA on the isolated shared web app:\n- authenticated app
loaded successfully through vp run dev --share after rebasing onto PR
#102\n- all 10 real Legacy Sidebar rows used identical worktree,
environment, and timestamp coordinates\n- labels 2m ago, 42m ago, 1d
ago, 17h ago, and just now left every column unchanged\n- local icon off
left an aligned empty environment slot\n- local icon on filled that same
slot without moving the worktree or timestamp columns\n- worktree icons
off left an aligned empty worktree slot without moving environment icons
or timestamps\n- original isolated settings were restored after
testing\n\nValidation:\n- focused environment-icon tests: 10 passed\n-
web typecheck: passed\n- LastCode quick local CI: passed on rebased head
59ade172c\n- web tests: 2,856 passed\n- server tests: 2,838 passed, 7
skipped\n- all remaining workspace suites passed\n\nThe collaborative
preview screenshot operation itself failed, so there is no after image
attached; visual layout was verified from the rendered browser geometry
rather than inferred from source.\n\nImplemented with GPT-5.6 Codex in
the T3 Code harness.
lastobelus added a commit that referenced this pull request Sep 5, 2026
Tailscale Serve mappings persist independently of their loopback
backends. LastCode previously treated a failed HTTP probe as permission
to replace a configured port, and development sharing could proxy IPv4
while Vite listened only on IPv6 localhost.

This ports pingdotgg#8338 exactly into LastCode. It treats the
live Serve configuration as authoritative, reuses or removes only a
handler whose root proxy exactly matches the current LastCode lifecycle,
refuses occupied foreign handlers even when their backend is
unavailable, and makes shared development bind both Vite and its proxy
to `127.0.0.1`. Ordinary non-shared development remains on `localhost`.

Upstream source: pingdotgg#8338
Upstream head: `858e5eed8675b2025ec39118c7c9ae23edb7a4ad`

Validation:

- 6 focused files, 242 tests
- shared, tailscale, web, scripts, and server typechecks
- scoped lint, formatting, and diff checks
- normal guarded LastCode quick CI, including 2,837 server tests

Authored with GPT-5.6 Sol through the Codex harness.
lastobelus added a commit that referenced this pull request Sep 5, 2026
The Legacy Sidebar environment icons were not actually aligned in
scanning columns. Relative timestamp labels widened a flex container, so
the worktree and environment icons shifted horizontally from row to
row.\n\nThis replaces that flexible metadata area with fixed worktree,
environment, and timestamp tracks. Empty worktree and local-icon cells
remain mounted, while optional port and terminal indicators extend to
the left without moving the scanning columns. The newer Show worktree
indicators setting is preserved inside the fixed worktree
track.\n\nVisual QA on the isolated shared web app:\n- authenticated app
loaded successfully through vp run dev --share after rebasing onto PR
#102\n- all 10 real Legacy Sidebar rows used identical worktree,
environment, and timestamp coordinates\n- labels 2m ago, 42m ago, 1d
ago, 17h ago, and just now left every column unchanged\n- local icon off
left an aligned empty environment slot\n- local icon on filled that same
slot without moving the worktree or timestamp columns\n- worktree icons
off left an aligned empty worktree slot without moving environment icons
or timestamps\n- original isolated settings were restored after
testing\n\nValidation:\n- focused environment-icon tests: 10 passed\n-
web typecheck: passed\n- LastCode quick local CI: passed on rebased head
59ade172c\n- web tests: 2,856 passed\n- server tests: 2,838 passed, 7
skipped\n- all remaining workspace suites passed\n\nThe collaborative
preview screenshot operation itself failed, so there is no after image
attached; visual layout was verified from the rendered browser geometry
rather than inferred from source.\n\nImplemented with GPT-5.6 Codex in
the T3 Code 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