fix(lastcode): clone historical Intel targets without credentials - #85
fix(lastcode): clone historical Intel targets without credentials#85lastobelus wants to merge 81 commits into
Conversation
LastCode needs to remain a small personal fork that can run beside T3 Code, follow every upstream nightly without losing its fork commits, and produce optional local ad-hoc-signed builds without relying on hosted CI or an Apple Developer subscription. The fork also needs durable branding and operator documentation that are unlikely to conflict with upstream changes. - isolate LastCode's Electron profile, application IDs, URL schemes, state directory, single-instance lock, and update behavior from T3 Code - add the themed LastCode wordmark, temporary app mark, app icons, and favicons under a fork-owned asset root with dev, nightly, and prod variants - add an exact-commit local CI gate, pre-push quick gate, and guarded squash-merge command - checkpoint every upstream nightly as an immutable `lastcode/checkpoint/<upstream-tag>` tag while rebasing the complete fork stack in an isolated worktree - promote rebased checkpoints to `lastcode/main` only when no pull request is open - require checkpoint-bound full-CI provenance before an ad-hoc macOS build, then emit a manifest, SHA-256 checksums, and a numbered build tag - add an opt-in hourly/login launchd service for checkpoint automation - place LastCode-specific runbooks and conventions under `docs/lastcode/` - sanitize repository-local Git variables from nested Git and CI subprocesses so hooks and temporary-repository tests remain isolated LastCode and T3 Code can run simultaneously. Every upstream nightly can be recorded even when no LastCode build is ready, while selected checkpoints can later become reproducible local releases. Hosted release jobs are disabled for the fork; releases remain deliberate, local, and ad hoc. - exact-commit full local CI passed on `77b716527cd64f7253afe2c71d596d3f1319e769` - all workspace formatting and lint checks passed - all workspace typechecks passed - workspace tests passed, including 1,984 server tests (7 skipped) and 2,004 desktop tests - desktop production build and preload assertions passed - Rust resource-monitor formatting and 15 tests passed - SwiftLint, ktlint, and detekt passed for mobile native sources - release smoke passed from a frozen install - the normal pre-push quick gate passed under Git's hook environment - the LastCode desktop build was launched and manually verified with its sidebar wordmark, menu-bar name, isolated runtime, and app icon Implemented with GPT-5.6-Sol through the Codex harness in T3 Code.
The nightly checkpoint bootstrap stopped before its first rebase because `git worktree add` does not support the `--branch` long option. Use Git's documented `-b <new-branch>` syntax and cover the exact command arguments so the automation remains compatible with the installed Git CLI. Validation: - scripts package: 24 files, 230 tests passed - scripts typecheck passed - exact-commit 11-stage full local CI passed for `973bebf72b97200d81c3899eb14c8fafabee6837` - normal pre-push quick gate passed Implemented with GPT-5.6-Sol through the Codex harness in T3 Code.
The checkpoint smoke stage could resolve the caller worktree’s `vp` binary through pnpm’s inherited PATH, mixing module graphs inside the isolated sync worktree. After installing the recovery worktree, run its smoke tests and scripts typecheck through that worktree’s explicit local `node_modules/.bin/vp`. Tests cover the runner path selection. The focused scripts suite, scripts typecheck, exact-commit 11-stage local CI, and independent pre-push gate pass. Implemented by GPT-5.6-SOL through the Codex harness.
The launchd automation worktree was created without dependencies, so its first checkpoint invocation could not import workspace packages. A current main also attempted an unchanged promotion, unnecessarily triggering the full pre-push gate every hour. The installer now provisions the durable automation worktree before loading the agent, and each scheduled run reconciles dependencies after checking out `lastcode/main`. Promotion exits before the PR check or push when the remote branch already matches the newest checkpoint. The behavior and upgrade path are documented under `docs/lastcode/`. Focused tests, scripts typecheck, actual upgrade-in-place provisioning, exact-commit 11-stage local CI, and the independent pre-push gate pass. One cold automation-worktree run reached CI successfully but hit an upstream diff-highlighter test transient (650/651); that test passed in both subsequent exact-commit and pre-push runs. Implemented by GPT-5.6-SOL through the Codex harness.
The scheduled checkpoint job successfully rebased LastCode onto a new upstream nightly, then failed before smoke validation because launchd could not resolve the bare `vp` executable used to install the new sync worktree. Use the invoking automation worktree’s explicit `node_modules/.bin/vp` to bootstrap dependencies in the isolated sync worktree. After installation, continue using that sync worktree’s own Vite+ runner for smoke tests and typechecking. Document the two-stage runner model under `docs/lastcode/`. Validation includes focused checkpoint/service tests, scripts typechecking, a real install under launchd’s restricted PATH against the retained `1076` recovery worktree, all 57 recovery smoke tests, exact-commit 11-stage local CI, and the independent pre-push gate. Implemented by GPT-5.6-SOL through the Codex harness.
The nightly checkpoint service has durable tags and raw launchd logs, but no concise way to see recent checkpoint health, replay size, timing, promotion, or build state. This adds an installable `lastcode-checkpoints` command using the shell mocolors palette, records structured timing and failure history, enriches new annotated checkpoint tags, and documents installation and operation. The executable lives in `~/.lastcode/bin` and is exposed through `~/.local/bin`; it parses launchd status without dumping inherited environment values. Validation: - focused checkpoint/dashboard tests - scripts workspace typecheck - scoped lint and formatting - full pre-push quick gate (format/lint, workspace typechecks, and all workspace tests) - installed command exercised from outside the repository Generated with GPT-5.6 Codex in the T3 Code harness.
## Problem Git hooks export repository-local environment variables such as `GIT_DIR`. When those variables leak into nested temporary-repository tests, a command such as `git init --bare` can reconfigure the real shared repository instead of its fixture. That can damage both the primary checkout and every linked worktree. ## Changes - clear all variables reported by `git rev-parse --local-env-vars` at the pre-push hook boundary - require the shared repository config to report `core.bare=false` before local CI - snapshot the shared config byte-for-byte and verify the value, contents, and common Git directory again on every CI exit, including failures - cover hook cleanup, bare-repository rejection, and config-mutation detection with focused tests - document the three Git-safety layers and the fail-closed recovery policy under `docs/lastcode/` The guard reports the affected config path and stops. It deliberately does not auto-repair repository state, so evidence is preserved for inspection. ## Validation - pre-push quick CI: passed - focused LastCode CI/nightly tests: 16 passed - scripts workspace typecheck: passed - scoped lint: passed - hook test verified from both repository-root and scripts-package working directories Built by GPT-5.6 Codex in T3 Code.
Checkpoint tags already pass the dedicated checkpoint smoke gate before publication, but each tag push also triggered the generic pre-push quick gate. Catching up across multiple nightlies therefore reran the full workspace suite once per immutable tag, and unrelated nondeterministic tests repeatedly blocked publication after the checkpoint itself had passed. This change pushes a checkpoint tag with `--no-verify` only when that checkpoint actually ran and passed the dedicated smoke gate. Bootstrap checkpoints and explicit `--no-smoke` runs retain the generic pre-push hook. Ordinary branch pushes and `lastcode/main` promotion are unchanged and still run quick local CI. The patched runner successfully published checkpoints 1079, 1081, and 1082 after 65 focused smoke tests each, then ran the full quick gate once while promoting 1082 to `lastcode/main`. Validation: - `vp test run scripts/lastcode-checkpoint.test.ts` — 12 tests passed - scripts workspace typecheck passed - branch pre-push quick CI passed, including 2,490 server tests, 2,378 web tests, and 657 mobile tests Implemented with Codex in T3 Code using GPT-5.6.
The nightly runner successfully published checkpoint tags, but if the initial `lastcode/main` promotion failed, later runs could not identify the already-published checkpoint as the correct retry target. They therefore reported no missing nightlies while leaving main on an older checkpoint. This records the exact source commit in new checkpoint tag metadata and resumes from the newest checkpoint when that metadata matches the unchanged main source. Existing promoted-checkpoint behavior remains intact, and new commits on main still start a fresh rebase sequence. Validation: - 23 focused checkpoint/nightly tests passed - scripts workspace typecheck passed - pre-push quick CI passed, including all workspace tests Implemented with Codex in T3 Code using GPT-5.6.
LastCode needs an explicit contribution model for two kinds of work: private fork integrations and improvements that should be offered upstream while remaining available downstream. This documents the independent branch and PR bases for both streams, refreshes the fork contribution workflow, and adds repository skills for executing each workflow consistently. Validation: - both skills pass `skill-creator`'s `quick_validate.py` - all six changed files pass the repository formatter - `pnpm lastcode:ci:quick` Documented with Codex in T3 Code using GPT-5.6.
LastCode checkpoints are currently buildable only from the command line, so the desktop update control cannot carry an installed personal build forward. This adds an opt-in LastCode settings page and a local checkpoint update source. New checkpoint tags appear in the existing sidebar control with commit summaries; the first click runs full local CI and creates an ad-hoc-signed DMG plus updater ZIP in an isolated worktree, and the second click uses the existing Electron staging and restart path. The feature is disabled by default and never shares or cleans a human checkout or the checkpoint daemon worktree. Validation: `pnpm lastcode:ci` passed for `791ce60245b7aae0415b1c3cf7281a5b0d21813b`; the pre-push `pnpm lastcode:ci:quick` gate also passed. Implemented with Codex in T3 Code using GPT-5.6.
A fresh LastCode profile requires repeating a large amount of harmless UI and workflow setup from T3 Code. Copying the entire profile is unsafe because the two applications must retain independent identities, databases, connections, secrets, network settings, and update state. This adds a Settings → LastCode import preview and an explicit Import and restart action. It validates the three supported JSON documents, copies client preferences and keybindings, allowlists safe server/provider fields, preserves LastCode-only and secret-bearing values, backs up existing files with private permissions, and atomically replaces them with rollback on failure. The new LastCode runbook documents the imported categories and exclusions. Validation: - read-only preview against the local T3 Code and LastCode profiles: all three categories ready - focused importer tests: 4 passed - focused contracts, desktop, and web typechecks - focused lint - full local CI for bc9f0b0 (all 11 stages) - pre-push quick local CI Generated with Codex (GPT-5.6 Sol) through the T3 Code Codex harness.
The LastCode project entry still selected the upstream T3 development icon, so the project list displayed a blue T3 badge. Point `t3.json` at the existing LastCode development touch icon so project-icon resolution uses the fork branding. Implemented by GPT-5.6-sol through the Codex harness.
Local LastCode nightlies were difficult to build, install, recover, and trust as a continuous workflow: checkpoint conflicts could stall silently, local builds inherited unsafe ambient state, ad-hoc signing behavior drifted, and a delayed desktop keychain response could strand startup on an HTTP 500 screen. This makes the local-nightly lifecycle coherent end to end. It adds the userland lastcode-build and lastcode-install commands, records and resumes checkpoint conflict resolutions, makes the checkpoint dashboard actionable, keeps builds explicitly ad-hoc signed, retains local artifacts for installation, and retries desktop authentication for up to one hour after delayed keychain access. Documentation and focused coverage accompany each boundary. Validation: pre-push quick local CI passed on the exact head, including workspace formatting, lint, typechecks, and tests. Full local CI will run as the guarded merge gate. Built with GPT-5.6 in the Codex harness.
Merged LastCode work currently cannot become an in-app update until another upstream nightly arrives. Publish ordered `lastcode/revision/...` tags when `lastcode/main` advances between upstream checkpoints, teach the local updater and build tools to discover and package those revisions, and request an immediate daemon run after guarded merges. The hourly daemon remains the fallback, and the normal upstream checkpoint sequence still takes precedence. Documentation covers tag ordering, recovery, settings, and local builds. Validation: focused LastCode/desktop tests (186 passing), scripts typecheck, targeted lint, checkpoint dry-run, and the full quick local-CI push gate. Authored with GPT-5.6 SOL via the Codex harness.
The checkpoint daemon opened its SSH push connection before a long local pre-push gate. GitHub closed the idle connection after CI passed, and the hook validated the automation checkout rather than the revision commit being promoted. Use the existing candidate smoke validation before automation-controlled tag and branch updates, then push promotions and exact upstream mirrors with `--no-verify` and their existing exact force-with-lease guards. This keeps ordinary human branch pushes on the full pre-push gate while making daemon ref updates validate the correct commit without an idle transport. Validated with the complete local quick gate, 25 focused checkpoint tests, targeted lint, scripts typecheck, formatting, and diff checks. Model: GPT-5.6-sol (high reasoning) Harness: Codex in T3 Code
The cross-architecture Windows payload test treats any child command carrying ELECTRON_RUN_AS_NODE=1 as the packaged primary probe. LastCode local updates run from Electron and inherit that variable, so the ordinary Node self-containment check is misclassified and full local CI fails before a build can be produced. Identify the primary probe by both its packaged executable path and Electron runtime flag. This keeps the assertion scoped to its intended behavior and allows local update builds launched from LastCode. Upstream: pingdotgg#7253 Validation: - focused scripts/build-desktop-artifact.test.ts: 47 passed - exact-head full local CI passed for dfdb1d4 against eab34f9 - pre-push quick local CI passed Implemented with GPT-5.6-Sol through the Codex harness in T3 Code.
Successive ad-hoc-signed LastCode nightlies have different designated requirements, so Squirrel can build and download them but cannot reliably replace the running app. The failed handoff could leave LastCode alive without a visible window. Route only the LastCode-local source through the retained DMG and the existing managed installer primitive. The detached helper verifies the manifest SHA-256 and bundle version, acquires the shared install lock, stages the replacement, and reports readiness before backend shutdown. An explicit COMMIT/CANCEL handoff owns quit, rollback-safe swap, and relaunch; hosted signed updates continue using electron-updater. Validation: focused updater/installer tests, targeted lint, desktop and workspace typechecks, two complete Quick CI passes on the exact head, and a real retained-DMG preflight/cancel with no residual mount, staging path, backup, or lock. Fixes #20 Implemented by GPT-5.6-sol through the Codex harness in T3 Code.
Issue #21 needs a configurable shortcut for switching between the inbox and legacy sidebars without changing the existing default keymap. This adds the unbound `sidebar.mode.toggle` command, exposes it in Keybindings settings, and routes it through the existing persisted legacy-sidebar preference. Client-settings functional updates now persist in invocation order so rapid toggles cannot write stale desktop state out of order. Focused contract, server, resolver, settings-label, and persistence tests cover the behavior, and the user keybinding documentation describes the command. Closes #21 Implemented and validated with GPT-5.6-sol through the Codex harness in T3 Code.
Drafts remain in the composer store after navigation, but the legacy sidebar did not render them. That left users with no way to return to an unsent draft while the legacy sidebar was enabled. This ports [pingdotgg#7120](pingdotgg#7120) at pinned head `799ba957f51cd0b48ad8e5020090814318d0388f`. It exports the existing `SidebarDraftBlock` and reuses it above the legacy project list through a small wrapper that supplies project lookup, route state, and navigation. Upstream authorship and the `cherry-pick -x` provenance trailer are preserved. ## Validation - LastCode Quick CI passed on Node 24.13.1 at the current head. - Focused web typecheck and lint passed. - 3 nearby test files passed: 118 tests. - Manual isolated-app verification passed for draft appearance, restoration, discard, zero-draft layout, and default-sidebar parity. - Responsive verification passed at 465 × 800: selecting the persisted draft restored its exact text and closed the sidebar. - Matched desktop and responsive before/after evidence is attached in the PR conversation. Model and harness: GPT-5.6-Sol via the Codex harness in LastCode/T3 Code. Co-authored-by: VIvidh Mahajan <vividhmahajan@gmail.com>
Local nightly builds can run for several minutes without a percentage, leaving the existing circular download indicator looking inert. The checkpoint dashboard also only matched build tags to the bare upstream checkpoint, so built LastCode revisions such as `1110.1` appeared to have no build. This makes the integrated download ring spin indeterminately while progress is unknown (with reduced-motion support), while retaining determinate progress for hosted downloads. It also renders actually built LastCode revisions as indented pacific-colored rows under their parent checkpoint, with commit, main, and build-number evidence. Validation: - focused tests: 18 passed - targeted lint: passed - web and scripts typecheck: passed - LastCode quick CI: passed Generated with Codex (gpt-5.6-sol) in T3 Code.
The direct LastCode installer could hang before its 30-second shutdown deadline began because it waited synchronously for the app's quit AppleEvent response. Send the quit request without waiting for an application response, then enforce the existing bounded running-state poll. Add focused coverage for both a clean quit and an application that never exits. Validation: focused installer tests, targeted lint/format/typecheck, and LastCode Quick CI. Generated with Codex (gpt-5.6-sol) in T3 Code.
The first complete upstream-import tracer exposed workflow requirements that do not belong in `upstream-fix`, which handles the opposite direction. Without a dedicated lane, future imports risk following moving PR heads, confusing path overlap with conflicts, or treating upstream CI as downstream acceptance. This adds an `import-upstream-pr` skill for evaluating open-unmerged and closed-unmerged T3 Code pull requests, preserving pinned provenance, validating on the current LastCode base, publishing evidence, and handing delivery to the existing guarded LastCode workflow. A focused reference captures intake receipts, duplicate detection, UI evidence, and squash patch-equivalence checks. ## Validation - Skill Creator `quick_validate.py` passed. - `git diff --check` passed. - Fresh-context read-only forward test against pingdotgg#7120 correctly detected the already-merged identical patch and stopped before creating another port. - LastCode Quick CI passed on Node 24.13.1. Model and harness: GPT-5.6-Sol via the Codex harness in LastCode/T3 Code.
Part of #13 Project Actions could run in terminals, but an agent could not explicitly launch one and receive a trustworthy follow-up when it finished. Long-running Actions therefore required polling or manual user intervention. This adds a bounded LastCode-only resume seam: - locally opted-in Actions are exposed to Codex through scoped MCP tools - each invocation runs in a dedicated thread terminal and persists one-shot lifecycle state - success, failure, and user cancellation deliver one system-authored follow-up when the originating thread is eligible - interrupted processes require explicit review and resume after restart - web and desktop show a yellow Waiting state with terminal and cancellation controls - desktop quit flows warn with the number of running Actions Mobile UI is intentionally deferred to the next slice. Validation: - `pnpm lastcode:ci:quick` passed locally on Node 24.13.1 - integrated web QA covered prompt-driven discovery/launch, successful completion, cancellation, exactly-one follow-up, and ordinary non-resuming Action behavior - the ELI5 architecture document passes its structural verifier and desktop/narrow visual checks Implemented by GPT-5.6-Sol through the Codex harness in T3 Code.
Part of #13. The Action-resume lifecycle shipped in the first slice was visible and controllable only from web/desktop. A user checking the originating thread from iPhone could not see that LastCode was waiting, cancel the running Action, or resolve an interrupted follow-up. This reuses the existing `actionResume` shell state and existing close/resume/discard commands on mobile: - running Actions show a yellow **Waiting** status and stay out of the settled tail - the thread view shows a compact waiting/recovery card - users can cancel a running Action or choose **Resume agent** / **Discard** after restart - legacy and v2 mobile thread lists receive the same status and cancellation affordance This is intentionally a thin, temporary client slice for a single-user macOS workflow pending the V2 orchestrator. It adds no scheduler, server persistence model, compatibility layer, timeout, or Android-specific behavior. Verified on an iPhone 17 Pro simulator against a disposable local LastCode environment. The recovery card rendered with both choices, and tapping **Discard** reached the server and persisted the disposed lifecycle state.  - `pnpm lastcode:ci:quick` - focused tests: 224 passed - mobile suite: 732 passed - native iOS dev-client build: succeeded - targeted contracts, client-runtime, and mobile typechecks: passed Built with GPT-5.6 Codex in T3 Code.
The managed installer inherited `ELECTRON_RUN_AS_NODE=1` into its `open` command and treated LaunchServices exit code 0 as proof that LastCode relaunched. A successful bundle swap could therefore leave the app stopped with no visible error. This scrubs helper-only Node mode from the launch environment, forces an addressed new app launch, retries within a bounded deadline, requires the process to remain running before deleting the backup, and records the full helper transcript. Focused regression tests cover retry, stability, timeout, and rollback behavior. Implemented by GPT-5.6-Sol through the Codex harness.
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. - 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 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. - 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. 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.
This reverts commit 76295dc.
Claude threads could connect to LastCode’s MCP server, but Action Resume was restricted to Codex and Claude rejected the no-argument action-list schema. This enables Claude as a supported Action Resume provider, publishes a Claude-compatible object schema for action listing, and gives Claude a small routing hint so natural prompts naming a saved Project Action use the product-native tools. OpenCode remains unsupported. Validation: - 83 focused Action Resume, MCP, and Claude adapter tests - server typecheck and scoped lint/format - LastCode quick CI on exact head (2699 tests passed; 7 skipped) - manual macOS desktop QA: Claude listed and launched the saved action, showed Waiting, received exactly one automated follow-up, and reported secret marmalade with exit code 0 Refs #33 Built by Codex (GPT-5.6) in T3 Code.
The annotation editor's action footer could detach from the dialog because a form wrapper interrupted the shared dialog's direct-child flex layout. This keeps the shared header, scrolling panel, and footer as direct dialog children. The form now lives inside the panel, and the footer submit button targets it by ID, preserving Enter/submit behavior while restoring the standard modal layout. Validation: - focused annotation component tests (2/2) - web typecheck - targeted lint and formatting - quick local CI (all workspace typechecks and tests) - integrated Safari QA against an isolated production build Built by GPT-5.6-Sol with the Codex harness.
Upstream pingdotgg#7937 merged the core stale-Working fix by ignoring trailing Codex `interacted` events. LastCode's nightly adopted that implementation, but the rebased #48 commit still grouped two independent safeguards under the old composite port. This branch makes the ownership explicit and atomic: 1. revert LastCode #48; 2. reapply the generic status-free `task.updated` liveness hardening from pingdotgg#7468; 3. reapply the pre-registration child-turn replay from the narrowed pingdotgg#7848, including its terminal-error ordering and cross-client anchor fixes. The small net diff is intentional: the nightly had already resolved the pingdotgg#7937 overlap semantically. The commit stack preserves separation and upstream provenance without exposing an intermediate LastCode state that drops either still-needed safeguard. Upstream sources observed 2026-08-23 PDT: - pingdotgg#7937 merged at head `db85d831d4074cbbbe6c1975b7fa2421f9c10df4` (merge `4e00471d1ab340b46742565bb6ce6462160b4d0c`) - pingdotgg#7848 open at reviewed head `1123f75e9` - pingdotgg#7468 remains the upstream owner of generic liveness hardening Import method: exact commits applied with `cherry-pick -x`; review fixes were authored in pingdotgg#7848 first and then ported into this stack. Validation: - 52 focused Codex adapter, collaboration runtime, wire, and background-liveness tests passed - server typecheck passed - targeted lint, formatting, and diff checks passed - three bounded review rounds completed: correctness/edge cases, KISS/best practices, and final regression review - mandatory quick local CI passed on head `a6f42da8a` Prepared by gpt-5.6-sol through the Codex harness. --------- Co-authored-by: Jeremy Schoemaker <jeremy@shoemoney.com>
Unannotated legacy-sidebar threads only opened their details hover from the title text and inherited the normal tooltip delay, while annotated rows opened immediately from the entire row. Use the existing whole-row hover and focus state for both paths. The legacy row is now the detached tooltip trigger for unannotated threads, while annotated threads keep the interactive annotation popover. Validation: - 108 focused sidebar and annotation tests - scoped web lint and typecheck - LastCode Quick CI Authored by GPT-5.6 SOL in the Codex harness.
The nightly conflict resolution preserved upstream hoverable update details and LastCode local-build status, but its non-conflicting test file still referenced the pre-resolution helper. This aligns the coverage with the promoted API and formats the resolved source. Validated with focused tests, scoped lint, web typecheck, and the full quick local CI suite. Authored by GPT-5.6 Codex in the T3 Code harness.
## Problem Codex can already discover and inspect LastCode/T3 Code sessions by probing environment variables and SQLite, but that path is unofficial, inconsistent, and awkward across hosts. A single user running a handful of concurrent threads needs a small supported command surface for identifying, listing, reading, messaging, and waiting on those threads. ## Implemented This umbrella contains all three reviewed slices: 1. [#54](#54) adds Codex-only `current`, `list`, and `read` commands plus the generated `lastcode-thread` launcher. Reads prefer the authenticated live server and use a bounded, read-only SQLite fallback. 2. [#59](#59) adds live-only, fire-and-forget `send`. 3. [#61](#61) adds exact `send --wait` correlation and standalone `wait`, with bounded answers and recovery handles. Codex receives authoritative LastCode and provider thread identity. Cross-host use deliberately composes the same command over SSH. Durable usage documentation is in `docs/user/codex-thread-tools.md`. ## Scope This remains a personal, low-concurrency tool. It does not add an MCP server, broker, host registry, UI, generic retry framework, or general-purpose orchestrator. If the provider accepts a turn but the process dies, correlation finalization fails, the assistant-finalization marker cannot be persisted before the durable link is recorded, or a checkpoint revert removes the tracked turn, that wait handle can time out; automatic retry and reconciliation are intentionally deferred. ## Validation - Each slice passed focused tests, package typechecks, lint, formatting, bounded Luna-high review rounds, and exact-head Codex review before being merged into this umbrella. - The rebased patch is identical across all 16 feature commits and contains only 42 thread-tools files. - The exact current head `6c618fa9d` passed 224 focused tests and the guarded quick local CI gate on base `0b0bca08e`, including all workspace tests and typechecks and 2,749 passing server tests. - Exact-head Codex review reported no major issues, and every review thread is resolved. **Do not merge this umbrella PR into `lastcode/main` until the user explicitly rubberstamps it.** Implemented by GPT-5.6 Sol, reviewed with GPT-5.6 Luna, in the T3 Code Codex harness.
Htulo must not prepare an Intel nightly newer than the LastCode already installed on airy. This adds `--maximum-version-host airy` to the existing prepare-only staging command. It performs one non-interactive SSH read before touching pending state, selects the newest immutable Intel release at or below that version, and leaves the existing pending update untouched when airy cannot be read. It does not pause threads, stop LastCode, install an app, or schedule anything. Focused validation: 18 staging tests; scripts typecheck; targeted lint, formatting, and diff checks. The normal pre-push quick CI also passed all workspace checks. Implemented with GPT-5.6 via the Codex harness.
Htulo needs one unattended LastCode update per day without password prompts or repeated relaunches. This adds one external 04:00 LaunchAgent controller. It stages and fully prepares the newest Intel nightly at or below airy's installed version before interrupting work, asks currently working htulo threads to pause concurrently through the merged local thread CLI, checks once for newcomers, quits once, swaps the user-owned app, attempts one launch, and tells paused threads to resume. If any thread does not acknowledge, the app stays running and already-paused threads are resumed. The scheduled path never uses bootstrap mode. A one-time manual `run --bootstrap` is documented for upgrading the currently installed pre-#52 app; after that, scheduled runs require the merged local thread wrapper. Airy must have non-interactive SSH access enabled; otherwise staging safely skips before changing pending state. Focused validation: 25 controller/installer tests; scripts typecheck; targeted lint, formatting, syntax, and diff checks. Normal pre-push quick CI passed all workspaces. Implemented with GPT-5.6 via the Codex harness.
Large thread worktrees can take much longer than the existing 15-second `git worktree remove` deadline, producing a cleanup failure after Git has already started deleting the tree. This keeps Git as the sole owner of worktree deletion and gives it a 30-minute deadline. That is long enough for multi-gigabyte install trees while still returning an actionable error for a genuinely stalled filesystem. The integration test now exercises the forced-removal path. Upstream provenance: - Source: pingdotgg#3902 — “Fix worktree removal timing out on large install trees” by Jake Leventhal - Pinned upstream head: `6e80eab9601f2cfec525d179cedeb6c8c6b31ced` - Linked issue: pingdotgg#3593 - LastCode adaptation: replaced the upstream pre-deletion traversal with a bounded native Git removal after review exposed unavoidable pathname-swap races Validation on head `eea7b6f1501e174e45a1d993b2e03623a98a1fd0`: - Focused forced-worktree-removal integration test passed - Server typecheck passed (pre-existing Effect suggestions only) - Quick local CI passed - Full local CI passed with an exact-head stamp - Automated review has zero current unresolved findings No client, provider, contract, connection-mode, or documentation behavior changes; this is the server-side removal primitive only. Implemented with GPT-5.6-sol through the Codex harness. Co-authored-by: Jake Leventhal <jakeleventhal@me.com> Co-authored-by: Cursor <cursoragent@cursor.com>
Deleting a thread could remove the conversation before its worktree cleanup finished, leaving failures visible only in a short-lived toast and losing the cleanup entirely across a disconnect or restart. This makes worktree cleanup a durable server-owned lifecycle. The deletion event records deleting, queued, or failed cleanup state; same-repository removals run in order; restart resumes unfinished jobs; and the thread remains as a non-openable sidebar row until cleanup succeeds or the user explicitly keeps the worktree. Legacy, v2, and mobile sidebars observe the state. Web and desktop provide retry, copy-details, and keep-worktree controls for failures; mobile provides Retry and Keep worktree from the failed row's long-press menu. This builds on merged #74, which gives native Git enough time to remove large worktrees while retaining a finite deadline for stalled filesystems. Validation: - focused contract, capability, decider, reactor, projection, migration, web, and mobile tests - contracts, client-runtime, server, web, and mobile typechecks - three sequential Luna/high review rounds covering correctness, UI/UX, KISS, and best practices; accepted findings are fixed on the current head - LastCode guarded full CI on the exact head: formatting/lint, all workspace typechecks and tests, desktop build, native static checks, and release smoke - integrated visual QA in the retained web client across legacy and v2 sidebar states, failure controls, queued deletion, light/dark themes, and cleanup-detail hovers; the final pass also corrected path font size and premature balanced-text wrapping Compatibility boundary: pre-feature clients connected to the newer server may not render cleanup tombstones correctly. We intentionally do not add a presentation shim; clients and server should be upgraded together for this feature. Implemented by GPT-5.6-sol through the Codex harness in T3 Code.
GitHub Checkout v6 fails before the Intel artifact workflow can run because the repository contains one nested gitlink without a matching root `.gitmodules` entry. Describe that existing reference-only Alchemy dependency at the repository root, with `update = none`, so checkout can inspect submodules without downloading the vendor repository. A disposable sparse checkout passes the exact recursive credential-cleanup command that failed on the Intel runner. Implemented by GPT-5.6 in the Codex harness.
The Intel artifact workflow cannot read the repository immutable-release setting: GitHub requires Administration: read, which `GITHUB_TOKEN` cannot request, so every dispatch fails before checkout of the installable target. Remove those impossible preflight API calls. Immutable releases remain an explicit maintainer prerequisite, and the workflow still rejects every reused or newly published release unless GitHub reports that release itself immutable. Update the source-coupled workflow test and operator documentation to describe the real permission boundary. Implemented by GPT-5.6 in the Codex harness.
|
@codex review |
|
Codex Review: Didn't find any major issues. Hooray! Reviewed commit: ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
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". |
49e9020 to
9d63e9b
Compare
|
@codex review |
## Problem Hovering a remote-machine thread hides its cloud icon along with the timestamp, removing useful machine context just as the user is about to act on the row. ## Fix The remote indicator now sits beside the hover-fading metadata block. The timestamp or jump hint still yields to the archive action, while the cloud stays visible. LastCode-specific sidebar scaling and annotation behavior are preserved. Upstream proposal: pingdotgg#8132 ## Validation - Focused formatting and lint for `LegacySidebar.tsx` - Web typecheck - `apps/web/src/legacySidebarScale.test.ts` (3 tests) - Push-gated quick local CI: format, lint, all workspace typechecks, and all workspace tests passed ## UI evidence The reporter supplied the before screenshot. Automated after-image capture was not available because this clean worktree has no paired remote-environment fixture. The DOM relationship was verified directly: the cloud is no longer a descendant of the metadata element whose hover class sets opacity to zero. Implemented with GPT-5.6 Codex in the T3 Code harness.
6bc1ced to
321f8a1
Compare
|
Codex Review: Didn't find any major issues. Nice work! Reviewed commit: ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
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". |
9d63e9b to
b79824f
Compare
Saving a thread annotation could leave an invisible closing dialog backdrop over the app, swallowing every pointer interaction until navigation unmounted it. Make the shared modal backdrop non-interactive as soon as Base UI reports the dialog closed, and apply that behavior consistently to dialogs, alert dialogs, command dialogs, and sheets. Add focused tests that reproduce the closed-but-still-mounted transition and prove the backdrop no longer intercepts clicks. Validation: - reproduced the lock before the fix and verified pointer hit-testing after the fix - 3 sequential Luna high review rounds completed - focused dialog regression tests, lint, formatting, and web typecheck passed - mandatory LastCode pre-push CI passed, including checkpoint/rebase tests Built by GPT-5.6-Sol with the Codex harness.
b79824f to
0282619
Compare
dfac254 to
c26324c
Compare
0282619 to
92d0908
Compare
|
Hosted run 32790985156 proved the credential-free historical checkout, then exposed one narrow follow-up: the public sparse clone contains the immutable LastCode tag but not the local short upstream nightly tag that checkpoint CI resolves. Commit ba99313 restores that local lightweight tag from the immutable installable tag metadata, validates the recorded tag/commit and ancestry, and does not push it anywhere. Validation: focused Intel workflow tests 9/9; YAML parse; targeted format/lint/diff checks; fresh public-clone proofs for both 1162 and airy build 1174.2; normal pre-push quick CI passed all workspaces, including 2,769 server tests. |
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: ba993134be
ℹ️ 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".
GitHub Checkout v6 fails while cleaning credentials after checking out older installable commits that predate the repository’s root submodule metadata. That prevents building airy’s current
1162tag.Clone the public target repository with ordinary credential-free Git, apply the existing sparse-checkout exclusion, and detach at the exact validated commit. The trusted workflow and isolated publisher still use GitHub Checkout with credentials disabled. A disposable clone checked out exact commit
5f13035182feffb7941e03c312d5305a8ef35116successfully and excluded.repos; the source-coupled workflow test asserts the target path contains neither Checkout norgithub.token.Implemented by GPT-5.6 in the Codex harness.