Skip to content

feat(waves): publish to hive.flow first, fall back to ecency.waves - #1007

Merged
feruzm merged 2 commits into
developfrom
feature/waves-hive-flow-host
Jun 24, 2026
Merged

feat(waves): publish to hive.flow first, fall back to ecency.waves#1007
feruzm merged 2 commits into
developfrom
feature/waves-hive-flow-host

Conversation

@feruzm

@feruzm feruzm commented Jun 24, 2026

Copy link
Copy Markdown
Member

Summary

Aligns the web wave write path with mobile: new waves prefer the hive.flow container and fall back to ecency.waves.

Previously the composer always published into ecency.waves. Now use-wave-create resolves the container at submit time by walking ECENCY_WAVES_HOSTS ([hive.flow, ecency.waves]) and posting into the first one that currently has a live anchor post.

hive.flow is pre-provisioned and inert today, so there is no behaviour change now (it resolves to ecency.waves); it switches over automatically once hive.flow starts posting. The unified feed already reads every container; only Ecency's own containers are written to. Explicit deck hosts (leothreads / liketu.moments / ...) are unchanged.

Changes

  • wave-hosts: add hive.flow, the ordered ECENCY_WAVES_HOSTS list, and isEcencyWavesHost.
  • use-wave-create: resolve the preferred live container; the hive.flow lookup is wrapped so its absence is a clean no-op fallback.
  • use-waves-api: hive.flow waves use the dedicated wave-* permlink scheme, like ecency.waves.
  • use-wave-submit: reflect the resolved container on the created item.
  • Unit test for the host priority + predicate.

Full web test suite passes locally (1673 tests); typecheck + lint clean.

Summary by CodeRabbit

  • New Features

    • Waves can now be created on an expanded set of supported hosts, including a new host option.
    • Creation flow now better selects the appropriate host automatically when publishing.
  • Bug Fixes

    • Improved wave/thread submission so the chosen host is retained more consistently after posting.
    • Better handling of host resolution failures when creating waves.
  • Tests

    • Added coverage for supported wave hosts and host validation behavior.

Mirror mobile's container preference on the web write path. New waves from
the standard composer resolve their container by walking ECENCY_WAVES_HOSTS
([hive.flow, ecency.waves]) and posting into the first host that has a live
anchor post.

hive.flow is pre-provisioned and inert today, so this resolves to
ecency.waves with no behaviour change now, then switches over automatically
once hive.flow starts posting. The unified feed already reads every
container; only Ecency's own containers are written to (third-party deck
hosts like leothreads / liketu.moments are still used as requested).

- wave-hosts: add hive.flow + ECENCY_WAVES_HOSTS + isEcencyWavesHost
- use-wave-create: resolve the preferred live container at submit time
- use-waves-api: hive.flow waves get the dedicated wave-* permlink too
- use-wave-submit: reflect the resolved container on the created item
- add unit test for the host priority + predicate
@coderabbitai

coderabbitai Bot commented Jun 24, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Walkthrough

Adds WaveHosts.Flow (hive.flow) to the enum, exports ECENCY_WAVES_HOSTS (ordered [Flow, Waves]) and isEcencyWavesHost predicate. Wave creation now iterates ECENCY_WAVES_HOSTS to resolve the first live container at submit time. Consumers (use-waves-api, use-wave-submit) are updated to use the predicate and the resolved host.

Changes

Ecency Wave Host Resolution

Layer / File(s) Summary
WaveHosts enum extension and isEcencyWavesHost predicate
apps/web/src/features/waves/enums/wave-hosts.ts, apps/web/src/specs/features/waves/wave-hosts.spec.ts
WaveHosts gains Flow = "hive.flow"; ECENCY_WAVES_HOSTS exports an ordered readonly array [Flow, Waves]; isEcencyWavesHost exports a membership predicate; tests assert host ordering and predicate behavior for valid, third-party, and null inputs.
mutationFn host resolution in use-wave-create
apps/web/src/features/waves/components/wave-form/api/use-wave-create.ts
mutationFn routes dbuzz through communityBasedApiRequest; for Ecency hosts, iterates ECENCY_WAVES_HOSTS, fetches each candidate's latest post, and selects the first with entries as resolvedHost; throws lastError or an i18n error when no candidate succeeds; generalApiRequest uses resolvedHost and returns { host: resolvedHost, entry }.
Consumer updates: use-waves-api, use-wave-submit, and wave-form comment
apps/web/src/features/waves/components/wave-form/api/use-waves-api.ts, apps/web/src/features/waves/hooks/use-wave-submit.ts, apps/web/src/features/waves/components/wave-form/index.tsx
use-waves-api replaces a literal "ecency.waves" check with isEcencyWavesHost for the wave-* permlink scheme; use-wave-submit assigns threadItem.host from created.host ?? host only when not editing; inline comment in wave-form is updated to describe the deferred host resolution.

