Skip to content

Releasing - #16

Merged
rbuergi merged 2 commits into
mainfrom
releasing
Oct 7, 2024
Merged

rbuergi merged 2 commits into
mainfrom
releasing

Conversation

@rbuergi

@rbuergi rbuergi commented Oct 7, 2024

Copy link
Copy Markdown
Contributor

No description provided.

@rbuergi
rbuergi merged commit 95e9b9f into main Oct 7, 2024
@rbuergi
rbuergi deleted the releasing branch October 7, 2024 18:43
rbuergi added a commit that referenced this pull request May 5, 2026
…p trigger

Tasks #15, #16, plus a related production-code drift fix.

1. CodeNodeType.HandleExecuteScript: workspace.UpdateMeshNode that stamps
   LastExecutedAt / LastExecutedBy / LastActivityPath onto the Code node
   was being discarded. Observable.Create only runs on Subscribe — the
   stamp never landed, so CodeNode_StampsLastExecutionFields timed out
   waiting for LastActivityPath to match. Added .Subscribe(_ => {}, _ => {}).

2. ScriptExecutionInUserHomeTest.Cancel_Via_RequestedStatus_Patch...: the
   test's workspace.UpdateMeshNode that flips RequestedStatus = Cancelled
   on the activity log had the same bug — the patch never hit the
   activity hub, so the kernel never got the cancel signal. Added
   .Subscribe(_ => {}, _ => {}).

3. NodeTypeStreamCache.MaybeKickCompile: was flipping CompilationStatus
   = Pending to trigger compile via InstallCompileWatcher — which was
   removed in 86b3470. The flip is dead code now; nothing reacts to
   Pending. Replaced with a CreateReleaseRequest post to the per-NodeType
   hub, matching the explicit-only compile flow.

4. MeshNodeExtensions.UpdateMeshNode<TContent>: the void overload now
   forwards to GetMeshNodeStream(path).Update(...) and returns
   IObservable<MeshNode> — callers must Subscribe (the cold observable's
   side effect only runs on Subscribe, per
   Doc/Architecture/AsynchronousCalls.md). No callers in src/.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
rbuergi added a commit that referenced this pull request May 10, 2026
…, parallelism, backoff)

NuGetAssemblyResolver:
  - Evict faulted/cancelled tasks from the per-key cache before
    returning. A transient feed failure (network, throttle, cancelled
    in-flight resolve) used to poison the cache for the resolver's
    lifetime — every subsequent call replayed the same exception.
  - Pass CancellationToken.None to the shared core task so a single
    caller's cancellation can't take down the resolution for
    others; per-caller `ct` projects via `task.WaitAsync(ct)`.
  - Switch DependencyBehavior from `Lowest` to `HighestMinor` so
    `#r` directives pick up patch-level security fixes via
    transitive dependencies without silently jumping major/minor.
  - Document that hydrated cache content is trusted to match
    (id, version) — flag for future content-hash verification if
    cache poisoning becomes a concern.

LinkedInPublisher / XPublisher (LinkedIn already committed in batch A
for the dynamic+PII parts; this commit adds the 401 retry):
  - SendWith401RetryAsync: on the FIRST 401 response from a publish,
    force-refresh the token (zero ExpiresAt before EnsureFreshAsync)
    and retry once. Closes the race where the access token's TTL
    expired between EnsureFreshAsync and the actual API call.

PostStatsRefresher:
  - Process due-refresh targets via Parallel.ForEachAsync bounded
    by SocialOptions.StatsRefreshDegreeOfParallelism (default 8),
    so a slow API + large refresh window can't let one tick
    overshoot the next interval.
  - Per-target failure backoff via a ConcurrentDictionary of
    last-failure timestamps — targets that failed within
    StatsRefreshFailureBackoff (default 15 min) skip the next tick.
    Stops a degraded platform from generating thousands of repeat
    warnings every cycle while the underlying issue is fixed.
    Success clears the backoff entry.

SocialOptions: add StatsRefreshDegreeOfParallelism (8) and
StatsRefreshFailureBackoff (15 min) knobs.

Addresses PR #95 review items #12, #13, #14, #16, #17, #18.
(#15 XPublisher defensive parse + the LinkedIn dynamic / PII items
were already in commit 478fdaa.)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
rbuergi added a commit that referenced this pull request Jun 5, 2026
…-free top-level autocomplete + email docs

#16 — public.top_level_index MATERIALIZED VIEW over every partition's namespace='' root node
(one row per partition), built by public.rebuild_top_level_index() from public.searchable_schemas.
Powers top-level autocomplete from one small indexed relation instead of a cross-schema fan-out
(the connection-pool storm). NOT a node copy; NOT rebuilt on the query hot path (DDL-per-query
deadlocked — removed); re-materialized only at schema-init (PostgreSqlSchemaInitializer) and at
deploy (SearchableSchemasUpdater). Test: TopLevelIndexTests (materializes partition roots only,
excludes within-partition children, idempotent rebuild).

