Skip to content

fix: restore main — vendor pins, a missing fixture field, the console's channel wording, and the RoomView export - #2215

Merged
oxoxDev merged 11 commits into
tinyhumansai:mainfrom
oxoxDev:fix/vendor-pin-regression
Sep 10, 2026
Merged

oxoxDev merged 11 commits into
tinyhumansai:mainfrom
oxoxDev:fix/vendor-pin-regression

Conversation

@oxoxDev

@oxoxDev oxoxDev commented Sep 10, 2026

Copy link
Copy Markdown
Collaborator

Summary

main is red and has been since 02:51 IST today. Four separate breakages arrived across three merges, and each merge landed on an already-red main, so the later failures masked the earlier ones. This restores every lane.

The four, oldest first:

1. A CompanyRecord fixture missing a field. The hive-crossing work added overlay_desk_hive and updated every construction site but one, which sits behind #[cfg(test)] — so it compiles under --lib and fails the lib-test build. The Rust job's Test step has been red since that merge.

2. The console's channel pre-flight and the host's refusal stopped saying the same thing. When Workflows became Automations, the console's client-side pre-flight was reworded to is not an automation delivery channel and the host was left saying workflow. These are the same sentence to an author — read once when the guard trips at save, again on a failed delivery row — and there is a test that reads the dialog file precisely so the two cannot be reworded apart. It fired, correctly, and named both remedies.

3. Both vendored submodule pins reverted while Cargo.lock kept the newer versions. The hive-console merge resolved vendor/openhuman and vendor/tinyhivemind to their pre-bump commits; the lock still requires openhuman 0.63.24, and the tree pinned 0.63.23. Every cargo lane passes --locked, so all of them failed at Verify Cargo.lock is in sync — before reaching a compiler, which is why breakage 1 stopped being visible.

