Skip to content

feat(ui): NDO Layer 0 UI — Lobby-first architecture with group-scoped NDO management#108

Merged
TiberiusB merged 3 commits into
devfrom
feat/ndo-layer0-ui-102
May 20, 2026
Merged

feat(ui): NDO Layer 0 UI — Lobby-first architecture with group-scoped NDO management#108
TiberiusB merged 3 commits into
devfrom
feat/ndo-layer0-ui-102

Conversation

@Soushi888

@Soushi888 Soushi888 commented May 19, 2026

Copy link
Copy Markdown
Collaborator

Intent

Implements the MVP UI for NDO Layer 0 (issue #102): a Lobby-first navigation hierarchy where agents browse a federation-wide NDO registry, create and join Groups, and manage NDOs scoped to a Group. Integrates the Lobby DNA (#103) service layer into the frontend for the first time.

Changes

Lobby DNA integration

  • lobby.service: replaced localStorage stub with real zome_lobby calls (get_all_ndo_announcements, announce_ndo, upsert_lobby_agent_profile, get_lobby_agent_profile); all calls explicitly route to the lobby DNA role
  • zome-helpers: added optional roleName parameter to both wrapZomeCall helpers so services can target non-default DNA roles
  • lobby.store, group.store: switched from LobbyServiceLive to LobbyServiceResolved so HolochainClientServiceTag is satisfied at E.runSync time
  • services/index.ts: removed duplicate LobbyService* re-export

NDO lifecycle — seven creatable stages

  • Creation form restricts lifecycle_stage to the seven stages valid at registration (IdeationActive), sourced from the new CREATABLE_NDO_LIFECYCLE_STAGES constant in shared-types

shared-types package

  • Renamed GroupDescriptorGroupDescriptorStub in lobby.types.ts to match the Rust type name and eliminate the duplicate export that was shadowing the full GroupDescriptor (with ndoHashes, createdBy, memberProfile) in resource.types.ts

Miscellaneous type fixes

  • holochain.service: null guard on appInfo() return value
  • cell.manager: narrowed unknown for lobbyCell.provisioned
  • GroupProfileModal: double-cast LobbyUserProfile for dynamic field access

Decisions

Option Rejected because
Keep LobbyServiceLive unresolved in store Requires exposing HolochainClientServiceTag through mergeAll, which leaks an unsatisfied dependency and crashes E.runSync at module load
Default roleName to 'nondominium' for lobby calls The Lobby DNA is a separate cell; calling zome_lobby on the nondominium cell returns HTTP 500 from the conductor
Keep GroupDescriptor name in lobby.types Conflicts with the localStorage GroupDescriptor in resource.types; the Rust type is already named GroupDescriptorStub

How to test

# Inside nix shell
bun run start
  1. App loads without console errors
  2. Lobby view displays — NDO browser and group sidebar visible
  3. Create a Group → creates successfully and appears in sidebar
  4. Create an NDO within the group → NDO appears in the group view
  5. Lifecycle transition button works for own NDOs
  6. Lobby profile modal appears on first visit

Documentation

  • packages/shared-types/src/lobby.types.ts: GroupDescriptorGroupDescriptorStub (rename tracked in source)

Related

TiberiusB and others added 2 commits May 19, 2026 15:51
- Export CREATABLE_NDO_LIFECYCLE_STAGES and CreatableNdoLifecycleStage from shared-types
- NdoCreateModal: Ideation through Active; helper copy for mature/tool NDOs
- Sweettest: create at Stable; reject Hibernating at create
- Docs: ui_design.md NDO creation table; agent.md resource-face lifecycle guidance

Rebuilt shared-types locally for dist/ (gitignored); run packages/shared-types bun run build after pull.

Co-authored-by: Cursor <cursoragent@cursor.com>
…and Regen Farmers Mutual

- Introduced comprehensive documentation for the Digital Dairy Chain (DDC) and Regen Farmers Mutual (RFM), detailing their contexts, roles, and strategic initiatives.
- Synthesized public materials and project requirements to explore collaboration, farmer value, and business model alignment with the Nondominium project.
- Enhanced understanding of governance structures, economic events, and the integration of digital tools in the agricultural ecosystem.

These additions provide valuable insights into the operational frameworks and collaborative opportunities within the agricultural sector.
@Soushi888 Soushi888 marked this pull request as draft May 19, 2026 23:04
- lobby.store, group.store: use LobbyServiceResolved (was LobbyServiceLive)
  so HolochainClientServiceTag is satisfied and E.runSync succeeds
- zome-helpers: add optional roleName param to both wrapZomeCall helpers
- lobby.service: pass roleName='lobby' so calls route to the Lobby DNA cell
  instead of defaulting to 'nondominium' (caused HTTP 500 from conductor)
- shared-types lobby.types: rename GroupDescriptor -> GroupDescriptorStub
  (matches Rust type; eliminates duplicate export that shadowed the full
  GroupDescriptor in resource.types and broke 42 type-checks)
- services/index.ts: remove duplicate LobbyService* export (lines 12 & 20)
- holochain.service: null guard on appInfo() return value
- cell.manager: narrow unknown type for lobbyCell.provisioned
- lobby.service: add missing context arg to LobbyError.fromError
- GroupProfileModal: double-cast LobbyUserProfile for dynamic field access
@Soushi888 Soushi888 changed the title Feat/ndo layer0 UI 102 feat(ui): NDO Layer 0 UI — Lobby-first architecture with group-scoped NDO management May 20, 2026
@TiberiusB TiberiusB marked this pull request as ready for review May 20, 2026 00:17
@TiberiusB TiberiusB merged commit bf14446 into dev May 20, 2026
1 check passed
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.

feat(ui): NDO Layer 0 full UI integration: creation form, lifecycle transitions, categorical filters, transition history

2 participants