Sequence Diagram(s)

sequenceDiagram
  participant WaveForm
  participant useWaveSubmit
  participant useWaveCreate as mutationFn (use-wave-create)
  participant ECENCY_WAVES_HOSTS
  participant HiveAPI

  WaveForm->>useWaveSubmit: submit wave
  useWaveSubmit->>useWaveCreate: create({ host, body, ... })
  useWaveCreate->>ECENCY_WAVES_HOSTS: iterate candidates [hive.flow, ecency.waves]
  loop each candidate
    useWaveCreate->>HiveAPI: fetchLatestPost(candidate)
    HiveAPI-->>useWaveCreate: entries[] or error
  end
  useWaveCreate->>HiveAPI: generalApiRequest(resolvedHost, entry)
  HiveAPI-->>useWaveCreate: WaveEntry
  useWaveCreate-->>useWaveSubmit: { host: resolvedHost, entry }
  useWaveSubmit->>useWaveSubmit: threadItem.host = created.host ?? host
  useWaveSubmit-->>WaveForm: updated threadItem
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

  • ecency/vision-next#1005: Touches the same use-wave-create onSuccess cache-update logic, including the author+permlink alreadyPresent check that is also reformatted in this PR.

Suggested labels

patch

🐇 A rabbit hops through the streams,
Sniffing hive.flow before ecency.waves it seems!
If the first host blooms with posts,
The wave lands there — no need for ghosts.
isEcencyWavesHost guards the gate,
So every wave finds the right state! 🌊

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the main change: preferring hive.flow with ecency.waves as a fallback for wave publishing.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feature/waves-hive-flow-host

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: a304a586bc

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

threadItem = created.entry;
// create() resolves the actual container (hive.flow vs ecency.waves);
// reflect that on the item rather than the requested host.
threadItem.host = created.host ?? host;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Preserve the original host when saving edits

When this path is saving an existing wave (editingEntry is set), create() can now return the resolved write host instead of the entry's actual host. Once hive.flow has a live anchor, editing an older ecency.waves wave still broadcasts against the original parent from editingEntry.parent_author/parent_permlink, but this assignment relabels the returned object as hive.flow; use-waves-api has already placed that same object in the entry cache via updateEntryQueryData, so the cached edited wave can end up under the wrong host. Only overwrite with created.host for new waves, or preserve editingEntry.host for edits.

Useful? React with 👍 / 👎.

@greptile-apps

greptile-apps Bot commented Jun 24, 2026

Copy link
Copy Markdown

Greptile Summary

This PR aligns the web wave write path with the mobile app by introducing hive.flow as the preferred publish container, falling back to ecency.waves. At submit time, use-wave-create walks ECENCY_WAVES_HOSTS and picks the first container that has a live anchor post, so there is no behavioral change today (hive.flow is inert) but the switch will happen automatically once it starts posting.

  • wave-hosts.ts: Adds WaveHosts.Flow, the ordered ECENCY_WAVES_HOSTS constant, and the isEcencyWavesHost predicate, all backed by a new unit test.
  • use-wave-create.ts: Iterates ECENCY_WAVES_HOSTS to resolve the real container, threads resolvedHost through the mutation result, and updates the wavesFeed and wavesByHost caches on success.
  • use-waves-api.ts / use-wave-submit.ts: Extended the wave-* permlink scheme to all Ecency-owned containers and propagate the resolved host onto the created item.

Confidence Score: 5/5

Safe to merge — no behavioral change today since hive.flow is inert, and the fallback to ecency.waves is the same path as before.

The host resolution loop is correct for both the current state and the future state. The permlink scheme, cache prepend, and host propagation all look correct. The stale-deck issue noted in prior review threads is a known trade-off, not a new bug introduced here.

use-wave-create.ts is the most logic-dense file — specifically the onSuccess cache update, which only invalidates the resolved host's deck key and not the originally-requested one.

Important Files Changed

Filename Overview
apps/web/src/features/waves/enums/wave-hosts.ts Adds WaveHosts.Flow enum value, ECENCY_WAVES_HOSTS ordered array, and isEcencyWavesHost predicate. Clean and well-documented.
apps/web/src/features/waves/components/wave-form/api/use-wave-create.ts Adds host resolution loop at submit time. The onSuccess handler updates wavesByHost(resolvedHost) only — the originally-requested ecency.waves deck key is not updated when hive.flow becomes the resolved host, which can leave that view stale. (Previously flagged in outside-diff comments.)
apps/web/src/features/waves/components/wave-form/api/use-waves-api.ts Extends the wave-* permlink scheme to all Ecency-owned containers via isEcencyWavesHost. Logic is correct and formatting-only changes are clean.
apps/web/src/features/waves/hooks/use-wave-submit.ts Correctly propagates the resolved host onto the created WaveEntry for new waves, and correctly skips relabelling for edits.
apps/web/src/features/waves/components/wave-form/index.tsx Comment-only update explaining the new resolution behaviour. No logic changes.
apps/web/src/specs/features/waves/wave-hosts.spec.ts New unit tests cover ECENCY_WAVES_HOSTS ordering and isEcencyWavesHost predicate for all boundary cases.

Sequence Diagram

%%{init: {'theme': 'neutral'}}%%
sequenceDiagram
    participant User
    participant useWaveSubmit
    participant useWaveCreate
    participant QueryClient
    participant HiveAPI

    User->>useWaveSubmit: "submit wave (host=ecency.waves)"
    useWaveSubmit->>useWaveCreate: "create({ host, raw })"

    note over useWaveCreate: isEcencyWavesHost(host) = true
    loop for candidate in [hive.flow, ecency.waves]
        useWaveCreate->>QueryClient: fetchQuery(getAccountPostsQueryOptions(candidate))
        QueryClient->>HiveAPI: GET account posts for candidate
        alt candidate has posts
            HiveAPI-->>QueryClient: entries[]
            QueryClient-->>useWaveCreate: "entries (length > 0)"
            note over useWaveCreate: resolvedHost = candidate, entry = entries[0], break
        else empty or throws
            HiveAPI-->>QueryClient: [] or error
            note over useWaveCreate: save lastError, continue to next
        end
    end

    useWaveCreate->>HiveAPI: generalApiRequest(resolvedHost, entry)
    HiveAPI-->>useWaveCreate: WaveEntry
    useWaveCreate-->>useWaveSubmit: "{ host: resolvedHost, entry, isEditing }"

    useWaveSubmit->>useWaveSubmit: "threadItem.host = created.host"
    useWaveSubmit-->>User: WaveEntry

    note over useWaveCreate: onSuccess handler
    useWaveCreate->>QueryClient: setQueryData(wavesFeed, prepend)
    useWaveCreate->>QueryClient: setQueryData(wavesByHost(resolvedHost), prepend)
Loading
%%{init: {'theme': 'base', 'themeVariables': {"darkMode": true, "background": "#0d1117", "primaryColor": "#21262d", "primaryTextColor": "#e6edf3", "primaryBorderColor": "#8b949e", "lineColor": "#8b949e", "textColor": "#e6edf3", "edgeLabelBackground": "#161b22", "actorBkg": "#21262d", "actorBorder": "#8b949e", "actorTextColor": "#e6edf3", "actorLineColor": "#8b949e", "signalColor": "#8b949e", "signalTextColor": "#e6edf3", "noteBkgColor": "#373320", "noteBorderColor": "#d4a72c", "noteTextColor": "#f0e6c0", "labelBoxBkgColor": "#21262d", "labelBoxBorderColor": "#8b949e", "labelTextColor": "#e6edf3", "loopTextColor": "#e6edf3", "activationBkgColor": "#30363d", "activationBorderColor": "#8b949e"}}}%%
sequenceDiagram
    participant User
    participant useWaveSubmit
    participant useWaveCreate
    participant QueryClient
    participant HiveAPI

    User->>useWaveSubmit: "submit wave (host=ecency.waves)"
    useWaveSubmit->>useWaveCreate: "create({ host, raw })"

    note over useWaveCreate: isEcencyWavesHost(host) = true
    loop for candidate in [hive.flow, ecency.waves]
        useWaveCreate->>QueryClient: fetchQuery(getAccountPostsQueryOptions(candidate))
        QueryClient->>HiveAPI: GET account posts for candidate
        alt candidate has posts
            HiveAPI-->>QueryClient: entries[]
            QueryClient-->>useWaveCreate: "entries (length > 0)"
            note over useWaveCreate: resolvedHost = candidate, entry = entries[0], break
        else empty or throws
            HiveAPI-->>QueryClient: [] or error
            note over useWaveCreate: save lastError, continue to next
        end
    end

    useWaveCreate->>HiveAPI: generalApiRequest(resolvedHost, entry)
    HiveAPI-->>useWaveCreate: WaveEntry
    useWaveCreate-->>useWaveSubmit: "{ host: resolvedHost, entry, isEditing }"

    useWaveSubmit->>useWaveSubmit: "threadItem.host = created.host"
    useWaveSubmit-->>User: WaveEntry

    note over useWaveCreate: onSuccess handler
    useWaveCreate->>QueryClient: setQueryData(wavesFeed, prepend)
    useWaveCreate->>QueryClient: setQueryData(wavesByHost(resolvedHost), prepend)