4. The console build lost its RoomView export and thirteen imports. The hive-console branch renamed views/chat/* to views/room/* and ChatView to RoomView; mainline kept editing the old names in parallel. The merge kept the new filename and resolved the file's contents to mainline's pre-rename version, so RoomView.tsx had the right name and the wrong insides. Every TS7006 implicit-any in app-shell.tsx was downstream of that: once the components resolved to any, TSX lost contextual typing for the callbacks passed into them. Fixing the export and the import paths made all sixteen disappear — no annotations were added, and nothing was cast or ignored.

API Or Behavior Changes

One operator-visible string changes: a channel destination that names something undeliverable is now refused with is not an automation delivery channel rather than … a workflow delivery channel, matching what the console already shows. Internal type, module and route names stay workflow.

Nothing else changes behaviour. The submodule pins are restored to the commits the bump landed, not moved forward.

Tests

  • cargo fmt --all -- --check
  • cargo clippy --all-targets -- -D warnings — run as --no-deps, which the vendored tree requires
  • cargo build --all-targets — covered by cargo check --locked --lib, which is what proves the lock fix
  • cargo testcargo test --locked --lib: 5019 passed, 0 failed, up from 5018/1

Also run:

  • cargo check --locked --lib — rc=0. This is the gate that was failing on main.
  • frontend: npm run build — rc=0, no error TS. npm run typecheck, typecheck:unit, typecheck:e2e — all rc=0.
  • scripts/ci/assert-design-tokens.sh, scripts/ci/assert-single-tauri-app.sh — rc=0.

Documentation

None needed — no interface or contract changed. The one reworded sentence is operator-facing copy, and the test that pins it to the console now passes with both sides saying the same thing.

Related

Restores main after the breakages introduced in #2206, #2214 and #2166.

One thing found while fixing #4 is deliberately not in this PR: frontend/src/views/chat/model.ts and frontend/src/views/room/{channels,timeline,review}.ts are duplicate copies of the same logic that both survived the merge and have divergedchat/model.ts's buildChannels lists every teammate in the DM section without a transcript, room/channels.ts's still filters them out. RoomView.tsx imports the correct one, so production is right; frontend/test/unit/chat-direct-messages.test.ts imports the stale one and is the single vitest failure on main (5225 passed, 1 failed). It predates this merge — git diff 339b69ea9 HEAD -- frontend/src/views/room/channels.ts is empty.

Repointing RoomView.tsx at room/model would turn that test green and silently regress the DM list in production, so it is not done here. It needs a delete-or-reconcile decision on the duplication, not a patch.

Summary by CodeRabbit

  • New Features

    • Added authorized GET, PUT, and DELETE endpoints for managing a desk’s installed move grammar, including fallback to the default configuration.
    • Direct messages now list every teammate, including those without prior conversations, with consistent alphabetical ordering when activity is tied.
  • Refactor

    • Renamed the chat interface to RoomView and updated related navigation and component references.
    • Updated member-management and timeline references to use room terminology consistently.
  • Bug Fixes

    • Clarified delivery validation messages by referring to automation delivery channels consistently.

…ge reverted

The hive-console merge resolved both vendored gitlinks to the pre-bump side while keeping Cargo.lock on openhuman 0.63.24, so the tree pinned 0.63.23 and the lock demanded 0.63.24.

Every cargo lane passes --locked, so all of them failed to build with 'cannot update the lock file': Rust, Rust (mail), Rust (mongodb), Rust (openhuman, tinymemory) and Gated host binary have been red on main since that merge.
The hive-crossing work added overlay_desk_hive to CompanyRecord and updated every construction site but this one, which sits behind #[cfg(test)] and so compiles under --lib while failing the lib-test build.

The Rust job's Test step has been red on main since that merge; the later Cargo.lock breakage then masked it, because the lanes stopped reaching the compile at all.
The console's client-side pre-flight was reworded to 'is not an automation delivery channel' when Workflows became Automations, and the host's refusal was left saying 'workflow'. The two are the same sentence to an author who trips the guard at save and reads it again on a failed delivery, and the coupling test that reads the dialog file has been red on main since that merge.

The operator-readable sentence follows the product's vocabulary; the internal type and module names stay workflow.
The chat->room component consolidation (5a9afe6) moved AddMemberDialog,
ChannelRail, ChatHeader, MessageComposer and friends from views/chat/ to
views/room/, and renamed ChatView.tsx to RoomView.tsx with its export
function renamed to match. Merging upstream/main's parallel ChatView.tsx
edits (PR tinyhumansai#2214) back into that branch reintroduced the pre-rename import
paths and the ChatView export name, since main had kept editing the file
under its old name and shape. Point the imports back at views/room/ and
export RoomView again, matching every other reference in the tree (tests,
app-shell.tsx) that already expects it.
Same chat->room move as RoomView.tsx: the shared AddMemberDialog now lives
under views/room/, but TeamView.tsx's import still named the old
views/chat/ path, which no longer exists.
Same collision as the production component: this test still imported and
rendered the pre-rename ChatView from views/ChatView, which no longer
exists post-consolidation.
ReferralChip and ReferralConversation live under views/room/StepTimeline
post-consolidation; the test still named the removed views/chat/ path.
@coderabbitai

coderabbitai Bot commented Sep 10, 2026

Copy link
Copy Markdown

Review Change StackReview Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Advanced

Run ID: 0b800351-9a4e-4439-b5f6-914683522081

📥 Commits

Reviewing files that changed from the base of the PR and between 63e0d44 and 5233d5b.

📒 Files selected for processing (6)
  • frontend/src/views/RoomView.tsx
  • frontend/src/views/chat/model.ts
  • frontend/src/views/company/DeskCreateDialog.tsx
  • frontend/src/views/room/channels.ts
  • frontend/test/unit/desk-create-lead.test.ts
  • frontend/test/unit/live-frame-thread-key.test.ts
💤 Files with no reviewable changes (1)
  • frontend/src/views/chat/model.ts

Included review availability: Your plan provides up to 2 included reviews per hour; 1 remains after this review.


📝 Walkthrough

Walkthrough

The frontend renames ChatView to RoomView, updates room module references, and lists all roster direct messages. Runtime and server contracts use “automation delivery channel” wording. Desk hive authorization coverage and fixtures are added. Vendor pointers advance.

Changes

Frontend room migration

Layer / File(s) Summary
Rename RoomView and repoint imports
frontend/src/views/RoomView.tsx, frontend/src/views/TeamView.tsx
The component, imports, comments, and debug prefixes now use RoomView and room module paths.
Relocate room model and channel logic
frontend/src/views/chat/model.ts, frontend/src/views/room/channels.ts, frontend/src/views/company/..., frontend/test/unit/...
The chat model is removed. Room channel construction lists every roster teammate and uses a name tiebreaker. Related references use room modules.
Update RoomView test references
frontend/test/unit/chat-readonly-composer.test.ts, frontend/test/unit/referral-crossing.test.ts
Tests now reference the renamed component and relocated timeline module.

Automation delivery wording

Layer / File(s) Summary
Update delivery refusal wording
src/runtime/channel.rs
The refusal message and direct tests now use “automation delivery channel.”
Align validation and delivery tests
src/company/..., src/harness/..., src/server/ops/..., src/workflows/delivery.rs
Related assertions and delivery fixtures now expect the updated wording.

Desk hive authorization coverage

Layer / File(s) Summary
Initialize desk hive fixtures
src/server/graphql/mod.rs, src/runtime/hivemind.rs, src/server/acp/transport.rs
Company fixtures now initialize overlay_desk_hive.
Add desk hive route authorization
tests/auth_matrix.rs, tests/snapshots/auth-matrix.txt
The matrix covers GET, PUT, and DELETE desk hive routes for both address forms and records role outcomes.

Vendor pointer updates

Layer / File(s) Summary
Advance vendor references
vendor/openhuman, vendor/tinyhivemind
Both vendor subproject references now point to newer commits.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Suggested reviewers: senamakel

Merge Risk: ⚪ Minimal · up to 5233d

This restores room exports and imports, aligns delivery refusal wording, repairs test fixtures, and updates vendored pins. No concrete current-head merge-blocking risk remains.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 66.67% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 18 functions across 17 files. 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 primary fixes: vendor pins, the missing fixture field, channel wording, and the RoomView export. It is specific and related to the changeset, although it lists several…
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.
  • Fix all pre-merge checks with AI

A rabbit reads each line,
The patch grows clear beneath the moon,
Small changes hop in place,
Tests guard the garden path,
Reviews bloom before the dawn.

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

@tinysweeper

tinysweeper Bot commented Sep 10, 2026

Copy link
Copy Markdown

How this change flows

2 changed behaviours across 5 relationships. 5 surrounding behaviours are shown (60 graph nodes walked). 63 further behaviours left out to keep the diagram readable.

flowchart LR
  n0["ChatView<br/>changed"]:::changed
  n1["Props<br/>changed"]:::changed
  n2["AppShell"]:::impacted
  n3["TeamView"]:::impacted
  n4["format"]:::impacted
  n5["graph"]:::impacted
  n6["send"]:::impacted
  n0 -->|uses| n1
  n0 -->|calls| n6
  n2 -->|uses| n3
  n5 -->|calls| n4
  n5 -->|tests| n4
  classDef changed fill:#0d4429,stroke:#238636,color:#e6edf3
  classDef impacted fill:#161b22,stroke:#6e7681,color:#c9d1d9
  classDef flagged fill:#5a1e02,stroke:#d93f0b,color:#ffffff
  classDef blocking fill:#67060c,stroke:#f85149,color:#ffffff
Loading

Green: changed behaviour. Grey: surrounding behaviour. Arrows name the call, use, implementation, or test relationship. Orange: has findings. Red: has a finding that blocks the merge.

tinysweeper 0.1.0

@tinysweeper tinysweeper 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.

tinysweeper found nothing blocking. Approving.

$0.0000 · 0 in / 0 out

@tinysweeper tinysweeper Bot added the priority: p3 Whenever. Cosmetic, a nicety, or a cleanup with no user visible effect. label Sep 10, 2026
…ay field

The same omission as the GraphQL fixture, in two literals that only compile under --features hivemind and --features acp. A default-feature cargo test never builds them, so the lanes that do went red while a local --lib run stayed green.
The hive work registered GET/PUT/DELETE {scope}/desks/{desk_id}/hive through the same scoped() helper every other operator route uses, without a matrix row, so the source-versus-matrix closure failed with unexpected=["/desks/{desk_id}/hive"].

The handlers take ScopedCompany, not require_admin, so the rows declare Access::Scoped like the sibling desk routes: anonymous 401, member/admin/owner permitted, temporary-password admin 403. Counts and the committed snapshot follow — 42 new cells, three methods across both address forms.
… ones already spoken to

The room module still filtered the DM section on a non-empty transcript, which made it an inbox: on a company nobody has DM'd yet it read 'Nothing here yet.' under the heading naming the one thing an operator most wants from a roster.

Ordering now carries what the filter used to — anyone with a transcript sorts first, most recent at the top, and untouched rows fall through to the name.
The hive-console branch split the monolithic chat/model.ts into room/{channels,timeline,review}.ts; mainline kept evolving the monolith; the merge kept both. Sixteen production files and thirty-odd specs import the room barrel, and RoomView alone still read the old copy — so the module the tests exercised was not the module the rail rendered, and the two had already drifted on how a DM is listed.

Deleting the leftover leaves one source for both.

@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: 5233d5b5d1

ℹ️ About Codex in GitHub

Codex has been enabled to automatically 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 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

// absent transcript, so untouched rows tie and fall through to the name — a
// stable order rather than roster order, which is the host's and can move
// under a reader.
const dms = directMessageChannels(members).sort((a, b) => {

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 Update the documented DM-rail contract

For every teammate without a transcript, this now adds a persistent rail row, but both this function's documentation (frontend/src/views/room/channels.ts:116-118) and the Room routing guide (frontend/src/views/room/README.md:17-19) still promise that the rail contains only conversations with at least one line and that New message exposes otherwise absent teammates. Update those contracts alongside this behavior so future callers and UI changes do not rely on the now-false active-conversations-only invariant.

Useful? React with 👍 / 👎.

@oxoxDev
oxoxDev merged commit 7806d4b into tinyhumansai:main Sep 10, 2026
19 of 21 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

priority: p3 Whenever. Cosmetic, a nicety, or a cleanup with no user visible effect.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant