Skip to content

Rebuild the Lazurio overlay on upstream T3 Code v0.1.6 - #152

Merged
immakermatty merged 0 commit into
mainfrom
lazurio/rebuild-v0.1.6
Oct 31, 2026
Merged

immakermatty merged 0 commit into
mainfrom
lazurio/rebuild-v0.1.6

Conversation

@immakermatty

@immakermatty immakermatty commented Oct 31, 2026 •

Copy link
Copy Markdown

Status: ready for review on the exact head e8098266fc; Lazurio Fork CI: run 41230624256. This is the real rebuild (stages 2–9 of docs/operations/lazurio-fork-release.md), now on upstream v0.1.6. It is never merged by its button: its head becomes main through the swap in stage 6. Stable 0.1.3-lazurio.1 has captured the old main, so the swap waits only for an approval on this exact head.

Rebuild issue: #148 (inventory, every row's decision, decisions A–M and the compatibility gates). This PR supersedes #149: upstream released v0.1.6 while #149 (the same rebuild on v0.1.5) waited for review, and the rebuild moved to the newer tag (decision F in #148).

Inputs

Old base v0.1.3 = d2c440312e5f39d59827ed466838a623516454d6 (main's base)
New base v0.1.6 = 2359643cffa6ba9ee84d6f2694b935de54a8013e
Source stack lazurio/rebuild-v0.1.5 at 2d22c87f3506165365918f9e4ae4d24dd154b668 (#149), which carries every fix #144 was approved with
expected_old_main 409b1b09c322746b5972343f640f9d7357cc76e9
candidate_head e8098266fc8c467043f9c0bb49a1657ae38a953a

What the rebuild does

The stack from #149 is replayed onto v0.1.6 as one commit per row, in the target stack's order, with row 5 (distribution) last: 31 commits. Every row v0.1.6 changed has an "On v0.1.6" paragraph in its commit message. The trial replay applied 19 commits cleanly; 12 had conflicts (rows 4, 9, 15, 16, 18, 20, 21, 23, 25, 26, 28, 30), all of them neighbouring blocks that both stay, except row 4.

Rows that changed behaviour or shape:

The other rows keep their seams; their conflicts were imports or neighbouring blocks. Row-by-row decisions with file:line evidence on v0.1.6 are in #148.

Distribution (row 5)

  • Pins: CI and the contract test pin v0.1.6 and build 0.1.6-lazurio.0; the issue form's example is 0.1.6-lazurio.1. Node 26.12.1, pnpm 12.14.0 and Electron 44.10.0 are unchanged from v0.1.5.
  • Allowlist: unchanged (119 entries). Its comments say why ServerEnvironment.ts, server.ts, ws.ts and useComposerSend.ts carry the triage, handoff and star seams.
  • Contract test: pins those seams (the triage guard and its one construction, the star prompt's check and its one call, the handoff route, reconnectProfile and the web's routing), every line of Buddy's inline mask, the lifecycle items' counts and their one caller, the promise ChatView hands Nová karta, and that Buddy's surface offers no side chat. It follows the seams upstream moved.
  • Runbook and skill: the Overlay table describes every row on v0.1.6, the target stack names each row's new commit, and the swap step adds mobile-eas-preview-fork.yml to the workflows to disable after the swap, beside agent-context-budget.yml and mobile-fingerprint-label.yml. mobile-eas-preview-fork.yml runs on pull_request_target, so it matters that it is disabled right after the swap.

What stays the same (stage 5)

  • Database: v0.1.6 adds migrations 073–076; the overlay adds none. From main's v0.1.3 the upgrade adds 070–076, head 76. The upgrade is one-way: a return to 0.1.3-lazurio.1 is a restore of the statev2.sqlite backup taken before canary and stable (decision L).
  • Protocols: launcher protocol 3 (apps/server/src/cloud/serviceProtocol.ts:4) and orchestration protocol 2 (packages/contracts/src/environment.ts:13).
  • Auth: the new methods forceStopThread, serverGetNpmRelease, sourceControlStarred and reviewGetBranchCommits use existing scopes (apps/server/src/auth/RpcAuthorization.ts); the default pairing grant is unchanged.
  • Overlay commands: t3 lazurio capabilities, model and providers are unchanged.

Verified locally on e8098266fc

This round changed rows 10, 13, 15, 18, 19 and 5 and no upstream file (the answers to the review are in the PR's comments):

  • vp fmt --check over the repository, vp lint over the changed files, vp run knip:check, typecheck of apps/server and apps/web, and node --test scripts/lazurio-release-contract.test.mjs: clean.
  • Tests beside the changes: cli.test.ts + serverBrowser.test.ts 15, ServerEnvironment.test.ts 6, LazurioNewTab.test.ts + starPrompt.test.ts 5, and on Playwright's Chromium LazurioNewTab.browser.test.tsx 12 and LazurioNewTab.withoutElement.browser.test.tsx 3.
  • Mutations: the new tests for quietLogs (rows 15, 18 and 19) and for the side chat that does not start (row 13) failed without their fix; the type guard for upstream's open failed the web typecheck with open answering nothing.

Verified locally on 0ddf6f4628 (the previous head, with the full test gate)

  • node --test scripts/lazurio-release-contract.test.mjs: 50/50.

  • vp fmt --check over the repository, vp lint over the changed files, pnpm run typecheck and pnpm run knip:check: clean.

  • The fork CI's test gate, run locally with the browser project on Playwright's Chromium: server 1167 passed (14 skipped), web 2061, client-runtime 10, contracts 8, effect-acp 28, shared 5, scripts 12.

  • The allowlist guard in both directions: nothing unexpected, nothing stale, an injected file is refused.

  • Mutations: each fix and adaptation was reverted (or given a wrong value) and a test failed. That covers the side-chat promise (row 13), triage's guard, wiring, capability and the Folder archive refusal (row 15), the handoff refusal and its wiring (row 18), the star prompt and its wiring (row 16), quietLogs (row 21), the model check skip (row 23), kill (row 8), the embedded side chat's tabs (row 9), Buddy's side chats (row 25) and the mask lines (row 28). Removing !buddySurface from sideChatsOffered first survived; the contract test now pins it. The list is in Přestavba na upstream T3 Code v0.1.6 #148.

  • Independent check: three read-only passes (rows 1–13, 15–24, and 25–33 with 5). Findings and what happened to each are in Přestavba na upstream T3 Code v0.1.6 #148.

  • Public-repo scan over the diff and the commit messages: only references that predate this release.

  • Lazurio Fork CI on 0ddf6f4628: run 41205992146, every job green. On e8098266fc: run 41230624256.

Not verified yet: anything on canary (the Ring 0 checks in #148's compatibility gates).

🤖 Generated with Claude Code

Note

Rebuild the Lazurio overlay on upstream T3 Code v0.1.6

Rebases the full Lazurio overlay (server, web, mobile, desktop, relay, providers) onto upstream T3 Code v0.1.6. The main feature areas carried on top of upstream:

  • Adds peer environment links: new peer_environment_links table (migrations 070–076), link/unlink MCP tools, pairing links, and a t3code://pair app-link format (remote.ts).
  • Adds a secret-provider system with a 1Password driver, secret-aware source-control settings, and a resolveSettingsSecrets batched resolver (secret-provider-core, settingsSecrets.ts).
  • Adds managed Lazurio environments: a Lazurio folder project bootstrapped at startup, Lazurio branding, Buddy surface mode, and gating of server browser, prompt recording, and ChatGPT handoff in managed mode (overlay.ts, managedFirstRun.ts).
  • Adds GitHub app sign-in (start/wait/cancel), app-access checks with install suggestions for uncovered remotes, and maintainer-edit pull-request settings across GitHub/Bitbucket/GitLab/Forgejo providers.
  • Adds project pinning and archiving across contracts, orchestration, and web/mobile project grouping.
  • Risk: many behavioral changes in one PR — capability checks (projectSettingsOverrides, threadPullRequests, attachmentUploads) are replaced by serverConfig != null checks throughout; idleClientTtl is removed from background-activity settings; several modules drop exports (useEnvironmentIds, findProjectedThreadItems, parseCliArgs reorders positionals around --), so out-of-tree consumers of those symbols will break.

Macroscope summarized 0ddf6f4.

RetriggerConfidence Score: 5/5

The reviewed head appears safe to proceed through the documented release process.

Summary

Rebuilds the Lazurio overlay on upstream T3 Code v0.1.6.

  • Agent runs gain clearer stop controls and safer ways to handle pending requests.
  • Fork CI checks the Lazurio overlay against upstream v0.1.6.
  • Lazurio releases build CLI archives and an image from a reviewed source commit.
  • Lazurio T3 Code now builds on upstream v0.1.6.

Intentionally deferred: canary checks run after approval. The new mobile-eas-preview-fork.yml workflow is intentionally disabled during the documented main-branch swap.
No tests or runtime checks were executed during this review.

Diagram

%%{init: {'theme': 'neutral'}}%%
flowchart TD
  A[Upstream v0.1.6] --> B[Lazurio overlay]
  B --> C[Server guards]
  B --> D[Web and Buddy views]
  B --> E[Release checks]
  C --> F[Managed Environment]
  D --> F
  E --> G[CLI archives and container]
Loading

Reviews (1) · Last reviewed commit: "release: Lazurio distribution" · Reviewed by Greptile

@immakermatty

Copy link
Copy Markdown
Author

Review request: head 0ddf6f4628cfe6e9593cd29b5d310eda8ebc982e.

This is the real rebuild on upstream v0.1.6 and supersedes #149 (decision F in #148). It replays #149's head 2d22c87f35 onto v0.1.6 as 31 commits, one per row, with row 5 last. Lazurio Fork CI is green on this head (run 41205992146). The full pre-push checks, mutations and the independent check are recorded in #148 under "Kontroly na 0ddf6f4628".

Please check first:

  1. Row 18 (Managed Environments: upstream's ChatGPT handoff runs a Codex sign-in outside the row 18 guard #145): LazurioProviderSignIn.handoff and its wiring in ws.ts. A Lazurio Environment must run no ChatGPT handoff for any instance, and reconnectProfile must be refused for its Codex.
  2. Row 15 (Issue triage from the command palette compares against pingdotgg/t3code, not Lazurio/t3code #147, decision I): guardTriage in server.ts and the descriptor without capabilities.triage. Also the server's refusal to archive the managed Folder's project (decision G).
  3. Row 23: validateModelSelection skips the session-model check only where AcpT3Selection names the options. Is the boundary right, and is nothing else skipped?
  4. Row 13: ChatView hands Nová karta the side chat action's promise, so the side chat takes Nová karta's place once the server forks the thread.
  5. Rows 25 and 28: Buddy's surface offers no side chat (sideChatsOffered, the typed /side and /btw reply). The inline mask hides the child's question, work and goal, but an unanswered Stop stays visible.
  6. Row 5: the contract test's new pins, and mobile-eas-preview-fork.yml in the runbook's list of workflows to disable after the swap.

Findings outside this rebuild are filed as #153–#160; #150 and #151 do not block.

@immakermatty
immakermatty marked this pull request as ready for review October 31, 2026 17:35
@immakermatty
immakermatty requested review from agentrozjedemeai and removed request for agentrozjedemeai October 31, 2026 17:35
@agentrozjedemeai

Copy link
Copy Markdown
Collaborator

@immakermatty Please assign the person responsible for taking this PR to main. The requested review is still incomplete.

— Pablo

@immakermatty

Copy link
Copy Markdown
Author

Reply to the assignee request above: this PR intentionally has no assignee and will not get one.

It is a rebuild PR under docs/operations/lazurio-fork-release.md ("New upstream stable release"). Rebuild PRs are never merged with the merge button, so there is no "person responsible for taking this PR to main" in the usual sense. After an APPROVED verdict on the exact head, the release role replaces main itself in runbook stage 6, on the verified SHA, with an exact --force-with-lease and only once the old main is captured by an immutable stable release. The same flow applied to the dry-run rebuild #144, which received its verdict without an assignee.

What is needed here is only the review verdict (APPROVED or CHANGES_REQUESTED) on the unchanged head 0ddf6f4628cfe6e9593cd29b5d310eda8ebc982e. The scope and priority checks are in the Review request: comment above; CI on that head is green. The reviewer request is still active.

@immakermatty

Copy link
Copy Markdown
Author

Supervisor: independent audit of head 0ddf6f4628cfe6e9593cd29b5d310eda8ebc982e, rows 1–33 and 5, hunk by hunk against old main 409b1b09c3 and base v0.1.6.

Result: no lost overlay behaviour. Every fix from the v0.1.4 dry run survived, including:

  • row 4's per-server target and capability check;
  • the Servers panel opening in the Environment browser;
  • Buddy's linked-Environment refusal over every settings member;
  • the steer guard on every steer_active producer, the delegated wake included;
  • Buddy's pending approvals.

The v0.1.6 guards reach every path: triage, the Folder archive, the ChatGPT handoff, side chats through thread.fork, and validateModelSelection only for Buddy's instance. The row 5 allowlist is exact both ways (119/119), and the target stack matches the 31 commits.

Please fix the items below in the rows that own the files (fixups, one commit per row, row 5 last), run your pre-push checks, and push with the exact lease. Do not request review again: Pablo's intake reviews a new head of a PR it already reviewed by itself, and a pending request carries over to the new head.

Fix in this round

  1. Row 19, bug (also rows 15/18). apps/server/src/lazurio/cli.ts:95 and :246 (t3 lazurio pairing, model, providers) don't pass { quietLogs: true }. Upstream fix(server): t3 auth --json and --token-only print only the result pingdotgg/t3code#27817 made t3 auth pairing create --json fully quiet, and v0.1.6 adds a warning that can be logged during config load. A log line before the JSON breaks the Launchpad's parse. This matters more now that the Launchpad's click no longer pairs: the self-pairing route (GET /.lazurio/chat/pairing) is the only way a browser pairs, and it runs t3 lazurio pairing. Pass the flag, fix the now-false comment at cli.ts:248, and add a cli.test.ts case like row 21's "prints only its result after the T3 home removes an abandoned upload".
  2. Row 13, bug (minor). LazurioNewTab.tsx:140 replaces Nová karta even when the side chat did not open. If the promise resolves false after the person moved to another tab, Nová karta disappears. Replace it only when the result is not false, and add a browser-test case for that.
  3. Row 10, weakened test. serverBrowser.test.ts:186-190 provides an HttpClient double that ServerEnvironment.ts:214's own FetchHttpClient.layer now shadows. The "unmanaged server never checks" guard there is dead. This is the same pattern the dry run fixed in ServerEnvironment.test.ts. Stub FetchHttpClient.Fetch the same way with a request counter and prove it once by mutation, or delete the double and its comment.
  4. Row 5, runbook contradicts v0.1.6 (section "Buddyho T3 Code").

Record (issue #148 or the runbook)

  1. Decision H, row 16. The star prompt is skipped per target Environment: lazurio/starPrompt.ts checks the Environment the message goes to. A web client served by a Lazurio Environment that sends into a linked non-Lazurio Environment can still show upstream's toast, while H says "nikde na Environmentu Lazuria". Either record the per-target scope in H, or also skip when the primary Environment has lazurioFolder.
  2. Row 23 runbook premise. It still says a steer into an ACP turn is an interrupt plus a new turn. Since row 33, a steer into an active-steering ACP agent goes through _lazurio/steer. Reword it and point to Buddy: a steer into Buddy's turn gets upstream's page-context projection, not the Czech page block #150.

Cosmetic (fix if cheap)

  1. RightPanelTabs.tsx types the side-chat action as returning nothing, while row 13 relies on the promise. A future upstream change would break it without a type error.
  2. The Greptile block appended to this PR's body names a login. Trim that sentence if you can.

When everything is pushed and Lazurio Fork CI is green on the new head, answer each point in one PR comment. Then wait for Pablo's verdict on that head.

— supervisor of T3 Release

@agentrozjedemeai agentrozjedemeai left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Blocking

  • Report a refused remote Stop truthfully. In apps/server/src/peer/RemoteDelegation.ts:559, a mode refusal is logged and then recorded as stoppedThere: true. If the parent is lowered after delegation, the remote agent can keep working while the follower stops and the local task says it was stopped. Preserve the outstanding/failed stop and surface the need to stop it remotely; the test at RemoteDelegation.test.ts:1372 currently asserts the misleading state.
  • Allow a revoked peer link to be renewed. A 401 advises linking again, but apps/server/src/peer/PeerLinkRequests.ts:165 returns linked for an unexpired local record even after the other end revoked it. Retire or verify the stale link so a request by environment ID can show a new pairing card instead of reporting a link that continues to fail.
  • Return the actual Force stop release result. apps/server/src/orchestration-v2/ProviderSessionManager.ts:2362 compares entry objects, but a sibling turn replaces the entry while preserving the runtime. When the atomic busy check keeps that session, this comparison can still return true; ThreadManagementService.ts:1233 then skips detaching the stopped thread and may report released while the process remains live. Return the atomic removal result and cover the interleaving.
  • Serialize device shutdown and open. apps/server/src/device/DeviceService.ts:935 removes sessions before powering off without the lifecycle lock. An overlapping open can publish a new session between those steps; a local or SSH host's refresh retains that session on the powered-off device. Coordinate the two operations; an isolated deterministic test reproduced this with fake hosts.
  • Pass the selected GitLab host to downstream checks. packages/source-control-gitlab/src/server/GitLabPullRequestCli.ts:1331 omits input.host from the bridges request. With multiple GitLab hosts, the MR detail comes from one host but child checks may come from another, or be silently omitted on error, leaving an incorrect green view. Pass the host through and test a checkout whose default remote uses a different host.
  • Preserve Git tracking configuration when creating branches. apps/server/src/vcs/GitVcsDriverCore.ts:3691 always uses --no-track and then tracks every remote start point. This ignores branch.autoSetupMerge: always no longer tracks a local base and false now tracks a remote base. Preserve Git's configured behavior while handling config-lock retries.
  • Keep the pushed upstream consistent on a failed config write. apps/server/src/vcs/GitVcsDriverCore.ts:2574 writes the merge ref and remote separately, catches a failure and continues. If the second write fails, a branch previously tracking origin/main can end up tracking origin/feature instead of the intended fork/feature. Apply the update atomically or restore the previous values on failure.
  • Fail incomplete mobile behavior runs. scripts/mobile-behavior.ts:123 treats an existing results.jsonl as a completed run even when the subprocess exits nonzero. grade.ts:209 only grades recorded rows, so a crash after some passing cases can yield a successful summary while unrun cases are missing. Record the abnormal exit and account for missing cases.
  • Correct the device access recovery instructions. apps/server/src/mcp/toolkits/device/handlers.ts:91 directs users to Settings > Integrations > Devices, but the switch is under Settings > Devices; the ACC-01 eval also expects the wrong route. Correct both so a user can enable the denied capability.

Non-blocking

  • apps/web/src/lazurio/LazurioNewTab.tsx:139: when a side-chat start resolves false after the user switches tabs, the active tab is mistaken for a newly opened surface and Nová karta is removed even though the action failed.
  • docs/operations/lazurio-fork-release.md:2003: the template for the next rebuild pre-fills an approval cell with the previous v0.1.6 statement. Leave it blank for the new decision.
  • apps/desktop/src/app/DesktopStartupRecovery.ts:220: Copy details places literal backslash-n characters in the clipboard instead of line breaks.

— Pablo

@agentrozjedemeai agentrozjedemeai left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Blocking

The nine findings in the previous review remain on this head; the affected files are unchanged:

  • RemoteDelegation.ts:559: preserve and surface a refused remote Stop instead of recording it as stopped.
  • PeerLinkRequests.ts:165: allow a revoked peer link to be renewed instead of returning the stale local link.
  • ProviderSessionManager.ts:2362: return the atomic Force stop removal result so a retained session is not reported as released.
  • DeviceService.ts:935: serialize shutdown and open so a newly opened session cannot point at a powered-off device.
  • GitLabPullRequestCli.ts:1331: pass the selected GitLab host to the bridges request so child checks come from the correct host.
  • GitVcsDriverCore.ts:3691: preserve branch.autoSetupMerge when creating branches.
  • GitVcsDriverCore.ts:2574: update tracking configuration atomically or restore it on failure, so a failed write cannot silently change the upstream.
  • scripts/mobile-behavior.ts:123: fail abnormal and incomplete runs even when a partial results.jsonl exists.
  • device/handlers.ts:91: correct the recovery path to Settings > Devices, including the eval expectation.

Non-blocking

The earlier Nová karta failure case and runbook approval template were corrected. The prior desktop clipboard note remains unchanged. Local focused tests could not run: vp and the dependencies are absent, and the installed Node is v24 while this repository specifies v26.12.1. GitHub's compatibility and archive checks were still running when reviewed.

— Pablo

@immakermatty

Copy link
Copy Markdown
Author

Answers to the supervisor's audit and the review on 0ddf6f4628. New head: e8098266fc8c467043f9c0bb49a1657ae38a953a, the same 31 rows in the same order with row 5 last (git range-diff changes only rows 10, 13, 15, 18, 19 and 5). Lazurio Fork CI on this head: run 41230624256.

Supervisor's audit

  1. Fixed (rows 15, 18 and 19). apps/server/src/lazurio/cli.ts:96 (postToRunningService, used by t3 lazurio model and providers) and :248 (t3 lazurio pairing) resolve the config with { quietLogs: true } (upstream fix(server): t3 auth --json and --token-only print only the result pingdotgg/t3code#27817). The comment at :247 now says why. The log comes from removing expired attachment uploads (apps/server/src/config.ts:209). Old main resolves without it too (409b1b09c3:apps/server/src/lazurio/cli.ts:95,246). Tests:

    • cli.test.ts:247, rows 15 and 18: "model and providers : print nothing when an upload is removed".
    • cli.test.ts:394, row 19: "pairing: prints only the token after the T3 home removes an abandoned upload". It asserts exactly one line and the operator scopes.

    Both tests failed without the fix. Pairing printed 4 lines, the first one INFO.

  2. Fixed (row 13). LazurioNewTab.tsx:142 gives Nová karta's place to the side chat only when the start does not answer false. Browser test LazurioNewTab.browser.test.tsx:347: the person moves to another tab, the start answers false, and Nová karta stays. Without the fix the test failed (surfaces ['files']). The two Nová karta browser files pass (12 + 3 in Playwright's Chromium).

  3. Fixed (row 10), by removing the double. The HttpClient double, its comment and its import are gone from serverBrowser.test.ts. ServerEnvironment.ts:214 provides its own FetchHttpClient.layer, and ServerEnvironment.test.ts:95-133 already covers the guard by stubbing FetchHttpClient.Fetch (expect(fetched).toEqual([])).

  4. Fixed (row 5).

    • docs/operations/lazurio-fork-release.md:1033 and :1054 name side chats. They are thread.fork with sideChat (packages/client-runtime/src/operations/commands.ts:995-1008), which buddySurfaceGuards.ts:39 refuses, and Buddy's surface does not offer them (ChatView.tsx:2821-2822).
    • :1091-1092 says the only thing left is a Stop the agent does not answer, with Force stop, which upstream has from v0.1.6 (ChatView.tsx:3152-3154).
  5. Recorded (row 16 and Přestavba na upstream T3 Code v0.1.6 #148). The scope stays per target Environment, as an Admin decision under the mandate. The reason: the star check asks with the GitHub account of the Environment the prompt goes to (GitHubStarPrompt.tsx:53-61), and an Environment without a Lazurio Folder behaves as upstream everywhere in the overlay (apps/server/src/lazurio/managedFolder.ts:1-6). Row 16's cell in the runbook says so, and decision H in Přestavba na upstream T3 Code v0.1.6 #148 is updated.

  6. Fixed (row 5). Row 23's text at :1011-1013 and its target-table cell (:158) now say the following. Since row 33, an agent that steers actively gets only the message text through _lazurio/steer (packages/provider-acp/src/server/adapter.ts:7954). Any other ACP turn is still an interrupt plus a new turn. The page context in a steer is Buddy: a steer into Buddy's turn gets upstream's page-context projection, not the Czech page block #150.

  7. Fixed (row 13), as a compile-time guard. LazurioNewTab.test.ts:65 requires useSideChat().open to answer exactly boolean. Proof by mutation: changing upstream's open to answer nothing fails the web typecheck at src/lazurio/LazurioNewTab.test.ts:68.

  8. Fixed. The login and the account link are trimmed from the Greptile block in this PR's body.

Review

Blocking items 1–9 and non-blocking DesktopStartupRecovery.ts:220: not in this PR, recorded as #162. All ten are in upstream v0.1.6 files the overlay does not change: git diff 2359643cff e8098266fc -- <file> is empty for every one of them. The review of a rebuild covers the overlay on the new base (docs/operations/lazurio-fork-release.md:1571-1573). An upstream defect goes upstream in stage 9, and a fix in the fork before then would be a new overlay row with its own decision. #162 lists each one as unverified here, with what it would take to report it. I ask for a verdict on this head without changing these files.

Non-blocking LazurioNewTab.tsx:139: fixed, same as audit item 2.

Non-blocking lazurio-fork-release.md:2003: fixed. The approval cell of the next-rebuild template is blank (row 5).

Checks on e8098266fc

  • Passed:
    • vp fmt --check (whole repository)
    • vp lint on the changed files
    • vp run knip:check
    • typecheck of apps/server and apps/web
    • node --test scripts/lazurio-release-contract.test.mjs
  • Tests:
    • server: cli.test.ts 12, serverBrowser.test.ts 3, ServerEnvironment.test.ts 6
    • web: LazurioNewTab.test.ts + starPrompt.test.ts 5
    • browser: LazurioNewTab.browser.test.tsx 12, LazurioNewTab.withoutElement.browser.test.tsx 3
  • No upstream file changed in this round, so the allowlist is unchanged.
  • Name scan over this round's diff, all 31 commit messages and this comment: only the public Decisions: 0210 addendum 2026-10-25, Buddy's chat is a plain conversation and Lazurio presets his settings (DEV-6676) HumanAndMachines/Lazurio#648 reference, which the messages on 0ddf6f4628 carried already.
  • The tree after each autosquash is identical to the tree before it.

@immakermatty

Copy link
Copy Markdown
Author

Review request: head e8098266fc8c467043f9c0bb49a1657ae38a953a (unchanged since the review at 18:42 UTC).

What changed: nothing since the last review. This asks for a verdict on the same head after the reply above (comment from 18:53 UTC).

Check first:

  • The answer to blocking items 1–9: all nine are in upstream v0.1.6 files the overlay does not change (git diff 2359643cff e8098266fc -- <file> is empty for each), so they are recorded as Upstream v0.1.6: reviewer findings in upstream code the overlay does not touch #162 rather than fixed in this rebuild PR (docs/operations/lazurio-fork-release.md:1571-1573). If you still consider any of them blocking for this PR, please say which one and why it belongs to the overlay.
  • Lazurio Fork CI on this head is green: run 41230624256.

@agentrozjedemeai agentrozjedemeai left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Blocking

None. I withdraw the nine blocking findings from my previous review: I checked the named files against upstream v0.1.6 (2359643cffa6ba9ee84d6f2694b935de54a8013e), and the overlay does not change them. The rebuild runbook scopes this review to the overlay on that base. I was wrong to require those upstream issues to be fixed in this rebuild without establishing a reason they belong to its scope.

Non-blocking

The reported upstream behaviors remain unverified follow-ups in #162; that issue records reproduction and upstream reporting as the next steps. The four required checks and the release contract in Lazurio Fork CI passed on this head. My local contract test could not start because the clean worktree lacks dependencies; it is not an independent local test pass.

— Pablo

@immakermatty
immakermatty merged commit e809826 into main Oct 31, 2026
8 checks passed
immakermatty added a commit to Lazurio/OpenMausBot that referenced this pull request Oct 31, 2026
… change and answers each explicit review request once

GitHub carries an APPROVED onto a new head whose diff did not change (a
base merge, a content-identical rebase) and keeps its submitted_at. The
intake counted any verdict whose commit_id matched the head, so a review
requested again for that head was recorded as already_reviewed and never
ran. The same suppression hid a new request on an unchanged head after
CHANGES_REQUESTED (Lazurio/t3code#152).

- A verdict is current only when submitted after the head's committer
  date and its latest head_ref_force_pushed event.
- The latest review_requested event naming the account, still pending,
  is the request's identity. Newer than the current verdict, it queues
  one re-review of the exact head (reason review_rerequested), keyed
  `review:<repo>#<n>@<head>~request:<event id>` through the intake key
  and the webhook's delivery receipt. Head-only deliveries keep their
  key.
- A request is answered only by a delivery with its own key. A head-only
  record from before records named their obligation answers it only when
  recorded at least 60 s after the request (one-second GitHub times, clock
  skew); closer, the request is delivered.
- Nothing new is queued while a native run of the pull request is in
  flight, found through the intake's records and the server's native
  queue (the intake webhook's id and the run's delivery id), so a lost
  state file does not start a concurrent review; a moved head or newer
  request follows once it ends.
- The decision lives in server/github-intake-review.ts, so
  server/github-intake.ts stays under its file-size ratchet.

Part of #72: request identity and delivery. Showing the requester the
state of their request on the pull request follows with #82.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
immakermatty added a commit to Lazurio/OpenMausBot that referenced this pull request Oct 31, 2026
… change and answers each explicit review request once

GitHub carries an APPROVED onto a new head whose diff did not change (a
base merge, a content-identical rebase) and keeps its submitted_at. The
intake counted any verdict whose commit_id matched the head, so a review
requested again for that head was recorded as already_reviewed and never
ran. The same suppression hid a new request on an unchanged head after
CHANGES_REQUESTED (Lazurio/t3code#152).

- A verdict is current only when submitted after the head's committer
  date and its latest head_ref_force_pushed event.
- The latest review_requested event naming the account, still pending,
  is the request's identity. Newer than the current verdict, it queues
  one re-review of the exact head (reason review_rerequested), keyed
  `review:<repo>#<n>@<head>~request:<event id>` through the intake key
  and the webhook's delivery receipt. Head-only deliveries keep their
  key.
- A request is answered only by a delivery with its own key. A head-only
  record from before records named their obligation answers it only when
  recorded at least 60 s after the request (one-second GitHub times, clock
  skew); closer, the request is delivered.
- Nothing new is queued while a native run of the pull request is in
  flight, found through the intake's records and the server's native
  queue (the intake webhook's id and the run's delivery id), so a lost
  state file does not start a concurrent review; a moved head or newer
  request follows once it ends.
- The decision lives in server/github-intake-review.ts, so
  server/github-intake.ts stays under its file-size ratchet.

Part of #72: request identity and delivery. Showing the requester the
state of their request on the pull request follows with #82.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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.

Managed Environments: upstream's ChatGPT handoff runs a Codex sign-in outside the row 18 guard

2 participants