Skip to content

fix: use cft urls#21

Merged
pietdevries94 merged 1 commit intopietdevries94:mainfrom
bitbloxhub:cft
Mar 11, 2026
Merged

fix: use cft urls#21
pietdevries94 merged 1 commit intopietdevries94:mainfrom
bitbloxhub:cft

Conversation

@bitbloxhub
Copy link
Collaborator

Fixes #20

@bitbloxhub
Copy link
Collaborator Author

bitbloxhub commented Mar 10, 2026

Resolved that issue.
Next time please make these things a review so i can minimize them.
However, why does your bot have at least two GH accounts @schickling (at least I assume it's yours?) and if you have a good reason please mark the others as such like "schickling-assistant".

@schickling
Copy link

Sorry not sure I understand? This is my personal account and the other account is my assistant account.

@bitbloxhub
Copy link
Collaborator Author

bitbloxhub commented Mar 10, 2026

@schickling Is humemm your bot? I know "schickling-assistant" is.

@schickling
Copy link

Not that I know of 😅

@pietdevries94
Copy link
Owner

Nice work!

@pietdevries94 pietdevries94 merged commit 6762287 into pietdevries94:main Mar 11, 2026
@bitbloxhub
Copy link
Collaborator Author

Looking further at it, @humemm seems to be a mixed bot/human account ([1] feels human, [2] also does).
@humemm (the human one) please split your openclaw or whatever you're running into its own github account with owner and contact information. i have no problem with these bots as long as they are marked with the owners github account and contact info in case it misbehaves, and only act on behalf of the user.

schickling added a commit to overengineeringstudio/effect-utils that referenced this pull request Mar 11, 2026
pietdevries94/playwright-web-flake#21 landed upstream, switching
Chromium fetchers to Chrome for Testing URLs. Our local override
(mkPatchedPlaywrightDriver, chromium-cft.nix, chromium-headless-shell-cft.nix)
is no longer needed.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@cameronraysmith
Copy link

cameronraysmith commented Mar 11, 2026

@pietdevries94 @bitbloxhub any reason not to backport these changes up through 6762287 to the https://github.com/pietdevries94/playwright-web-flake/tree/1.58.2 tag?

@bitbloxhub
Copy link
Collaborator Author

bitbloxhub commented Mar 11, 2026

Yeah, after checking a bit I think we can retag 1.58.2 fairly safely.

I'll go ahead and do that.

Actually, nixpkgs changed the handling of playwright download URLs in NixOS/nixpkgs#498142 after I mentioned they were wrong, but I'll wait until that actually gets merged to backport it.

schickling added a commit to overengineeringstudio/effect-utils that referenced this pull request Mar 12, 2026
pietdevries94/playwright-web-flake#21 landed upstream, switching
Chromium fetchers to Chrome for Testing URLs. Our local override
(mkPatchedPlaywrightDriver, chromium-cft.nix, chromium-headless-shell-cft.nix)
is no longer needed.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
schickling added a commit to overengineeringstudio/effect-utils that referenced this pull request Mar 14, 2026
* Add pnpm repo-boundary GVS spec

* Tighten pnpm repo-boundary spec wording

* Finalize pnpm repo-boundary spec

* Move dev installs to a root hoisted pnpm workspace

* Fix PR 368 CI regressions

* Include workspace member pnpm manifests in mk-pnpm-cli

* Narrow mk-pnpm-cli workspace member manifest staging

* Persist pnpm metadata cache for legacy deploy

* Refactor pnpm CLI builder around the aggregate root workspace

* Restrict staged workspace members to the aggregate root

* Install external repo roots in staged pnpm builds

* Derive staged pnpm patches from lockfiles

* Split repo-root and package-only workspace sources

* Own external package lock roots in staged pnpm builds

* Avoid duplicate manifest staging for package lock roots

* Let external lock roots own their workspace copies

* Clarify composed aggregate lock ownership

* Refine aggregate lock ownership spec

* Add pnpm composed-root CI install mode

* Handle non-frozen pnpm installs in CI

* Disable pnpm package manager self-updates in dev tasks

* Stabilize pnpm task execution in dev shells

* Align root pnpm packageManager with dev env

* Disable pnpm self-management in Nix builds

* Make nix-cli hash source explicit

* Force cold hash refresh in nix:hash

* Fix shared hash source updates

* Stabilize pnpm deps FOD inputs

* Make pnpm deps hashes platform-agnostic

* Fix pnpm store spec parsing

* Skip local pnpm package specs in store fetch

* Fix pnpm deps parser interpolation

* Refresh oxlint-npm deps hash

* Fix package-scoped nix-cli fingerprint checks

* Use job-local megarepo stores in CI sync helpers

* (sch-vfv.1) Patch Playwright Chromium fetches to CFT URLs

* (sch-vfv.1) Fix macOS Playwright headless-shell hash

* (sch-vfv.1) Fix macOS Playwright Chromium hash

* (sch-vfv.1) Harden nix hash and CI lock refresh

* (sch-vfv.1) Compose nested pnpm installs transitively

* (sch-vfv.1) Add Genie metadata-based workspace composition

* (sch-vfv.1) Clarify pnpm single-instance install invariants

* Remove local Playwright Chromium CFT URL workaround

pietdevries94/playwright-web-flake#21 landed upstream, switching
Chromium fetchers to Chrome for Testing URLs. Our local override
(mkPatchedPlaywrightDriver, chromium-cft.nix, chromium-headless-shell-cft.nix)
is no longer needed.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Add shared effect-lsp lint task

* refactor(genie): project workspaces from package graph

* test(genie): fix deterministic check regressions

* Finalize genie composition alignment

* Restore genie authoring boundary and cleanup aggregate API

* Finish aggregate root projection boundary cleanup

* Refine genie workspace seed projections

* Finish genie pnpm workspace SSOT cleanup

* Replace Effect.succeed(undefined) with Effect.void

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Fix floating effect lint warnings (yield or assign unused effects)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Remove package-local pnpm lockfiles

* Fix optional Effect recovery typing

* fix(genie): prevent double ^ prefix in peer dependency resolution

resolvePeerDependencies was unconditionally prepending ^ to external
peer dep values, even when they already had a ^ prefix from upstream
package data. This caused ^^0.94.2 in downstream composed packages.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Rename Effect LSP task module to ts-effect-lsp

* Add ambient CSS module declaration for side-effect imports

Fixes TS2882 for `import '@xterm/xterm/css/xterm.css'` now that
noUncheckedSideEffectImports defaults to true in TS 5.8+/tsgo.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Refresh tsgo flake input

* Pin effect-tsgo to working upstream revision

* Fix aggregate devenv check task execution

* docs(spec): clarify cross-repo link boundary

* docs(prompt): add cross-repo boundary follow-up handoff

* rm tmp

* fix: stage pnpm patches at build time

* fix(genie): stop root workspace projection at repo boundaries

* split megarepo workspace sync from lock management

* cut over megarepo to raw ref paths

* Remove nested pnpm workspace manifests

* fix: update dependencies in megarepo.lock and clean up genie command code

* Fix lint warnings: add missing JSDoc and explicit boolean compare

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Fix exactOptionalPropertyTypes error in workspace test helper

Conditionally spread pnpmPackageClosure so the key is absent
rather than explicitly set to undefined.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: update locked versions and hashes for tsgo and typescript-go in flake.lock

* docs: clarify usage of pnpmWorkspaceYaml.manual as an escape hatch for non-genie-managed members

* fix: update locked versions and hashes for tsgo and typescript-go in devenv.lock

* fix: update locked versions and hashes for tsgo in devenv.lock and flake.lock

* fix: rename tsgo diagnostics task from `ts:check:effect-lsp` to `ts:effect-lsp`

* fix: enhance workspace dependency resolution and path handling in mk-pnpm-cli and catalog modules

* fix: harden mk-pnpm-cli.nix and workspace graph traversal

- Fix overlay ordering: apply shortest prefixes first so "." doesn't wipe nested overlays
- Fix resolveSourceFor: handle "." prefix correctly (matches all paths)
- Fix packageJsonPath: use absoluteSourcePathFor instead of hardcoded workspaceRootPath
- Fix materializeWorkspace: copy external member dirs when installDir != memberDirs
- Fix repo inference: deterministic tiebreaking (lexicographic) when counts are equal
- Fix traversal keys: always use repo-qualified keys to prevent cross-repo name collisions
- Remove dead normalizePathLike code

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: cast config type in createEffectRoute to satisfy TanStack Router's SSR serialization validator

The conditional spread pattern produces a union type too wide for
TanStack Router's Constrain/ValidateSerializableLifecycleResultSSR
checks. The `satisfies` already validates at build time; the cast
helps the type flow through.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: add root-level CSS ambient declaration for tsgo pnpm workspace resolution

tsgo resolves pnpm workspace `file:` links through node_modules,
bypassing project references. This means consuming packages' tsconfig
contexts don't include tui-react's ambient `*.css` declaration.

Add a shared `types/css.d.ts` at the repo root and include it in the
three consuming packages (megarepo, genie, notion-cli) via their genie
configs.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: replace global Error with tagged WriteSchemaToFileError in notion-cli

Global `Error` in Effect's failure channel loses type safety as
untagged errors merge together. Use Data.TaggedError for proper
discrimination.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: exclude external member dirs from aggregate closure copy

aggregateOwnedWorkspaceClosureDirs only filtered by install root dir
but not its member dirs, causing double-copy permission errors when
member dirs were also copied in the external install root section.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Add dedicated CLI storybook stories for mr lock commands

Separate story group under CLI/Lock/ with dedicated stories for each
lock subcommand (sync, update, apply) including interactive timelines,
dry-run variants, error scenarios, and lock input sync display.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* perf: skip fixup phase in pnpm deps FOD

The pnpm store tarball doesn't benefit from patchShebangs —
it's just an archive of cached packages. Saves ~3-4s per FOD build.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat: use semantic sync statuses — recorded/applied instead of locked

Split the generic 'locked' status into 'recorded' (lock sync: workspace→lockfile)
and 'applied' (lock apply: lockfile→workspace) with mode-specific display text.
Dry-run uses "would record"/"to record" and "would check out"/"to check out".

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat: model parallel sync execution in UI and stories

Replace singular `activeMember` with `activeMembers` array to accurately
reflect concurrency=4 parallel sync. Spinners now show for all members
syncing simultaneously, with pending items queued behind them.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat: add prodInstall parameter for production-only pnpm install

Adds a `prodInstall` boolean parameter (default false) that appends
`--prod` to pnpm install flags, skipping devDependencies. This reduces
install time and node_modules size for CLI builds that use
`catalog.compose({ mode: 'install' })` to move inherited peers to deps.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* perf: parallelize megarepo CLI operations and add otel span instrumentation

Parallelize sequential operations across sync, nix-lock, and store commands:
- Orphan symlink removal: unbounded concurrency for fs ops
- Nested megarepo sync: concurrency 4 for recursive --all syncs
- Nix lock member processing: concurrency 8 across members
- Store status/GC: concurrency 8 for repo and worktree analysis

Add OpenTelemetry spans for full trace visibility:
- megarepo/sync, megarepo/sync/member (with name/source attributes)
- megarepo/nix-lock/file, megarepo/nix-lock/nested
- git/clone, git/clone-bare, git/fetch, git/fetch-bare
- git/create-worktree, git/create-worktree-detached, git/worktree-status

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat: add sub-spans and span.label attributes for high-quality otel traces

- Add megarepo/sync/member sub-spans: clone-or-fetch, resolve-ref, create-worktree
- Add span.label attribute to all spans for Grafana waterfall display
  (e.g. megarepo/sync/member[nanoid], git/worktree-status[/path/...])
- Covers git.ts, member.ts, sync.ts, nix-lock/mod.ts, store/mod.ts

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat: add result.status and action attributes to sync member spans

- Add result.status (already_synced, synced, cloned, error, etc.) to megarepo/sync/member span
- Add action (clone, fetch, noop, etc.) and bareExists to clone-or-fetch sub-span
- Add ref and refType to create-worktree sub-span

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* chore: fix formatting (oxfmt)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* refactor: extract commonPnpmPolicySettings to external.ts

Move shared pnpm policy settings (nodeLinker, dedupePeerDependents,
strictPeerDependencies, supportedArchitectures) from internal.ts to
external.ts so downstream megarepos can import them as SSOT.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix(lint): resolve all oxlint warnings (explicit-boolean-compare, named-args, jsdoc)

Fix 42 pre-existing warnings exposed by --deny-warnings in CI:
- explicit-boolean-compare: use === true for boolean ternaries
- named-args: convert createLockState/createLockTimeline to destructured args
- jsdoc-require-exports: add JSDoc to exported createLockState and WriteSchemaToFileError

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: remove automatic nix store repair on task failure

The withStoreRepairRetry() logic triggers a full 1.1TB nix-store --verify
--check-contents --repair on ANY task failure, not just corruption. This
blocks runners for 40+ minutes on legitimate failures (type errors, test
failures, lint). The existing validateNixStoreStep provides fast upfront
validation.

* fix: add --all to megarepo lock apply in CI, update @effect-atom versions

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: update oxc-config pnpm deps hash after @effect-atom version bump

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: update pnpmDepsHash for genie and megarepo CLI builds

The @effect-atom version bump changed the pnpm lockfile, invalidating
the fixed-output derivation hashes for both CLI packages.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: update lockfileHash and packageJsonDepsHash for genie and megarepo

All three Nix hashes (pnpmDepsHash, lockfileHash, packageJsonDepsHash)
need updating after @effect-atom version bump changed the lockfile and
package.json dependency fields.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* refactor: make repo identity explicit, remove legacy escape hatches

- Replace heuristic `inferCurrentRepoNameFromPackages` with explicit `repoName`
  parameter on all projection APIs (aggregateFromPackages, root, tsconfigJsonFromPackages)
- Remove `packageJson.aggregate()` and `pnpmWorkspaceYaml.manual()` legacy APIs
- Add `extraMembers` as exceptional compromise for non-genie-managed workspace
  members (e.g. livestore standalone examples)
- Remove `PnpmPackageClosureConfig` and `AggregatePackageJsonInput` from
  top-level runtime exports; keep PnpmPackageClosureConfig in genie/external.ts
  as documented exceptional export for downstream workspaceMember() factories
- Update docs/changelog to accurately reflect current API surface and frame
  extraMembers as exceptional, not default

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: make type-aware oxlint depend on pnpm:install

When tsconfig is provided for type-aware linting, tsgolint needs
node_modules to resolve external types. Without this dependency,
lint:check:oxlint runs before pnpm:install in CI, causing all
external types to resolve as 'error' types and triggering hundreds
of false positive no-redundant-type-constituents violations.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: format genie runtime files

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: use targeted nix-store repair instead of full-store scan

Replace `nix-store --verify --check-contents --repair` (scans entire
store, 250K+ paths / 1.1TB) with `nix-store --repair-path` targeting
only the invalid devenv path. The full-store scan causes nix-daemon
D-state IO blocking, starving all concurrent CI jobs on the runner.

* feat: redesign CLI commands — fetch/apply/lock three-command model

Replace the old workspace/lock_sync/lock_update/lock_apply mode system with
a clean three-command data flow model:
- `mr fetch` — Remote → Lock (fetch upstream refs, resolve commits, write lock)
- `mr apply` — Lock → Workspace (create worktrees, symlink, nix lock sync, generators)
- `mr lock` — Workspace → Lock (record current HEAD commits)
- `mr fetch --apply` — fetch then apply (daily driver)

Key changes:
- SyncMode: 'fetch' | 'apply' | 'lock' replaces old 4-mode system
- applyAfterFetch pattern: fetch runs silently, then apply renders output
- mergeFetchErrors: fetch errors surface through apply results for better UX
- Orphan removal, nix lock sync, generators guarded to apply mode only
- Nested --all recursion correctly handles fetch-then-apply per nested megarepo
- All 44 integration tests passing

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat: add root workspace patch coverage validation

Packages declaring pnpm.patchedDependencies now trigger validation at the
workspace root level — pnpmWorkspaceYaml.root() checks that all patch keys
from the workspace closure are covered by the root config.

Also refines recompose-patches to skip private packages (workspace root
handles patches for them), and adds pnpm.patchedDependencies to @overeng/utils
so the requirement is grounded in package metadata.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* refactor: restructure storybook stories to match CLI command hierarchy

- Reorganize SyncOutput stories: CLI/Sync/* and CLI/Lock/* → CLI/Fetch/*,
  CLI/Apply/*, CLI/Lock/* matching the actual fetch/apply/lock commands
- Add command prop to all TuiStoryPreview components showing the mr CLI
  command in a powerline prompt (e.g. "mr fetch --all --verbose")
- Add cwd prop to all stories matching each story's workspace root path
- Consolidate dryRun: replace separate DryRun stories with a dryRun
  control arg toggle (Pin, Store/Fix, Store/GC, Fetch/Apply/Lock)
- Delete PinOutput/DryRun.stories.tsx (merged into Success.stories.tsx)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: move border-radius to outer wrapper so corners round the full component

Previously borderRadius was on containerStyles (inner content panes),
causing rounded corners between the powerline bar and terminal content.
Now the outer wrapper clips all children, rounding only the outer edges.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: make powerline prompt text selectable

Remove userSelect: 'none' so users can copy the command text.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: remove unused imports and dead code to fix CI lint/typecheck

Remove leftover unused imports, declarations, and dead code from recent
CLI redesign refactor that caused CI failures.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat: wire ref sync, pre-flight checks, and fix lock file bugs

- Wire ref sync into syncNixLocks: propagate branch refs from megarepo.lock
  to all 4 downstream file types (flake.nix, devenv.yaml, flake.lock, devenv.lock)
- Wire pre-flight hygiene checks into mr lock, mr apply, mr pin with --no-strict flag
- Fix extractLockFileInputs to filter to direct inputs only (skip transitive deps)
- Fix broken_worktree path parsing to handle refs/tags/ and refs/commits/ paths
- Add fixStoreIssues and parseWorktreeRef tests

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat: add --porcelain flag to mr store worktree new

Outputs only the worktree path for scripting:
  cd $(mr store worktree new owner/repo --ref branch --porcelain)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* style: apply lint fixes (explicit boolean comparisons, toSorted, named args)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* style: add JSDoc comments, refactor to named args, fix remaining lint

- Add JSDoc to all exported declarations (jsdoc-require-exports)
- Refactor getByDotPath, setByDotPath, updateNixFlakeUrl, parseGitPath
  to use named args pattern (named-args)
- Fix remaining explicit-boolean-compare in stories and source files

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat: add tagged union types for nix lock sync output (Phase 6)

Introduces three distinct update types for lock sync results:
- RevUpdate: mechanical commit SHA propagation (dim in output)
- RefUpdate: intentional branch/ref changes (cyan highlighted)
- SharedSourceUpdate: shared lock source propagation (e.g. devenv)

Schema, view, fixtures, stories, and orchestration all updated.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: handle null/undefined in updateNixFlakeUrl with exactOptionalPropertyTypes

The named-args refactoring exposed exactOptionalPropertyTypes issues
where null/undefined were passed as optional property values. Fix by
explicitly allowing null|undefined in the updates type and using
null-coalescing checks in the implementation.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat: remaining polish — auto-detect nested, preflight view, status labels, quality fixes

- Auto-detect nested megarepos by scanning for megarepo.json (Phase 4)
- Add PreflightFailed state with issue list, mr store fix hint, --no-strict escape hatch
- Add preflight stories (apply/lock failures, errors-only, single issue)
- Add LockRequired and WithLockSync stories for mr apply
- Add DepsOutput error stories
- Mode-aware status labels: "fetched"/"already up to date" in fetch mode
- Rename NixFlakeUrl scheme → _tag discriminant (project conventions)
- Change updateNixFlakeUrl null → undefined removal sentinel

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* style: add JSDoc to exported lock sync update type aliases

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: resolve 5 view bugs in LockSyncSection rendering

- Add flexDirection="column" to outer Box (fixes verbose tree not rendering)
- Add ref/rev type labels to LockFileUpdateLine
- Include sharedSourceUpdates targetCount in member count
- Update summary wording to "Nix lock sync: N updates across M members"

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: resolve remaining lint issues (explicit-boolean-compare, unused params, named-args, format)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: verbose tree rendering + storybook control gaps

Root cause: paddingTop={1} on LockSyncSection Box caused yoga height=1,
and renderTreeSimple clips content at yoga-computed height. Text nodes
have zero height in yoga, so the box only had room for 1 line (padding).
Fix: replace paddingTop with explicit <Text> </Text> empty line.

Also adds missing storybook controls:
- --all toggle on lock/Results and apply/Results stories
- --dryRun toggle on StoreOutput/Fetch stories

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat: complete storybook control audit — add missing --force, --verbose, --porcelain

Adds missing storybook controls across all renderers:
- --force on all SyncOutput stories (fetch/apply/lock)
- --verbose on Fetch/Issues stories
- --porcelain on StoreOutput/WorktreeNew stories
- --no-strict skipped (requires renderer schema changes)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: use classifyRef for tag/commit ref validation in store hygiene

validateStoreMembers previously only skipped ref_mismatch checks for
40-char commit SHAs, causing false positives for tag refs (e.g. v1.0.0)
in detached HEAD worktrees. Now uses classifyRef to correctly skip both
tags and commits.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: update obsolete commands, apply checkout, dedup, and path member handling

- Update megarepo.nix task definitions to new command model (mr fetch/apply/lock)
- Update ci-workflow.ts to use mr fetch --apply and mr apply
- Fix apply mode to use locked commit instead of bare repo branch tip
- For newly created branch worktrees in apply mode, fast-forward to locked commit
- Share visited set in applyAfterFetch nested fetch calls (dedup fix)
- Skip local path members in lock mode (nothing to record)
- Fix storybook atom state reset when controls change
- Fix Results.stories.tsx force control dependency

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* docs: update all documentation to new command model (fetch/apply/lock)

Replace old command references across 8 documentation files:
- mr sync → mr fetch --apply
- mr lock sync → mr lock
- mr lock update → mr fetch --apply
- mr lock apply → mr apply

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: revert incorrect path member skip and dedup visited sharing

- Revert "skip local path members in lock mode" — lock mode needs to
  record their current commit for reproducibility
- Revert sharing visited set in applyAfterFetch nested fetch — the fetch
  marks megarepos as visited, causing the subsequent apply to skip them

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: format markdown and source files (oxfmt)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* refactor: split sync.ts into engine.ts, apply.ts, fetch.ts, lock.ts

Each command gets its own file mirroring the three-command model.
Fix missing execCommand re-export in commands/mod.ts that caused CLI crash.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* docs: update remaining legacy mr sync references to new command model

Update run.sh test harness, stories, and context docs to use
mr fetch --apply instead of mr sync.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat: rename devenv tasks to match CLI model and detect broken worktrees

Rename megarepo devenv tasks (lock:sync→lock, lock:update→fetch-apply,
lock:apply→apply) and add broken worktree detection in store commands.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: add JSDoc comments to exported command constants (oxlint)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: format store/mod.ts and store.ts (oxfmt)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: propagate nested sync failures instead of silently swallowing

The catchAll in --all recursion now surfaces the error as an 'error'
member result so collectSyncErrors reports it to the user.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix(nix): resolve mkPnpmCli root patch files via workspaceSources

Root patchedDependencies entries pointing into workspaceSources paths
(e.g. repos/effect-utils/...) were not found during workspace
materialization because copyPatchedDependencyFilesCmd used the
pre-overlay workspaceRootPath.

Add copyResolvedPatchFilesCmd which parses patch paths from the lockfile
at Nix eval time and resolves each through absoluteSourcePathFor, using
the same source-resolution logic as copyFileCmd/copyDirCmd. This ensures
patch files under workspaceSources prefixes are found in the correct
source root.

Also add chmod before cp in both patch copy functions for idempotency
when root and external install root patches target the same path.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Johannes Schickling <schickling.j@gmail.com>
Co-authored-by: Claude Opus 4.6 <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.

Chromium fetches still use old revision URLs while plain Playwright succeeds via Chrome for Testing URLs

4 participants