Loading

Reviews (2): Last reviewed commit: "fix(waves): address review feedback on h..." | Re-trigger Greptile

- use-wave-create: don't swallow the fallback (ecency.waves) container's
  errors. Tolerate hive.flow (pre-provisioned/inert) failures but remember the
  last error and rethrow it when nothing resolves, so a real RPC outage shows
  the underlying error instead of the generic "no host" message.
- use-wave-submit: only relabel the item's host with the resolved container for
  NEW waves. Edits keep their existing host (created.entry is the edited entry),
  so an edited ecency.waves wave isn't mislabeled hive.flow once it goes live.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@apps/web/src/features/waves/components/wave-form/api/use-wave-create.ts`:
- Around line 56-86: Clear the stale fallback error state in use-wave-create
after a successful fetch probe. In the isEcencyWavesHost(host) loop, if
queryClient.fetchQuery succeeds but returns no entries, reset lastError so a
previous hive.flow failure is not rethrown later. Keep the retry logic around
ECENCY_WAVES_HOSTS, but only throw lastError when the final attempted host
actually failed; otherwise fall back to the no-threads-host error.

In `@apps/web/src/features/waves/hooks/use-wave-submit.ts`:
- Around line 106-108: The reply host is being taken from the composer default
instead of the parent thread, so optimistic reply state can be assigned to the
wrong host-scoped cache. Update use-wave-submit’s reply-building logic to derive
host from the parent thread or existing reply context in threadItem, and only
fall back to the composer host for new top-level waves; also review wave-form’s
threadHost passthrough so replies don’t override the parent host.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: a9c7fd60-b702-4a54-a38d-537585d19b84

📥 Commits

Reviewing files that changed from the base of the PR and between b9ea4ce and ef22822.

📒 Files selected for processing (6)
  • apps/web/src/features/waves/components/wave-form/api/use-wave-create.ts
  • apps/web/src/features/waves/components/wave-form/api/use-waves-api.ts
  • apps/web/src/features/waves/components/wave-form/index.tsx
  • apps/web/src/features/waves/enums/wave-hosts.ts
  • apps/web/src/features/waves/hooks/use-wave-submit.ts
  • apps/web/src/specs/features/waves/wave-hosts.spec.ts

Comment on lines +56 to 86
if (isEcencyWavesHost(host)) {
for (const candidate of ECENCY_WAVES_HOSTS) {
try {
const entries = await queryClient.fetchQuery(
getAccountPostsQueryOptions(candidate, ProfileFilter.posts)
);
if (entries && entries.length > 0) {
resolvedHost = candidate;
entry = entries[0];
break;
}
} catch (e) {
// hive.flow is pre-provisioned and may not resolve yet, so tolerate
// its failure and try the next preferred container. Remember the
// error so a genuine outage on the fallback (ecency.waves) is
// surfaced rather than masked as a missing host.
lastError = e;
}
}
} else {
const hostEntries = await queryClient.fetchQuery(
getAccountPostsQueryOptions(host, ProfileFilter.posts)
);
entry = hostEntries?.[0];
}

if (!entry) {
if (lastError) {
throw lastError;
}
throw new Error(i18next.t("decks.threads-form.no-threads-host"));

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Clear stale fallback errors after a successful probe.

If hive.flow throws and a later candidate fetch succeeds but returns no entries, Line 83 still rethrows the old hive.flow error. That turns a real “no live host” case into a misleading RPC failure. Reset lastError on any successful fetch that returns an empty list, or only rethrow when the final attempted host actually failed.

Suggested fix
       if (isEcencyWavesHost(host)) {
         for (const candidate of ECENCY_WAVES_HOSTS) {
           try {
             const entries = await queryClient.fetchQuery(
               getAccountPostsQueryOptions(candidate, ProfileFilter.posts)
             );
             if (entries && entries.length > 0) {
               resolvedHost = candidate;
               entry = entries[0];
               break;
             }
+            lastError = undefined;
           } catch (e) {
             // hive.flow is pre-provisioned and may not resolve yet, so tolerate
             // its failure and try the next preferred container. Remember the
             // error so a genuine outage on the fallback (ecency.waves) is
             // surfaced rather than masked as a missing host.
             lastError = e;
           }
         }
       } else {
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
if (isEcencyWavesHost(host)) {
for (const candidate of ECENCY_WAVES_HOSTS) {
try {
const entries = await queryClient.fetchQuery(
getAccountPostsQueryOptions(candidate, ProfileFilter.posts)
);
if (entries && entries.length > 0) {
resolvedHost = candidate;
entry = entries[0];
break;
}
} catch (e) {
// hive.flow is pre-provisioned and may not resolve yet, so tolerate
// its failure and try the next preferred container. Remember the
// error so a genuine outage on the fallback (ecency.waves) is
// surfaced rather than masked as a missing host.
lastError = e;
}
}
} else {
const hostEntries = await queryClient.fetchQuery(
getAccountPostsQueryOptions(host, ProfileFilter.posts)
);
entry = hostEntries?.[0];
}
if (!entry) {
if (lastError) {
throw lastError;
}
throw new Error(i18next.t("decks.threads-form.no-threads-host"));
if (isEcencyWavesHost(host)) {
for (const candidate of ECENCY_WAVES_HOSTS) {
try {
const entries = await queryClient.fetchQuery(
getAccountPostsQueryOptions(candidate, ProfileFilter.posts)
);
if (entries && entries.length > 0) {
resolvedHost = candidate;
entry = entries[0];
break;
}
lastError = undefined;
} catch (e) {
// hive.flow is pre-provisioned and may not resolve yet, so tolerate
// its failure and try the next preferred container. Remember the
// error so a genuine outage on the fallback (ecency.waves) is
// surfaced rather than masked as a missing host.
lastError = e;
}
}
} else {
const hostEntries = await queryClient.fetchQuery(
getAccountPostsQueryOptions(host, ProfileFilter.posts)
);
entry = hostEntries?.[0];
}
if (!entry) {
if (lastError) {
throw lastError;
}
throw new Error(i18next.t("decks.threads-form.no-threads-host"));
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@apps/web/src/features/waves/components/wave-form/api/use-wave-create.ts`
around lines 56 - 86, Clear the stale fallback error state in use-wave-create
after a successful fetch probe. In the isEcencyWavesHost(host) loop, if
queryClient.fetchQuery succeeds but returns no entries, reset lastError so a
previous hive.flow failure is not rethrown later. Keep the retry logic around
ECENCY_WAVES_HOSTS, but only throw lastError when the final attempted host
actually failed; otherwise fall back to the no-threads-host error.

Comment on lines +106 to +108
if (host) {
threadItem.host = host;
}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

Derive reply host from the parent thread, not the composer default.

Line 106 overwrites every reply with the requested threadHost, but apps/web/src/features/waves/components/wave-form/index.tsx Lines 282-289 pass that local-storage value even for replies. Once new waves start resolving to hive.flow, replies to those threads can still be labeled ecency.waves here, which risks pushing optimistic reply state into the wrong host-scoped caches/UI. Use the reply’s existing/parent host as the source of truth and only fall back to the composer host for new top-level waves.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@apps/web/src/features/waves/hooks/use-wave-submit.ts` around lines 106 - 108,
The reply host is being taken from the composer default instead of the parent
thread, so optimistic reply state can be assigned to the wrong host-scoped
cache. Update use-wave-submit’s reply-building logic to derive host from the
parent thread or existing reply context in threadItem, and only fall back to the
composer host for new top-level waves; also review wave-form’s threadHost
passthrough so replies don’t override the parent host.

@feruzm
feruzm merged commit 7984905 into develop Jun 24, 2026
6 checks passed
@feruzm
feruzm deleted the feature/waves-hive-flow-host branch June 24, 2026 12:54
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