Docs: SendingEmail / InvitationOnlyOnboarding / OnboardingNewEnvironment updated to
Email__MailboxAddress (renamed from NoReplyAddress) + bidirectional (Mail.Send outbound,
Mail.ReadWrite inbound).

Also bundles concurrent in-flight branch work present in the tree: the TypeRegistry /
MessageHubConfiguration default $type discriminator change (FullName -> simple Name, to fix
cross-hub DeliveryFailure) and ThreadExecution / ThreadSubmission edits.

Build: 0 errors, 0 warnings. PG tests (TopLevelIndex + PartitionLifecycle): 6/6 green.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
rbuergi added a commit that referenced this pull request Jun 5, 2026
…view + unscoped query defer

#16 matview: rebuild_top_level_index() now selects exactly the partition ROOT per schema (namespace='' AND id=<schema_name>) so path (a generated column = id when namespace='') is globally unique — the prior (namespace,id)/(path) UNIQUE index collided on non-root top-level nodes repeating ids across partitions. atioz migration completes; matview = one row per real partition.

#20 (partial): StorageAdapterMeshQueryProvider defers UNSCOPED queries to the native partitioned provider's SQL fan-out (partitioned PG only, via StorageAdapterQueryProviderOptions). Removes the pedestrian's slow cross-partition ListChildPaths walk for the onboarding middleware's unscoped 'nodeType:User content.email:X' lookup (the 20s timeout). Scoped/satellite queries untouched (pedestrian is the real server for _Access reads) — 452/452 PG tests pass. Absent-partition scoped-walk slowness (_Access/User/_UserActivity) is a separate routing-layer fast-fail, tracked next.

RoutingConvergenceTests: PG regression guards that ResolvePath/GetQuery converge to empty (no hang) for absent partitions + non-matches.

Docs: CLAUDE.md + Deployment.md rewritten to the AKS image-update deploy (dotnet publish -t:PublishContainer → az aks command invoke set image/rollout); deploy.sh = first-time env setup only; bare aspire deploy = legacy.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
rbuergi added a commit that referenced this pull request Sep 11, 2026
…in on 10.0.12

MeshWeaver.Plugins run 34594554211 (main), MeshWeaver.FutuRe.Test, pid 51566:
SEGV_MAPERR at 0x0, background_sweep()+0xa61 on a dedicated BGC thread,
the cursor's MethodTable word reads zero; libcoreclr build-id 79945f51
(stock 10.0.12) read out of the crashed process. Trace log complete and
clean (44/44 teardowns clean, alc=1 throughout). The second post-fix
sighting; grouping, eliminations and cause/victim updated to sixteen.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
rbuergi added a commit that referenced this pull request Sep 11, 2026
…ery run's runtime read

719 portal-hosts verdict runs (2026-09-06 → 09-11), runtime read per run
from its own log: 10.0.11 8/444 = 1.80 % (CI 0.78–3.52), 10.0.12 2/275 =
0.73 % (CI 0.09–2.60); rate ratio 0.40, exact CI 0.04–2.02, p = 0.20.
Elimination by counter-example (#15, #16); reduction not established —
~2,030 runs per arm (~2026-09-24). The /sigsegv skill now says so.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
rbuergi added a commit that referenced this pull request Sep 11, 2026
… collectible contexts REALLY unloaded

Unload() only requests an unload; the runtime frees a collectible context over later
collections, on the finalizer thread. MeshTeardownSignal fires when teardown has requested
them, so the next test's mesh was built while the previous mesh's NodeType contexts were
still being torn down — the state every readable FutuRe crash dump (#12-#16) caught:
3-7 NodeAssemblyLoadContexts with _state=Unloading while the next instance ran.

- CollectibleContextUnloads (Mesh.Contract, mesh-scoped): records retired contexts by
  SIGNAL, never by reference; AllCollected completes when every one has been collected,
  errors when an unload was abandoned (drain fault / Unload() threw), emits synchronously
  when nothing is pending.
- NodeAssemblyLoadContext.RetireInto: a finalizable sentinel referenced only by the
  context (Unload() suppresses the context's own finalizer); it can only be finalized once
  the runtime has destroyed the LoaderAllocator and released the context.
- CompilationCacheService retires every context it disposes into the tracker.
- Test bases (Monolith, Hub): teardown ends with CollectibleUnloadDrain — drive full
  collections, then observe AllCollected; a fault fails the class, a retention is reported.
- Controls: RetiredContextCollectedSignalTest.
- Record: DebuggingNativeCrashes + /sigsegv corrected (alc=1, #15 "live referenced",
  eliminations 1/2/6).

Co-Authored-By: Claude Opus 5 (1M context) <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.

1 participant