Skip to content

effect catalog pin is 10 betas behind, and the bump invalidates our effect patch #4797

Description

@usirin

Current scope

Unify workspace consumers on one exact compatible Effect 4 release and migrate the Alchemy stack and required libraries together. Preserve product behavior, CLI contracts, shared D1/auth ownership and maintained patch protections. General agent-context restructuring and the TypeScript upgrade are separate work.

Triage note: verified the gap at origin/main 29c791b. The root catalog still uses beta.92 while Tuval uses rc.112. The old MCP consumer named in earlier criteria is absent; current CLI patch tests replace that obsolete validation target. The user requested this upgrade next. This is dependency maintenance, not a new product capability.

Triage note: the owner search for Effect, Alchemy, dependency and catalog found this issue; #8930 was folded here. #8115 is a separate credential-permission problem, and #8909 concerns the pattern-reading tool. Home this shared runtime/tooling maintenance in the existing pipeline and reliability lane; no product milestone owns the whole dependency graph.

Triage note: independently rechecked at origin/main bc7c6b8. This upgrade preserves product behavior and the named CLI contracts. It intentionally adopts Alchemy beta.77 dev migration application and stage precedence/default changes described below; it does not promise identical operational behavior. Cloudflare runtime checks remain unverified and must not be claimed from local tests.

Implementation boundary

Use Effect and platform/sql/vitest companions 4.0.0-rc.112, Alchemy 2.0.0-beta.77, Distilled Cloudflare 1.0.0-rc.9 and Drizzle ORM/Kit 1.0.0-rc.5-ab785fc. Required worker-types and React patch alignment may move to maintain one compatible resolved graph. Recheck the current registry; a newer tag alone is not grounds to abandon this source-verified compatible set. Ground API choices in Effect-TS/effect main LLMS.md and exact release source. Alchemy beta.77 still calls Config.string, which rc.113 removed.

Preserve the existing local implementation rather than rebuilding it. Move it to a clean Fabrika-claimed tree from fresh main, then validate that tree. No cloud deployment, credential changes or manual remote-resource operations are part of this build.

Acceptance criteria

  • All workspace Effect consumers use the root catalog and resolve exactly rc.112, including transitive platform-node-shared and SQL companions; remove Tuval's named Effect catalog and obsolete beta-specific overrides. All dependency declarations pass the catalog guard.
  • Alchemy, Distilled, Drizzle and required peer alignment install with a frozen lockfile. Record exact pins and the source-grounded reason rc.113 is incompatible with shipped Alchemy beta.77.
  • Migrate affected Effect and Alchemy APIs while preserving error tags/wire fields, retry limits, CLI default-false booleans, hidden positional help, end-of-options forwarding and excess-operand refusal. Focused regressions pass.
  • Retain Flagship serving-state protection and configured Vitest hook timeouts. Preserve mixed flat/directory D1 history, existing journal naming, drift refusal and explicit same-content rename adoption, including directory-only journal/hash aliases. Real pipeline tests cover these migration cases, and each old patch hunk is retained, replaced by upstream behavior or retired with its actual consumer explained. No generated rejects or machine-local headers enter patches.
  • Keep Phoenix auth on its existing Database and secret binding, retaining plugins, server-owned user fields, uncached session validation and the auth bridge. Replace the removed integration tag package with the local service contract. The offline bundle guard follows the installed Alchemy plugin and compatibility API; its positive control detects a forbidden Effect import.
  • Current dependency/API recipes and DEVELOPMENT match the migrated code, including local worker/DO plus remote D1, possible dev migration application and new stage precedence/defaults. Remove obsolete live package/API instructions; validate changed links and executable snippets. Leave general instruction organization to the companion docs PR.
  • In the claimed PR tree, frozen install, Fabrika code/prose checks, appropriate builds, pure/client/local integration suites and targeted patch/CLI checks pass. Distinguish tests rerun in that tree from earlier checkout evidence; disclose unavailable Cloudflare deployment/auth/D1/DO fidelity checks without treating local mocks as platform proof.
  • Publish one separate Effect/Alchemy PR through Fabrika build verbs, with concrete validation, patch outcomes and any deviations. Do not merge or manually deploy.
  • Updated migration and filesystem recipes cite the installed Alchemy/Effect module names with valid inline-code formatting; the PR Deviations section explicitly discloses deleted patch tests and replaced assertions with the preserved behavior and its replacement evidence.

Original report (verbatim)

Founder ruling, 2026-08-03 (authoritative): "we should do the typescript and effect version updates immediately imo." This issue is the effect half; #4796 is the typescript half. Both are type:chore · p0, homed in the fabrika campaign milestone.

The problem

The effect catalog pin in pnpm-workspace.yaml is 4.0.0-beta.92, ten betas behind the registry's beta dist-tag, and that exact version string is also the key of a patchedDependencies entry. A pnpm patch is keyed to an exact version, so the bump is entangled with the patch: it is not a version-string edit.

Verified at origin/main (triage re-verified every price-moving claim)

  • The pin. pnpm-workspace.yaml catalog: effect: 4.0.0-beta.92, plus five @effect/* siblings pinned to the same exact version and needing to move in lockstep — @effect/platform-bun, @effect/platform-node, @effect/sql-d1, @effect/sql-pg, @effect/vitest. (@effect/language-service and @effect/tsgo are on independent ^ ranges and are not part of the lockstep set.)
  • The patch entry. patchedDependencies carries effect@4.0.0-beta.92: patches/effect@4.0.0-beta.92.patch. Confirmed 175 lines across five files, all under dist/: dist/unstable/ai/McpSchema.{d.ts,js}, dist/unstable/ai/McpServer.{d.ts,js}, dist/unstable/rpc/RpcSerialization.js.
  • The dependent count. 25 workspace package.json files declare effect, all via catalog:. The version string moves in one place; the blast radius is the runtime surface, not the manifests.
  • Registry state (read this run, will drift). npm view effect dist-tags → latest: 3.22.1 (the v3 line), beta: 4.0.0-beta.102 (the line we are on). Target version selection is the implementer's call; this is the observation, not a proposal.

The unresolved question that sizes the work

Whoever picks this up must first settle, by reading patches/effect@4.0.0-beta.92.patch against the target beta's source, which of three applies per hunk:

  • (a) still needed and applies cleanly at the new version;
  • (b) still needed, but must be re-derived against new source;
  • (c) upstream landed the change and the hunk can be deleted.

This is UNVERIFIED and triage does not guess it. It is acceptance criterion 1 below because it sizes everything downstream.

Triage note — the patch has THREE hunks, not two (the rationale header undercounts)

The filing flagged this as observed-not-diagnosed; triage read the patch and resolves it:

  • The patchedDependencies rationale comment in pnpm-workspace.yaml says "TWO hunks on 4.0.0-beta.92" and describes only the McpServer experimental capability passthrough and the McpSchema ChannelNotification (both from #3053, epic #3045, behavior-pinned by packages/pipeline-crew-mcp/src/edge/mcp-channel.test.ts — the @patch-pin guard, #3040/#3051).
  • The patch also modifies dist/unstable/rpc/RpcSerialization.js: a third, independently-motivated hunk that omits the JSON-RPC id member for notifications instead of coercing it to null. That hunk is self-documenting — it carries its own inline rationale naming #3495 and ADR 0038, and states the failure it prevents (an id: null reads as a malformed request to the MCP-SDK client and is never dispatched → zero delivery).
  • Judgement: in scope for this ticket, as a correction, not a separate issue. The why is not lost (it travels inline with the hunk), so this is not the re-derivation hazard it first looked like. But the header is stale and undercounts, and the header is what a re-deriver skims first; it lives in the same file and the same block the bump edits, and the third hunk resolves through (a)/(b)/(c) independently of the other two. Fixing the count is a one-line edit inside the change this ticket already makes. Splitting it would be ceremony.

Triage note — both halves of the ruling sit on a patched dependency

Carried from #4796's triage, not re-derived here: the tsgo binary is a patched @typescript/native-preview, overwritten in place by a root postinstall. Both halves of the founder's ruling are entangled with a patch mechanism. A planner must not price either half as a routine bump.

Sequencing — triage agrees, but this is not triage's ruling

The filing recommends wave B (this) as a separate PR from #4796's wave A. Triage concurs on the stated reasoning: they share no failure mode, and one PR carrying both is unbisectable — a red typecheck could come from the compiler swap or the runtime bump with no cheap way to tell which. Recorded as a recommendation; triage does not rule sequencing and has taken no action on it. Neither issue blocks the other.

Control-plane surface

Ran pipeline-cli cp-classify classify this run over the expected change set (pnpm-workspace.yaml, pnpm-lock.yaml, patches/effect@4.0.0-beta.92.patch, the @patch-pin test, workspace package.json files): not-control-plane [path-clear-no-content-source] — proven ordinary. Conditional, same as #4796: adding a .decisions/** ADR to the change set flips it to content-undetermined (ADR 0164 content clause), which requires guard-content-probe classify at the PR head before claiming ordinary. Re-run the classifier against the actual diff; do not carry this verdict blind.

Acceptance criteria

  • patches/effect@4.0.0-beta.92.patch is read against the target version's source and each of its three hunks is resolved to (a) applies as-is, (b) re-derived, or (c) deleted-because-upstream-landed — with the per-hunk verdict recorded in the PR description.
  • The effect catalog pin and the five lockstep @effect/* pins (platform-bun, platform-node, sql-d1, sql-pg, vitest) all move to the same target version; no @effect/* is left at 4.0.0-beta.92.
  • If the patch survives (a)/(b), the patchedDependencies key and the patch filename are renamed to the new exact version, and pnpm install applies it without a "patch did not apply" warning.
  • If the patch is deleted under (c), the patchedDependencies entry, the patch file, and the rationale comment go with it.
  • The pnpm-workspace.yaml rationale comment above patchedDependencies is corrected to describe all surviving hunks — the "TWO hunks" count is wrong today (RpcSerialization.js is undescribed there).
  • packages/pipeline-crew-mcp/src/edge/mcp-channel.test.ts (the @patch-pin guard) passes — the behavior the patch buys is still pinned, or the guard is updated with a recorded reason if upstream now provides it natively.
  • Every dep stays on catalog: — pipeline-cli catalog-guard check is green (CLAUDE.md, "Every dependency via catalog:").
  • pnpm typecheck, pnpm lint, and the test suite are green across all 25 dependent workspace packages.
  • Shipped as its own PR, separate from #4796's typescript wave (see Sequencing above).

Original report (verbatim)

Summary

The founder ruled on 2026-08-03 that "we should do the typescript and effect version updates immediately imo." The TypeScript half is tracked at #4796, but the effect half has no ticket at all — this files it. The catch: our effect pin is a patched dependency, and a pnpm patch is keyed to an exact version, so bumping the version invalidates the patch. This is not a version-string edit.

What I was doing

Following up on the founder's ruling covering two version updates. #4796 covers typescript; checking whether the effect half was tracked anywhere turned up nothing — #4796's body does not mention the effect version, and an open-issue search for an effect bump returns no match.

What I observed

1. The pinned version (pnpm-workspace.yaml, catalog, read at main):

  effect: 4.0.0-beta.92

Five @effect/* siblings are pinned to the same exact version in the same catalog and would have to move in lockstep:

  '@effect/platform-bun': 4.0.0-beta.92
  '@effect/platform-node': 4.0.0-beta.92
  '@effect/sql-d1': 4.0.0-beta.92
  '@effect/sql-pg': 4.0.0-beta.92
  '@effect/vitest': 4.0.0-beta.92

2. The catalog also carries a PATCH keyed to that exact version — pnpm-workspace.yaml, patchedDependencies:

patchedDependencies:
  '@nkzw/fate@1.3.1': patches/@nkzw__fate@1.3.1.patch
  alchemy@2.0.0-beta.59: patches/alchemy@2.0.0-beta.59.patch
  effect@4.0.0-beta.92: patches/effect@4.0.0-beta.92.patch
  react-fate@1.3.1: patches/react-fate@1.3.1.patch

The patch is 175 lines and touches five files, all under dist/:

dist/unstable/ai/McpSchema.d.ts
dist/unstable/ai/McpSchema.js
dist/unstable/ai/McpServer.d.ts
dist/unstable/ai/McpServer.js
dist/unstable/rpc/RpcSerialization.js

The inline rationale above patchedDependencies describes it as "TWO hunks on 4.0.0-beta.92 (dist only)" giving the MCP channel edge what the fixed public McpServer/McpSchema surface can't express (#3053, epic #3045), behavior-pinned by packages/pipeline-crew-mcp/src/edge/mcp-channel.test.ts (the @patch-pin guard, #3040/#3051), and ends "Retire when effect ships these natively." Note the comment names two files while the patch modifies five — the RpcSerialization.js diff is not described there. Flagging as observed, not diagnosed.

3. Latest published on the live npm registry (npm view effect dist-tags):

{
  "latest": "3.22.1",
  "beta": "4.0.0-beta.102"
}

So latest is the v3 line (3.22.1) and the v4 beta line is at 4.0.0-beta.102 — our pin is 10 betas behind on the line we're actually on. I am not proposing a target version beyond reporting what the registry says.

4. Workspace packages depending on effect: 25, all via catalog: (apps/web, infra/ci-credentials, infra/depo, and packages/: admin-grant, anka-ops, audit-run, audit-stage, audit-verdict, authz, cf-credentials, d1-rest, depo, design-capture, fabrika-cli, fate-effect, flake-rate, founder-seed, fts-backfill, local-render, migrations-guard, moderator-grant, orphan-sweep, pipeline-cli, pipeline-crew-mcp, preview-seed). The catalog means the version string itself changes in one place; the blast radius is the runtime surface, not the manifests.

Why it matters

The pin is patched, and a pnpm patch entry is keyed to an exact version. Bumping effect invalidates patches/effect@4.0.0-beta.92.patch — it will either fail to apply or need re-deriving against the new source. So the shape of the work is not "change a version string", it is:

  • (a) determine whether the patch is still needed at the new version;
  • (b) if yes, re-derive it against the new source;
  • (c) if the upstream change that made it necessary has landed, delete it.

Which of (a)/(b)/(c) applies is UNVERIFIED. It needs someone to read what the patch actually does and check it against the target version's source. I am deliberately not guessing, and not proposing how to re-derive it.

The same trap, twice. #4796's triage found that the tsgo binary is a patched @typescript/native-preview, overwritten in place by a root postinstall. Both halves of the founder's ruling sit on top of a patched dependency, and in both cases the version bump is entangled with the patch rather than independent of it. Worth stating so a planner does not price either half as a routine bump.

Pointers

Suggested next step (non-binding)

A guess, and the implementer's call. Read patches/effect@4.0.0-beta.92.patch and the corresponding source at the target beta first, to settle whether the patch is still needed, needs re-deriving, or can be deleted — that answer sizes everything else.

On sequencing, carried as a recommendation and not a decision: this looks like wave B, a separate PR from #4796's wave A (typescript + the tsgo patcher, coupled by their own patch mechanism, ~27 manifests). The two share no failure mode, and one PR carrying both is unbisectable — a red typecheck could come from the compiler swap or the runtime bump with no cheap way to tell which.

Relationship to #4796: siblings under one founder ruling, independent to build. Neither blocks the other.


Filed by an agent · session 51a8e31d-bfd4-4627-af80-f00fcd0805c5 · branch main · 2026-08-03T02:30:39Z


Amendment — 2026-09-10

Current dependency findings from the repository audit

Report #8930 covers this same upgrade and is being folded here. Current main still has Effect beta.92 plus Tuval's rc.112 named catalog. The user requested the repo-wide upgrade next and a separate Fabrika PR.

The compatible prepared target is Effect and its platform/sql/vitest companions 4.0.0-rc.112, Alchemy 2.0.0-beta.77, Distilled Cloudflare 1.0.0-rc.9 and Drizzle 1.0.0-rc.5-ab785fc. Alchemy beta.77 calls Config.string, removed in rc.113, so the newer RC tag is not a compatible stack. Follow Effect-TS/effect main LLMS.md and exact release source.

Required migration work includes Schema.TaggedError, CLI boolean defaults and hidden positional help, Alchemy worker bundling, mixed D1 migration history and explicit rename-only adoption. Phoenix already owns its auth implementation; retain the shared D1, secret binding and plugins using a local service contract when removing the obsolete upstream auth tag package. Real Cloudflare checks remain unverified; no cloud deployment is authorized in this task.

The old MCP consumer and its named test have been deleted from main. Review every current patch hunk against actual consumers rather than requiring that retired test. Fresh claimed-tree checks must cover the updated graph and current CLI/migration regressions. General agent-doc restructuring is a separate change.

Activity

  1. self-assigned this
    on Aug 3, 2026
  2. usirin commented on Aug 3, 2026

    @usirin
    MemberAuthor

    ⚠️ SCOPE CORRECTION — it is not one patch, it is FOUR OF FOUR; and this one patches the crew's own substrate

    Posted from intake, 2026-08-03, after this issue's triage was dispatched — so if the triage verdict below does not reflect this, this supersedes it. Everything here was verified by direct read at main, not relayed.

    1. All four pnpm patches are invalidated, not just this one

    patchedDependencies carries four entries, every one keyed to an exact version, and every one of those deps has a newer version available:

    Patched dep Pinned Available
    effect 4.0.0-beta.92 4.0.0-beta.102
    alchemy 2.0.0-beta.59 2.0.0-beta.67
    @nkzw/fate 1.3.1 1.3.2
    react-fate 1.3.1 1.3.2

    Four of four. So the invalidation is not a property of this ticket — it is a property of any dependency sweep in this repo. A pnpm patch key is exact-version, so every patched dep breaks its patch on bump, by construction.

    Consequence for planning: any sweep that prices patched deps as version-string edits is wrong on all four. This ticket owns the effect one; the other three need the same treatment wherever they are planned.

    2. This patch touches the crew's own MCP substrate — a self-referential risk

    The patch modifies, verified by reading it:

    • dist/unstable/ai/McpSchema.d.ts / .js
    • dist/unstable/ai/McpServer.d.ts / .js
    • dist/unstable/rpc/RpcSerialization.js

    The MCP surface. Its consumers are packages/pipeline-crew-mcp/ — bin.ts, crew/session.ts, crew/served-toolset.ts, edge/channel-sink.ts, edge/claim-tool.ts, edge/kinds-tool.ts, and others — which is the crew channel substrate itself.

    So the failure mode is self-referential: if the patch does not re-derive cleanly against the new version, the thing that breaks is the MCP server the crew coordinates over. The channel could be lost mid-upgrade, and the coordination needed to recover the upgrade would be unavailable at exactly that moment.

    Acceptance criterion this implies — it is not optional: wave B must verify the crew MCP still BOOTS, not merely that typecheck passes. A green typecheck against a patched-away MCP surface proves nothing about whether the server runs.

    3. Still unverified — flagged, not guessed

    Nobody has determined which of the three outcomes applies, for ANY of the four patches:

    1. still needed and re-derivable,
    2. still needed and not re-derivable (the upgrade stalls until upstream), or
    3. obsolete, because upstream landed the fix.

    That requires reading each patch against the new source. It is real work, not a formality, and it should be a named first step rather than an assumption folded into the bump.

    4. Structural parallel — the same trap in both halves of the ruling

    #4796's triage found that the tsgo binary is a patched @typescript/native-preview, overwritten in place by the root postinstall. So both halves of the founder's "typescript and effect" ruling sit on top of a patched dependency, and in both cases the bump is entangled with the patch rather than independent of it. Neither is routine.

  3. added this to the fabrika campaign milestone on Aug 3, 2026
  4. added
    p0Highest priority
    status:triagedTriage signed off; ready for write-code to pick
    and removed on Aug 3, 2026
  5. removed their assignment
    on Aug 3, 2026
  6. usirin commented on Aug 3, 2026

    @usirin
    MemberAuthor

    chief-of-staff spike — the patch question is ANSWERED for effect: B, RE-DERIVABLE, and one hunk is now obsolete upstream

    Read-only spike, dispatched to settle acceptance criterion 1 before anyone plans the bump. Verdict is git apply output, not judgement.

    Verdict: B — re-derivable. The upgrade is NOT stalled.

    Four of the five patched files re-apply to beta.102. The fifth must be deleted, not re-authored.

    Pre-image hashes for all five index blobs match beta.92 exactly, so the baseline is verbatim and the check is meaningful.

    $ git apply --check -p1 effect@4.0.0-beta.92.patch    # against beta.92
    exit=0
    $ git apply --check -p1 effect@4.0.0-beta.92.patch    # against beta.102
    error: patch failed: dist/unstable/ai/McpServer.d.ts:247
    error: patch failed: dist/unstable/rpc/RpcSerialization.js:266
    exit=1
    

    Per-file against beta.102: McpSchema.d.ts 0, McpSchema.js 0, McpServer.js 0, McpServer.d.ts 1, RpcSerialization.js 1.

    McpServer.d.ts fails only on a doc-comment reword in trailing context — upstream rewrote the layerHttp docblock. Reducing context fixes it; the four still-needed files apply as a set:

    $ git apply --check -p1 -C1 --include=<the four> effect@4.0.0-beta.92.patch
    Context reduced to (2/2) to apply fragment at 250
    exit=0
    

    All five paths still exist at beta.102 — no upstream reorganisation.

    The RpcSerialization.js hunk is OBSOLETE — delete it

    This is the hunk flagged as an undescribed re-derivation hazard. It omitted the id member when response.id was nullish, because beta.92 did Number(undefined) → NaN → JSON.stringify emitted id: null, which the MCP-SDK client reads as a malformed request (it routes on id-member presence) and never dispatches. Zero delivery.

    beta.102 rewrote the same line:

    -        id: response.id !== "" ? Number(response.id) : "",
    +        id: response.id,

    With the coercion gone, response.id is undefined for a drain-built notification and JSON.stringify drops undefined-valued keys — same wire outcome, different shape. That is also why it fails to apply: upstream changed the exact line.

    Tradeoff to keep visible: dropping it relies on JSON.stringify omitting undefined keys. Spec-guaranteed for JSON, but it would break if a non-JSON serialization (MsgPack) were ever swapped in. notif-id-omit.repro.test.ts should keep covering it.

    The other three hunks are still load-bearing at beta.102

    grep -rn "claude/channel\|ChannelNotification" in beta.102's dist/unstable/ai/ → zero hits. experimental in McpServer.{js,d.ts} → zero hits. encodeNotification is still the blind Schema.Union(...).

    Including the one that looks fixed and isn't: beta.102 did add a real "notifications/initialized" handler that does server.initializedClients.add(client.id). It is still unreachable — the routing branch does handlers.mapUnsafe.get(request.tag) with the bare tag, while that context is keyed by rpc.key, defined as `effect/rpc/Rpc/${_tag}`. So the phoenix hunk is still required; applying it yields a harmless idempotent double-add.

    Correction to the working record — the header count is wrong in TWO ways

    The prose block above patchedDependencies: in pnpm-workspace.yaml (~lines 139–152) is already stale at beta.92, not merely at bump time: it says "TWO hunks" when the shipped patch touches five files, and it describes the channel payload as { message, _meta } when the patch has {content, meta}. A re-deriver skims exactly that block first. Worth fixing in the same PR.

    Unverified — stated, not guessed

    • Not run against the real crew MCP at beta.102. One new gate in beta.102 sits before the phoenix insert point: if (!getInitializedClient(...)) return Effect.void. Traced in source to resolve correctly for stdio, but not executed. The five @patch-pin: effect@4.0.0-beta.92 tests under packages/pipeline-crew-mcp/src/edge/ are where that gets settled in one run — which is exactly the "must BOOT, not just typecheck" criterion.
    • Whether @effect/platform-node, @effect/vitest, @effect/sql-d1 etc. have beta.102 releases and peer-compat — out of scope, unchecked.

    Recommended shape

    Bump, re-key the patch to effect@4.0.0-beta.102, delete the RpcSerialization.js section, update the five @patch-pin: header comments together with the patchedDependencies key, and record in pnpm-workspace.yaml that upstream fixed the id-coercion.

  7. usirin commented on Aug 13, 2026

    @usirin
    MemberAuthor

    Founder ruling (2026-08-13, via chief-of-staff): out of scope for the current phase — removed from M44, and deliberately NOT moved to M46 (fabrika fast follows) either. The effect catalog bump is phoenix platform maintenance, not fabrika work. This supersedes the 2026-08-03 'update immediately' urgency: the ticket stays open, un-milestoned, until the founder re-picks it after the fabrika switch.

  8. removed this from the fabrika campaign milestone on Aug 13, 2026
  9. usirin commented on Sep 7, 2026

    @usirin
    MemberAuthor
    No description provided.
  10. usirin commented on Sep 7, 2026

    @usirin
    MemberAuthor

    Triage note: metadata-only repair of the live homing-guard report #8477, authorized by the supervising intake session after reading this issue's rulings. The later founder ruling at #4797 (comment) supersedes the original immediate urgency and explicitly keeps this ticket open and un-milestoned until the founder re-picks it. Preserve that deferral rather than force-fitting a home or treating it as fog/pipeline maintenance.

    Park on status:needs-info, with no type, priority, audience or home, while preserving the report and all founder comments. This is neither closure nor authorization for a dependency upgrade.

    Unblock question for the founder: has this platform-maintenance ticket been re-picked, and if so under which current scope/home? On a re-pick, revalidate its original patch and test criteria against current source before returning it to agent-ready. pnpm-workspace.yaml at origin/main still uses default effect: 4.0.0-beta.92; the Tuval rc.112 catalog is separate, not completion of this ticket. The original crew MCP surface and patch account have since changed, so the historical criteria are not silently certified today. No registry call, bump, release, implementation, or new scope was performed in this repair.

  11. 4 remaining items

  12. usirin commented on Sep 10, 2026

    @usirin
    MemberAuthor
    No description provided.
  13. added
    axis:pipeline-hardeningStanding cross-cutting axis: pipeline hardening (was milestone #1; go-forward label)
    p1Medium priority
    ready-for:agentAn execution engine may pick this up.
    status:triagedTriage signed off; ready for write-code to pick
    and removed
    status:needs-infoHuman-filed; awaiting answers before triage
    on Sep 10, 2026
  14. usirin commented on Sep 10, 2026

    @usirin
    MemberAuthor

    Opened #8934 at b4cc8bf through Fabrika after independent triage. The claimed tree starts at main bc7c6b8 and preserves the prepared 149-path change.

    Review the Alchemy D1 migration patch and its twelve actual-pipeline tests first, then shared-D1 auth ownership and explicit remote-D1 dev policy. Product behavior and named CLI contracts are preserved; Alchemy dev migration application and stage defaults intentionally change. General agent-doc cleanup is separate and overlaps AGENTS.md, the pattern index and feature-services.md; its organization should win while retaining this PR's current API/runtime facts.

    Node 26.2.0 validation passed: frozen install, Fabrika code/prose checks, builds, web 2797 unit and 366 client tests, Tuval 3097 unit and 79 local integration tests, package/infra 20 tasks including CLI 9078 tests, catalog/patch guards, executable doc examples and offline bundle guard with positive control. Initial parallel Tuval failures passed unchanged on focused main/upgraded comparisons and sequential full reruns; the PR records them without asserting a cause.

    No manual deployment or cloud-resource changes were run. Real D1 conversion, DO migrations, Flagship API state, auth startup and SSE/HMR remain unverified. The branch is pushed and ready for independent PR review; it is not merged.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    axis:pipeline-hardeningStanding cross-cutting axis: pipeline hardening (was milestone #1; go-forward label)p1Medium priorityready-for:agentAn execution engine may pick this up.status:triagedTriage signed off; ready for write-code to picktype:choreNo behavior change

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions