Skip to content

Fix publish with unavailable Orca tabs and spaced project names - #82

Merged
changl merged 8 commits into
changl/fixesfrom
changl/fix-publish
Nov 1, 2026
Merged

changl merged 8 commits into
changl/fixesfrom
changl/fix-publish

Conversation

@changl

@changl changl commented Nov 1, 2026

Copy link
Copy Markdown
Owner

When Orca creates a tab ID that cannot be read back, new --publish --ask currently fails after successful origin and Tailscale probes and leaves its cards unposted. Report browser harness failures as unavailable, print the skip reason with the URL, and continue posting cards; rendered login pages, HTTP errors, gateway pages and missing anchors still fail the public check.

Default Funnel routes now slugify the project segment for both fresh publish and transport migration. Project keys and explicit publish path overrides retain their values. Exact server argv comes from only the two requested pilot commits (db22387 and 973b61d), cherry-picked with the removed 2.28.0 legacy tests kept deleted; no pilot branch merge.

agent-annotate-52s: unmodified 2.28.0 loaded every image on a temporary FLD v583 copy in iPad WebKit and desktop Chrome (154 images each, all lazy, one first-screen image request, no broken images or HTTP errors). This exercised the full mounted page at a sandbox origin, without changing live Funnel routes. Bare /annotate/ paths fall through to a shared root handler outside this package; that handler was left untouched as directed.

All requested full-suite chunks were run:

  • Python A–F: 710 passed, 2 opt-in browser checks skipped; G–P: 631 passed; Q–Z plus monitor: 380 passed.
  • Browser A–F: 101 passed, 2 failed; G–P: 46 passed; Q–Z: 88 passed, 4 failed.

The raw browser suite is not green. Both original A–F failures pass isolated on this branch and on unmodified 2.28.0. Slower typing across a save response confirms an existing 2.28.0 Library text-loss defect; the popup navigation timeout also reproduces on the baseline (the four Q–Z nodes reran as 3 passed, 1 failed). These findings were escalated to the coordinator. Browser scripts, page generation and the sync server are unchanged by this PR; no tests were weakened.

Ruff, all seven browser JavaScript syntax checks, and git diff --check pass. Per-bead reproduction, root cause, commits, the deterministic baseline reproducer and sandbox browser evidence are recorded in the validation report. All three assigned beads remain open for coordinator reconciliation.

changl and others added 8 commits October 31, 2026 22:32
ps joins argv with spaces and quotes nothing, so shlex.split misread any
page server whose slug_dir, bus dir or interpreter path held a space:
restart, rollback and unpublish refused such pages as foreign, and doctor
could not see unregistered legacy servers (agent-annotate-d8q, part 2).
cli._process_argv reads the exact argv (Linux /proc cmdline, macOS sysctl
KERN_PROCARGS2). cli._running_servers, deployment._identity and
version_guard._unregistered_servers use it, and skip or refuse a process
whose argv cannot be read. Identity, port, bus and registry checks are
unchanged.

Tests: fake executables use pip/uv's /bin/sh launcher header instead of a
raw #!sys.executable; shims and expected fix commands are shell-quoted; the
bd stub records argv one per line; the version-guard estate keeps its skills
on the cwd chain, so the effective-skill walk never reaches a real home.
New coverage, independent of the runner's path: exact argv of a real spaced
process, no prefix mapping for a spaced slug_dir, unreadable argv refused,
and legacy restart/rollback and unregistered-server checks on spaced paths.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
KERN_PROCARGS2 pads the executable path with NULs to a multiple of 8
bytes before argv. Skipping every NUL also skipped an empty argv[0], so
the parse counted the first environment entry as an argument (root's
controlled /bin/sleep probe). Place argv[0] at the padded offset instead:
non-NUL padding, a NUL where argv[0] must start (an empty argv[0] and more
padding are indistinguishable) or a missing terminator returns None.
Non-empty interpreter paths, spaces and later empty arguments read exactly
as before; Linux /proc is unchanged.

test_process_argv_never_reads_the_environment_as_an_argument: a live
/bin/sleep child with argv ["", "3"] and a sentinel environment reads as
["", "3"] on Linux and None on macOS, never the sentinel.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@changl
changl marked this pull request as ready for review November 1, 2026 06:39
@changl
changl merged commit f5468ea into changl/fixes Nov 1, 2026
1 check passed
@changl changl mentioned this pull request Nov 2, 2026
@changl
changl deleted the changl/fix-publish branch November 4, 2026 05:40
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