Skip to content

release: v2.0.0 - #5

Closed
github-actions[bot] wants to merge 1 commit into
masterfrom
release/v2.0.0
Closed

github-actions[bot] wants to merge 1 commit into
masterfrom
release/v2.0.0

Conversation

@github-actions

@github-actions github-actions Bot commented Sep 2, 2025

Copy link
Copy Markdown

🚀 Release v2.0.0

Type: major version bump
Branch: release/v2.0.0
Trigger Commit: release!: complete v2.0.0 architectural rewrite with AsyncLocalStorage and universal module support

📋 Changes

🚀 What's Changed

💥 Breaking Changes

  • release!: complete v2.0.0 architectural rewrite with AsyncLocalStorage and universal module support (7501cb0)

✨ Features

No new features

🐛 Bug Fixes

No bug fixes

🔧 Other Changes

No other changes

✅ Automated Actions Completed

  • Pre-build tests passed (npm test)
  • Package built successfully (npm run build:ci)
  • Post-build tests passed (included in build)
  • Version bumped in package.json (1.3.0 → 2.0.0)
  • Changelog entry generated
  • Ready for review and merge

🎯 Next Steps

  1. Review the changes in this PR
  2. Approve and merge (squash recommended)
  3. GitHub Release will be created automatically
  4. NPM publish will happen automatically

🤖 This PR was created automatically by the release workflow

@github-actions github-actions Bot added the semver: major This release includes breaking changes and bumps the major version label Sep 2, 2025
@github-actions github-actions Bot added release Marks a pull request as a pending release — merge to publish a new version semver: major This release includes breaking changes and bumps the major version labels Sep 2, 2025
@Shinrai

Shinrai commented Sep 2, 2025

Copy link
Copy Markdown
Contributor

workflow changelog change made, closing this PR.

@Shinrai Shinrai closed this Sep 2, 2025
@Shinrai
Shinrai deleted the release/v2.0.0 branch September 2, 2025 02:40
Shinrai added a commit that referenced this pull request Aug 10, 2026
The merge-replace collision test encoded the OLD (buggy) first-wins behavior and
carried a false premise: it claimed api_test_collections/math.mjs has no `add`,
so "no actual conflict … behaves the same as merge". That file DOES export
`add` (a + b), so `add` is a genuine conflict — and #5 correctly makes the
second module win it (5), not keep the first's file version (1005). Update the
post-collision assertion 1005 → 5 and fix the stale comments; the pre-collision
assertion (1005, before the collections add) is unchanged.

This is now a real merge-replace conflict test, which the old comments admitted
was missing.
Shinrai added a commit that referenced this pull request Sep 13, 2026
…indings

Follow-up to the reactive self-heal redesign — the adversarial review of #362
surfaced further real, related defects in the same mechanism. Four fixes:

- Gate #reactivelyPatchStack on ____buildDepth === 0 (findings #3/#5/#7/#8). The
  reactive patch exists only for the quiet case (a late mutation with no build,
  hence no terminal rebuildStacks(), coming). Firing during a build/add/reload was
  redundant (a flood per leaf on initial load — perf), stored the write raw because
  UnifiedWrapper's setTrap only wraps+userAssigned-tags at buildDepth 0 (so it
  differed from a rebuildStacks()-installed stack and a later reload's child-adoption
  dropped it), could race the framework's own not-yet-landed assignment for a
  candidate the build might still reject, and during a reload could target the old
  tree. Checked at execution time so a build that started after the setImmediate was
  queued is caught.

- addModule()/addModules() now call rebuildStacks() after mounting (finding #1).
  These compose a component onto the live tree like api.slothlet.api.add() but never
  rebuilt stacks, so a routine matching a leaf of a module mounted this way never got
  its stacked callable — and the reactive patch can't cover it (it's a build, now
  gated; and a mount-relative name can't match until the endpoint registers during
  that same build). Both the single and multi mount paths get the call. Target is
  this.slothlet.api (the base tree addApiComponent mounts onto and boundApi forwards
  to), matching runModeRoutines.

- Post-await re-validation in #reactivelyPatchStack (findings #2/#4/#6). After the
  #resolveContainer await, re-check ____buildDepth (a build may have started),
  slothlet.api identity (a reload may have swapped the tree), and the target
  wrapper's ____slothletInternal.invalid flag (a concurrent removal may have
  invalidated it — a write would land via the set trap with no throw but read back
  undefined). Recompute the winner's contributor group from current raw and re-confirm
  the install threshold (TOCTOU) so a concurrent removal can't leave a zero/one-
  contributor no-op stack replacing a real function. The waiting-proxy write-absorption
  case has no clean public brand to detect, but only arises mid-build/removal, which
  these guards + the top-of-method gate cover; documented in-code rather than adding a
  fragile detector.

Tests: a new modules/routine-stack-on-mount suite pins that addModule()/addModules()
install the stack and it invokes the mounted contributor (fails without the mount-path
rebuildStacks); a new routines case pins the build-depth gate no-ops during a build and
heals once it clears. Findings #2/#6 (invalidated-wrapper / waiting-proxy) are internal
race states without a deterministic public-API trigger and are covered by the guards
rather than a flaky test.

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

Labels

release Marks a pull request as a pending release — merge to publish a new version semver: major This release includes breaking changes and bumps the major version

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant