Skip to content

chore(fork): integrate upstream v0.1.7-nightly.20261104.4151 - #74

Merged
kylebegeman merged 163 commits into
mainfrom
integrate/v0.1.7-nightly.20261104.4151
Nov 4, 2026
Merged

kylebegeman merged 163 commits into
mainfrom
integrate/v0.1.7-nightly.20261104.4151

Conversation

@kylebegeman

@kylebegeman kylebegeman commented Nov 4, 2026 •

Copy link
Copy Markdown
Owner

Merges upstream T3 Code v0.1.7-nightly.20261104.4151 into Loom. The seams in docs/fork/seams.tsv survived, the fork's tests and upstream's tests beside the files it changes pass, every package typechecks, and the built web client boots.

Land it from Terminal on your Mac (not inside Loom, which the install quits) with scripts/fork/loom.sh land: it merges with a merge commit, tags loom-v0.1.7-nightly.20261104.4151, publishes the next Loom release and installs it. Never squash or rebase this pull request; the fork needs upstream's history for the next merge.

saphid and others added 30 commits November 3, 2026 12:18
…squash-merged (pingdotgg#29919)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…ointed parent run (pingdotgg#25662)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
pingdotgg#29580)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: maria-rcks <maria@kuuro.net>
… the project folder (pingdotgg#29908)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Maria <maria-rcks@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…oading it (pingdotgg#29893)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…oved or steered (pingdotgg#29904)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
… it inherited (pingdotgg#29794)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…r hosts' tokens (pingdotgg#29554)

Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>
… release (pingdotgg#30319)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…9916)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…pen (pingdotgg#29263)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…ed thread (pingdotgg#29643)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
… source (pingdotgg#29013)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…#28135)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…h to Privacy Mode (pingdotgg#28097)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…son from hub rows (pingdotgg#28065)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…ned-in hosts (pingdotgg#27840)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…9806)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…managed Codex (pingdotgg#30004)

Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…ingdotgg#29862)

Co-authored-by: Matthew Feroz <136640686+MatthewFeroz@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
PR discovery used the full shell snapshot, which derived activity and counted historical items across active threads. Read only PR metadata and its event sequence in one transaction, then decode after releasing the reader. Preserve settled backfill, targeted refreshes, legacy PR normalization, and guarded updates.

Validation: check:changed passed with 80 tests after merging main; CI passed on 988187f. Native Electron measurements and a concurrent-write control confirmed metadata parity and coherent sequences. Synthetic measurements cover PR reads and service initialization, not full desktop startup.

Model: GPT 6.1 Sol. Harness: Codex in T3 Code.
advaitpaliwal and others added 25 commits November 3, 2026 23:45
…go (pingdotgg#30071)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: maria-rcks <maria@kuuro.net>
…he runtime starts (pingdotgg#30079)

Co-authored-by: wenshen <wlum0002@student.monash.edu>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…ingdotgg#30142)

Co-authored-by: SAPHID <saphid@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…ttle (pingdotgg#29847)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…ngs (pingdotgg#29853)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…t hooks (pingdotgg#29907)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…backports (pingdotgg#30161)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…ol (pingdotgg#30481)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…ient list (pingdotgg#30498)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
# Conflicts:
#	apps/desktop/src/backend/DesktopBackendManager.test.ts
#	apps/mobile/app.config.ts
#	apps/mobile/src/App.tsx
#	apps/mobile/src/features/settings/SettingsMicrophoneRouteScreen.tsx
#	apps/mobile/src/lib/appLinking.ts
#	apps/server/src/cli/server.ts
#	apps/server/src/git/GitManager.ts
#	apps/server/src/mcp/OrchestratorMcpService.ts
#	apps/server/src/orchestration-v2/Adapters/CodexAdapterV2.ts
#	apps/server/src/orchestration-v2/FoundationPersistence.test.ts
#	apps/server/src/orchestration-v2/ProjectionMaintenance.ts
#	apps/server/src/orchestration-v2/ThreadLaunchService.ts
#	apps/server/src/persistence/DatabaseMaintenance.ts
#	apps/server/src/preview/ServerBrowser.ts
#	apps/server/src/project/ManagedProjectFolders.test.ts
#	apps/server/src/provider/Drivers/ClaudeSkills.ts
#	apps/server/src/server.ts
#	apps/server/src/serverSettings.test.ts
#	apps/server/src/storageCleanup.ts
#	apps/server/src/usage/cliproxyApi.ts
#	apps/server/src/vcs/GitVcsDriver.ts
#	apps/server/src/ws.ts
#	apps/web/src/components/settings/ConnectionsSettings.tsx
#	apps/web/src/routeTree.gen.ts
#	evals/mcp-tool-use/README.md
#	packages/shared/src/managedPolicyFile.test.ts
#	packages/shared/src/managedPolicyFile.ts
#	packages/shared/src/usageLimits.ts
… (Checking that every fork seam survived)

Failing check: Checking that every fork seam survived

The seam check now passes (`check_seams` exits 0). Both failures came from upstream rewriting the code around a seam until the seam had nothing left to do.

**`apps/server/src/preview/ServerBrowser.ts` (`browser-timeout-recovery`, 31 of 34 lines).** Upstream pingdotgg#29865 and pingdotgg#29885 split `createTab` in two. A new wrapper calls `setUpTab(snapshot, opened)`, and if setup fails it closes everything recorded in `opened`, including `desktop.close`. The fork had its own try/catch here that called `desktop?.close()` when setup failed, so the native endpoint was released. The three missing marker lines belonged to that try/catch: its opening comment, the catch-block comment, and the "`return tab` moved inside the try block" note. Upstream now does the same thing, so I dropped those three lines. The other 31 recovery lines (retained context reuse, `recoveryPages` handling, restoring the recovered URL, `recordingTimeout`) all came through intact.

**`apps/server/src/persistence/DatabaseMaintenance.ts` (`brand`, 2 of 3 lines).** Upstream pingdotgg#29806 deleted `DatabaseProjectionsInvalidError`, along with its "Start T3 Code once so it rebuilds them…" message. Compaction now just calls `pruneEventStore()` with no verify step. Since the text is gone, its rebranded seam goes with it. The other two `fork: brand` lines are still there.

The only file I changed is `docs/fork/seams.tsv`: the `ServerBrowser.ts` row went from 34 to 31 and the `DatabaseMaintenance.ts` row from 3 to 2. No source files changed, and no other doc mentions these lines.
… (Checking for new T3 Code product text)

Failing check: Checking for new T3 Code product text

I fixed the failing check, "Checking for new T3 Code product text". The brand check and seam check now pass, and lint and the format check are clean on the edited files. The tests for `managedPolicyFile`, `policyTemplates` and `DesktopStartupRecovery` pass: 16 passed, 1 skipped. The skipped test is the Windows-only one.

**What failed and why:** Upstream added new admin- and user-facing "T3 Code" text in five files:
- the managed-policy startup message in `DesktopStartupRecovery.ts` (pingdotgg#30319);
- the "Windows is already using every port" error in the new `cli/automaticPort.ts` (pingdotgg#22962);
- the Group Policy and macOS profile display text in the new `policy/policyTemplates.ts` (pingdotgg#29862);
- the registry-reader errors in `packages/shared/src/managedPolicyFile.ts` (pingdotgg#29862);
- the "It opens in T3 Code" description in `HostedPromptLinkLanding.tsx` (pingdotgg#26290).

None of these are identifiers, so they were reworded rather than allowlisted.

**What I changed:**
- Each of those lines now says Loom and carries a `fork: brand` marker.
- The two lines inside the ADML XML template take `<!-- fork: brand -->`, the same way `DesktopStartupRecovery.ts` marks its HTML template. That comment is now part of the generated ADML file.
- One reworded help text told admins to run `"t3 policy check"`. Since I was already editing that line, I changed it to `loom policy check`, Loom's primary command.
- Identifiers stay as they were: the ADMX ids `T3Code`/`SUPPORTED_T3Code`, the `t3code` namespace, `com.t3tools.t3code` payload types and the registry key. The template line that mentions T3 Connect is left for the Loom-owned Connections work.
- `managedPolicyFile.test.ts` checks four of the error strings by substring, so I updated those four to the Loom wording and marked them `fork: brand`. The assertions are unchanged otherwise.
- In `docs/fork/seams.tsv`, I raised the brand counts for `DesktopStartupRecovery.ts` (8→9), `HostedPromptLinkLanding.tsx` (1→2), `managedPolicyFile.ts` (2→6) and `managedPolicyFile.test.ts` (1→5). I added rows for `apps/server/src/cli/automaticPort.ts` (1) and `apps/server/src/policy/policyTemplates.ts` (12).
… (Checking code formatting)

Failing check: Checking code formatting

The formatting check failed on a single file, `apps/server/src/storageCleanup.ts`, in `threadIdle`. The problem was in the fork's `project-lifecycle` seam, not in upstream's code.

Upstream's `threadIdle` spells out its idle conditions inline, ending with `!heldForLimitRecovery(...)`. The fork's seam replaces those conditions with the shared `threadWorkspaceIdle(thread, now)` call. In Loom before the merge, the same expression also started with `thread.worktreePath !== null &&`, so it was long enough to wrap across three lines. Upstream's change in pingdotgg#30026 moved that worktree-path check out into the caller. With it gone, the merged seam expression was left wrapped over two lines even though it fits on one, and the formatter flagged it.

I joined the seam line onto one line (`threadWorkspaceIdle(thread, now) && !heldForLimitRecovery(thread, now, settings)`). The `fork: project-lifecycle` marker comment stays where it was, so the seam's marker count in `docs/fork/seams.tsv` hasn't changed. Nothing else was touched. Rerunning `vp fmt --check` on the file now passes, and `check_seams` exits 0.
… (Linting upstream files the fork edits)

Failing check: Linting upstream files the fork edits

The failing check was "Linting upstream files the fork edits". oxlint reported `Identifier 'ThreadId' has already been declared` at `apps/server/src/storageCleanup.ts:20`.

The cause is a doubled import. Before the merge, Loom added `ThreadId` to the `@t3tools/contracts` type import with the line `ThreadId, // fork: project-lifecycle`. Upstream's v0.1.7-nightly.20261104.4151 now adds `ThreadId` to that same import itself, so after the merge the name was imported twice.

Upstream now does what that seam line did, so I dropped the fork's `ThreadId, // fork: project-lifecycle` line and kept upstream's. I left the `project-lifecycle` row for `storageCleanup.ts` in `docs/fork/seams.tsv` alone. It sets a minimum of 102 marked lines, and the file still has exactly 102 after the removal. `pnpm exec vp lint apps/server/src/storageCleanup.ts` and `check_seams` both pass now.
… (Typechecking apps/server)

Failing check: Typechecking apps/server

I fixed the failing "Typechecking apps/server" check by updating three fork-owned tests to upstream's new APIs. The server typecheck now exits 0, the three test files pass (6, 23 and 4 tests), and lint, format and `check_seams` pass on the changed files.

**What failed and why.** Three upstream changes broke the fork's tests. A fourth error, the doubled `ThreadId` import in `storageCleanup.ts`, was already fixed by an earlier repair commit.

- **Projection maintenance (pingdotgg#29806).** Upstream replaced `compactEventStore` with `pruneEventStore`. That method only prunes events the projections already cover, and only after they are a day old. Upstream also moved `verify`/`rebuild` out of `ProjectionMaintenanceV2` into a test-only helper, `orchestration-v2/testkit/ProjectionReplay.ts`, which keeps the same signatures. The merge had already carried the `server-weight` seam (untraced pages, scan counts, span attributes) onto `pruneEventStore`. Only the tests still called the old methods.
- **MCP thread links (pingdotgg#26290).** Upstream renamed `McpClientCaller.webOrigin` to `hostedAppUrl`, and thread links for outside MCP clients now use the hosted `/threads/<env>/<thread>` format from `hostedThreadLink`.

**What I changed.** I touched only seam lines and fork files:

- **`apps/server/src/persistence/DatabaseStorage.test.ts`**: I rewrote the `fork: server-weight` test against `pruneEventStore`. It seeds 120 events and marks them as covered by the projections. A first pass records the prune mark, the clock moves forward a day, and the second pass is traced. The test still asserts one span with the same counts (120 scanned, 119 deleted) and no traced per-page queries. I updated the per-page query pattern from `DESC` to upstream's `ASC` order, and the layer now needs only SQLite. The four markers stay, so the seams.tsv row is unchanged.
- **`apps/server/src/fork/deleted-history/DeletedThreadHistory.test.ts`**: it now gets `verify`/`rebuild` from upstream's `ProjectionReplay`. All assertions are unchanged.
- **`apps/server/src/fork/bots/mcp.test.ts`**: it passes `hostedAppUrl`. The expected link is now built with `hostedThreadLink`, and the test still checks that the link names the machine the bot ran on (`remote-worker`).

No seams were dropped and no seams.tsv rows changed. Nothing else is left for this check.
… (Running the fork's tests in apps/mobile)

Failing check: Running the fork's tests in apps/mobile

The failing check was "Running the fork's tests in apps/mobile". Four cases in `apps/mobile/app.config.test.ts` failed, all named "keeps the iOS and Android identifiers…". The test errored at line 42 because the app config's iOS `associatedDomains` was `undefined`.

**Why:** Upstream pingdotgg#29815 (b183048) makes copied thread links open the mobile app. It adds `applinks:app.t3.codes` to the iOS associated domains and serves an apple-app-site-association file on app.t3.codes. That file lists only upstream's Apple team and bundle IDs (`ARK85ZXQ4Z.com.t3tools.t3code*`). Loom's `mobile-identity` seam replaces the iOS identity: it uses Loom's own bundle IDs and team, and only claims associated domains for Loom's own auth domain when Connect is set up. So the upstream line adding `applinks:app.t3.codes` was rightly not carried into the fork's `associatedDomains`. Loom's iOS app can never appear in app.t3.codes's file, so the claim would do nothing. Upstream's new test assertions assume upstream's iOS identity. Android keeps upstream's package name under the seam, so upstream's Android intent-filter and assetlinks assertions still hold, and they pass unchanged.

**What I changed:** In `apps/mobile/app.config.test.ts`, I carried the `mobile-identity` seam onto upstream's two iOS assertions, marked `fork: mobile-identity`:
- Loom's iOS config does not claim `applinks:app.t3.codes`.
- The hosted apple-app-site-association file still lists upstream's team plus each variant's upstream identifier, so that part of upstream's consistency check is kept.

I raised that file's row in `docs/fork/seams.tsv` from 1 to 3 marked lines. The test file now passes (6/6), and lint, format and `check_seams` are clean. I changed no upstream code.

One thing for another session: upstream's new `expo-image-picker` microphone permission string in `apps/mobile/app.config.ts` still says "Allow T3 Code…". It belongs to the brand-copy check, not this one, so I left it alone.
… (Running the fork's tests in apps/server)

Failing check: Running the fork's tests in apps/server

I'm rerunning all 251 server test files from the failing log, plus the seam check, to confirm the fix. I'll report once they finish.

The full `apps/server` fork-test run is going in the background. I'll write the final summary when it finishes.

The "Running the fork's tests in apps/server" check passes now. The full rerun exited 0: every batch passed, with a few files skipped. The seam check, an `apps/server` typecheck and lint on the changed files also pass.

**What failed and why.** Most of the failures came from a duplicate `ThreadId` import in `storageCleanup.ts`, which an earlier session had already fixed. That parse error had been hiding four other problems:

- **`cli/up.test.ts`:** upstream's new test expects the pairing hint `t3 pair --base-dir …`, but the fork's CLI prints `loom pair`. I changed the expected text and marked it `fork: brand`.
- **`storageCleanup.test.ts`:** upstream's "pinned-child" case expects the reason "Not settled". The fork's `project-lifecycle` seam keeps any pinned worktree before upstream's settlement logic runs, so the real reason is "Thread is pinned". I added a seam branch for that case; the fork's behaviour itself is unchanged.
- **`ProviderTurnStartService.test.ts`:** three tests failed because the harness's `ProjectLifecycleService` mock had no `shellEnvironment`, which the setup runner calls. I added a one-line stub (`fork: project-lifecycle`).
- **`ProviderInstanceRegistry.test.ts`:** 13 tests failed because of an import cycle. `ClaudeAdapterV2` imported the fork's `ClaudeWorktreeService.ts`, which goes through git, project setup, lifecycle, settlement, storage cleanup and the terminal manager back to the adapter infrastructure. That left `ClaudeAdapterV2.layerQueryRunner` undefined when the infrastructure layer was built.

The last two also fail on `origin/main`, so the merge didn't cause them. They come from the fork's Nov 3 `fix(worktrees)` commits, but they still fail this check, so I fixed them.

**What I changed for the cycle.** I moved the `ClaudeWorktreeService` tag, its error, the owner type and the receipt schema into a new fork-owned file, `provider/ClaudeWorktreeServiceTag.ts`. `ClaudeWorktreeService.ts` keeps the implementation and `layer`, so `server.ts` is untouched. `ClaudeAdapterV2`'s import now points at the tag file and is marked `fork: project-lifecycle`. The other fork importers point there too: `ForkRuntime`, `claudeWorktreeHooks` and the service's test. An Effect lint rule required the tag's key to follow the new file name, so it is now `t3/provider/ClaudeWorktreeServiceTag/ClaudeWorktreeService`.

**Seam bookkeeping.** In `docs/fork/seams.tsv` I added rows for `up.test.ts` (`brand` 1) and for `ClaudeAdapterV2.ts` (`project-lifecycle` 1). I also raised the `project-lifecycle` counts for `storageCleanup.test.ts` to 34 and `ProviderTurnStartService.test.ts` to 33. FORK.md's packet-seam table has a matching `ClaudeAdapterV2` row.
@kylebegeman kylebegeman changed the title chore(fork): integrate upstream v0.1.7-nightly.20261104.4151 (in progress) chore(fork): integrate upstream v0.1.7-nightly.20261104.4151 Nov 4, 2026
@kylebegeman
kylebegeman marked this pull request as ready for review November 4, 2026 05:51
@kylebegeman

Copy link
Copy Markdown
Owner Author

Review of the unattended resolution: pass.

Merging upstream v0.1.7-nightly.20261104.4151 conflicted in 28 files; one Claude session took each.

  • Round 1, Checking that every fork seam survived: REPAIRED
  • Round 1, Checking for new T3 Code product text: REPAIRED
  • Round 1, Checking code formatting: REPAIRED
  • Round 1, Linting upstream files the fork edits: REPAIRED
  • Round 1, Typechecking apps/server: REPAIRED
  • Round 1, Typechecking evals: REPAIRED
    The session changed nothing.
  • Round 1, Running the fork's tests in apps/mobile: REPAIRED
  • Round 1, Running the fork's tests in apps/server: REPAIRED
  • Round 1, Running the fork's tests in evals: REPAIRED
    The session changed nothing.

No findings survived checking, so this merge can go into main without a person.

I read all of resolution.diff: the 27 conflicted files in merge c151fa9534 and the 7 repair commits. For each file I compared the result against base 115739c1e0, upstream 322f6544df and main e083c23c60.

Conflict resolutions

  • apps/server/src/preview/ServerBrowser.ts: Loom's try/catch around tab setup was dropped, and its seam count went from 34 to 31. That's correct. Upstream fix(server): preview tabs that fail during setup no longer leave their page open pingdotgg/t3code#29885 added a createTab/setUpTab wrapper that closes the desktop endpoint, the isolated context and the page when setup fails, which is the same job. The three markers that went are exactly the try, the catch and the "return tab moved" note. All the other recovery-context and popup seams are still there.
  • apps/server/src/orchestration-v2/ProjectionMaintenance.ts, FoundationPersistence.test.ts, DatabaseMaintenance.ts: Upstream replaced compaction with pruneEventStore (perf(server): prune events the projections already cover pingdotgg/t3code#29806). Loom's untraced pages, scan counts and span annotations were moved onto the new code. DatabaseProjectionsInvalidError went because upstream deleted it, and nothing still uses it.
  • apps/server/src/storageCleanup.ts: Upstream's split of threadIdle from storageCleanupThreadIdle, its worktreeSettlementChain, threadsById and the "parent settlement changed" check all survived. Loom's shared threadWorkspaceIdle rule, its sweep cache and the pending-effects loop survived too. The imports and pnpm-manifest code that look missing next to upstream were already gone on main.
  • apps/server/src/orchestration-v2/ThreadLaunchService.ts: Upstream's branch cleanup on cancel is applied using Loom's projectCwd instead of project.workspaceRoot, which matches the fork's parallel-checkout change.
  • apps/mobile/app.config.ts: recordAudioAndroid: true is a deliberate upstream change (feat(mobile): add on-device Android dictation pingdotgg/t3code#26734, Android dictation). Upstream's new applinks:app.t3.codes iOS entry is replaced on purpose by Loom's identity.associatedDomains; the Android intent filter is kept.
  • The other files (OrchestratorMcpService.ts, CodexAdapterV2.ts, ws.ts, server.ts, cliproxyApi.ts, usageLimits.ts, GitManager.ts, GitVcsDriver.ts, ClaudeSkills.ts, ConnectionsSettings.tsx, the mobile linking files, routeTree.gen.ts, managedPolicyFile*, the evals README and the tests) each keep both sides, with fork lines marked.

Repair commits

  • Seams and formatting: the route tree was reordered to match the generator, the seam counts match the removals above, the formatting change is a single collapsed line, and lint removed Loom's duplicate ThreadId import because upstream now imports it.

  • New upstream text: "T3 Code" in new upstream strings was changed to "Loom", with fork: brand markers.

  • Typecheck: fork tests were updated to upstream's renamed APIs (hostedAppUrl, ProjectionReplay, pruneEventStore).

  • Mobile test: iOS no longer claims app.t3.codes, and a comment explains why.

  • Server tests:

    • up.test.ts expects loom pair instead of t3 pair.
    • The "pinned-child" case expects "Thread is pinned", which comes from Loom's existing pinned rule.
    • A missing shellEnvironment stub was added.
    • The ClaudeWorktreeService tag moved to a new fork file, ClaudeWorktreeServiceTag.ts, to break an import cycle.

    The last two fixes are for failures that already happen on main. They go slightly beyond the merge, but the fork checks needed them, they only touch fork-owned files, their markers are in place, and they're recorded in seams.tsv and FORK.md.

One harmless side effect: the Windows policy template output (t3code.adml) now contains a <!-- fork: brand --> XML comment, which is valid XML.

VERDICT: pass

@kylebegeman
kylebegeman merged commit bfc49b4 into main Nov 4, 2026
@kylebegeman
kylebegeman deleted the integrate/v0.1.7-nightly.20261104.4151 branch November 4, 2026 12:26
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.