Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion client/VENDORING.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ source is the pair a bisect wants:
The tree's current recorded state — sha256-of-sha256s over every git-tracked
file under `client/` except this one:

**state digest:** `431f8d9fe4b49372d84ee47c72a322fdae703dd77b3648e680e3a65a46b881f3`
**state digest:** `f8cb1c47d7ab2cddc8187bab5bfd06f746b705d505f90a0848ffaa6f0b10500c`

`packaging/check_vendoring.py` asserts it on every push, and refuses any
tracked file matching a §2 never-vendor class. **Any commit that touches
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -514,6 +514,11 @@ fun CIRISApp(
// Peer detail (parameterised) goes back to the peer list, not the hub
is Screen.NetworkPeerDetail -> Screen.NetworkPeers

// Sub-screens of layer hubs
is Screen.EnvironmentInfo -> Screen.LayerLocalCommunity
is Screen.Delegation -> Screen.LayerFamily
is Screen.Constitutional -> Screen.LayerGlobalCommons

// Contacts goes back to the picker source (Delegations) or home
is Screen.Contacts -> {
val src = contactsPickerSourceScreen
Expand Down Expand Up @@ -4144,7 +4149,7 @@ fun CIRISApp(
PlatformLogger.i("CIRISApp", "[Screen.EnvironmentInfo] User triggered refresh")
environmentInfoViewModel.refresh()
},
onNavigateBack = { currentScreen = Screen.Interact },
onNavigateBack = { currentScreen = Screen.LayerLocalCommunity },

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 Route compact back actions to the layer hubs

On compact windows these screens suppress their own onNavigateBack buttons in favor of the shell, so updating only this callback does not establish the new hierarchy: the shell still maps EnvironmentInfo back to Interact, omits Delegation and Constitutional from backTarget, and the platform handler falls them back to homeTarget. Users entering from Local Community, Family, or Global Commons therefore cannot return to that parent through the normal compact back action; update both shared back mappings for the three routes.

Useful? React with 👍 / 👎.

onCategorySelected = { category ->
PlatformLogger.d("CIRISApp", "[Screen.EnvironmentInfo] Category selected: $category")
environmentInfoViewModel.setCategory(category)
Expand Down Expand Up @@ -4402,12 +4407,33 @@ fun CIRISApp(
)
}
Screen.Delegation -> {
val delegationsList by delegationsViewModel.delegations.collectAsState()
val isDelegationsLoading by delegationsViewModel.loading.collectAsState()
ai.ciris.mobile.shared.ui.screens.federation.DelegationScreen(
delegations = delegationsList,
isLoading = isDelegationsLoading,
onRefresh = { delegationsViewModel.refresh() },
onNavigateBack = { currentScreen = Screen.LayerFamily },
onManageDeviceGrants = { currentScreen = Screen.Delegations },
onIssueClick = { url -> uriHandler.openUri(url) },
)
}
Screen.Constitutional -> {
val accordFamily by accordViewModel.family.collectAsState()
val accordHolders by accordViewModel.holders.collectAsState()
val accordThreshold by accordViewModel.holderThreshold.collectAsState()
val accordHaltStatus by accordViewModel.haltStatus.collectAsState()
val isAccordLoading by accordViewModel.loading.collectAsState()
ai.ciris.mobile.shared.ui.screens.federation.ConstitutionalScreen(
family = accordFamily,
holders = accordHolders,
holderThreshold = accordThreshold,
haltStatus = accordHaltStatus,
isLoading = isAccordLoading,
onRefresh = { accordViewModel.refresh() },
onNavigateBack = { currentScreen = Screen.LayerGlobalCommons },
onOpenAccordCeremony = { currentScreen = Screen.AccordCeremony },
onOpenProvisionHolder = { currentScreen = Screen.ProvisionAccordHolder },
onIssueClick = { url -> uriHandler.openUri(url) },
)
}
Expand Down Expand Up @@ -4491,18 +4517,24 @@ fun CIRISApp(
// ── 2.9.4 — CEG 0.6 layer hubs (Identities · Trust · Policies) ──
Screen.LayerAgent -> ai.ciris.mobile.shared.ui.screens.commons.LayerHubScreen(
scope = ai.ciris.mobile.shared.ui.nav.CohortScope.AGENT,
hasAgent = clientMode?.isAgent ?: false,
onIssueClick = { url -> uriHandler.openUri(url) },
)
Screen.LayerFamily -> ai.ciris.mobile.shared.ui.screens.commons.LayerHubScreen(
scope = ai.ciris.mobile.shared.ui.nav.CohortScope.FAMILY,
hasAgent = clientMode?.isAgent ?: false,
onOpenDelegations = { currentScreen = Screen.Delegation },
onIssueClick = { url -> uriHandler.openUri(url) },
)
Screen.LayerLocalCommunity -> ai.ciris.mobile.shared.ui.screens.commons.LayerHubScreen(
scope = ai.ciris.mobile.shared.ui.nav.CohortScope.LOCAL_COMMUNITY,
hasAgent = clientMode?.isAgent ?: false,
onOpenEnvironment = { currentScreen = Screen.EnvironmentInfo },
onIssueClick = { url -> uriHandler.openUri(url) },
)
Screen.LayerGlobalCommunities -> ai.ciris.mobile.shared.ui.screens.commons.LayerHubScreen(
scope = ai.ciris.mobile.shared.ui.nav.CohortScope.GLOBAL_COMMUNITIES,
hasAgent = clientMode?.isAgent ?: false,
onIssueClick = { url -> uriHandler.openUri(url) },
)
// Screen.LayerGlobalCommons handled above alongside Screen.Network —
Expand Down Expand Up @@ -4619,6 +4651,10 @@ fun CIRISApp(
// iOS and web (where PlatformBackHandler is a
// no-op) leaves no way out of a chat at all.
is Screen.UserChat -> Screen.Contacts
// Layer hub sub-screens
Screen.EnvironmentInfo -> Screen.LayerLocalCommunity
Screen.Delegation -> Screen.LayerFamily
Screen.Constitutional -> Screen.LayerGlobalCommons
// Nested sub-screens → their direct parent
Screen.GraphMemory -> Screen.Memory
Screen.SkillStudio -> Screen.Adapters
Expand All @@ -4633,7 +4669,6 @@ fun CIRISApp(
Screen.Config,
Screen.Consent,
Screen.DataManagement,
Screen.EnvironmentInfo,
Screen.Help,
Screen.LLMSettings,
Screen.Logs,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -301,7 +301,6 @@ sealed class NavSurface(
/** Self — the agent itself. Implicit in the user's mental model. */
object LayerAgent : NavSurface(
id = "layer-agent", label = "Agent (Self)", icon = CIRISIcons.person,
gate = SubstrateGate.EDGE_PEERRESOLVER,
labelKey = "commons.layer.agent.title",
)

Expand All @@ -315,19 +314,16 @@ sealed class NavSurface(
)
object EnvironmentGraph : NavSurface(
// Ungated 2.9.6 — routes to the live EnvironmentInfo screen
// (/v1/memory?scope=environment). The cohort-overlay extension remains
// future work; the base environment view ships now.
// (/v1/memory?scope=environment). Reachable under Local Community.
id = "environment-graph", label = "Environment Graph", icon = CIRISIcons.snapshot,
labelKey = "commons.federation.environment_graph.title",
)
object Delegation : NavSurface(
id = "delegation", label = "Delegation", icon = CIRISIcons.send,
gate = SubstrateGate.PERSIST_DELEGATES_TO,
labelKey = "commons.federation.delegation.title",
)
object Constitutional : NavSurface(
id = "constitutional", label = "Constitutional", icon = CIRISIcons.instructions,
gate = SubstrateGate.REGISTRY_ACCORD_HOLDER,
labelKey = "commons.federation.constitutional.title",
)

Expand Down Expand Up @@ -367,31 +363,28 @@ sealed class NavSurface(
/** Other CIRIS occurrences sharing the operator's identity. */
object LayerFamily : NavSurface(
id = "layer-family", label = "Family", icon = CIRISIcons.home,
gate = SubstrateGate.EDGE_PEERRESOLVER,
children = listOf(Delegation),
labelKey = "commons.layer.family.title",
)

/** One home channel / Discord guild / household — locally-trusted peers. */
object LayerLocalCommunity : NavSurface(
id = "layer-local-community", label = "Local Community", icon = CIRISIcons.location,
gate = SubstrateGate.EDGE_PEERRESOLVER,
children = listOf(EnvironmentGraph),
labelKey = "commons.layer.local_community.title",
)

/** Cross-community affinity groups the agent has joined (CEG affiliations). */
object LayerGlobalCommunities : NavSurface(
id = "layer-global-communities", label = "Global Communities", icon = CIRISIcons.shield,
gate = SubstrateGate.EDGE_PEERRESOLVER,
children = listOf(Participate),
labelKey = "commons.layer.global_communities.title",
)

/** The federation as the universal layer (folds species + planet + federation). */
object LayerGlobalCommons : NavSurface(
id = "layer-global-commons", label = "Global Commons", icon = CIRISIcons.globe,
gate = SubstrateGate.EDGE_PEERRESOLVER,
children = listOf(EnvironmentGraph, Constitutional),
children = listOf(Constitutional),
labelKey = "commons.layer.global_commons.title",
)

Expand All @@ -418,41 +411,11 @@ enum class SubstrateGate(
val prefixFamily: String,
val fsdSection: String,
) {
VERIFY_ATTESTATION_LADDER(
repo = "CIRISVerify", issueNumber = 36,
prefixFamily = "attestation:l1..l5 + provenance:* + hardware_custody:*",
fsdSection = "FSD-002 §3.2",
),
PERSIST_DELEGATES_TO(
repo = "CIRISPersist", issueNumber = 104,
prefixFamily = "federation_directory:* + delegates_to (structural)",
fsdSection = "FSD-002 §3.3 + §2.2.1",
),
EDGE_PEERRESOLVER(
repo = "CIRISEdge", issueNumber = 22,
prefixFamily = "peer_reachability:* + ContentFetch + VerifiedEnvelope feed",
fsdSection = "FSD-002 §3.4 + §3.6.7",
),
NODECORE_NEEDS(
repo = "CIRISNodeCore", issueNumber = 12,
prefixFamily = "need:{domain}:{kind} (new primitive, in flight)",
fsdSection = "FSD-002 §3.6 (extension)",
),
LENSCORE_CAPACITY(
repo = "CIRISLensCore", issueNumber = 25,
prefixFamily = "capacity:core_identity..sustained_coherence:composite",
fsdSection = "FSD-002 §3.5.4",
),
LENSCORE_COHORT(
repo = "CIRISLensCore", issueNumber = 25,
prefixFamily = "manifold_conformity:{cohort} + detection:correlated_action:{axis} + detection:distributive:access:*",
fsdSection = "FSD-002 §3.5.2 + §3.5.3 + §3.5.5",
),
REGISTRY_ACCORD_HOLDER(
repo = "CIRISRegistry", issueNumber = 23,
prefixFamily = "accord:* (reserved to identity_type=accord_holder)",
fsdSection = "FSD-002 §3.9 + §4.1",
),
POST_SUBSTRATE_SUBSTITUTION(
repo = "CIRISAgent", issueNumber = 800,
prefixFamily = "client / relay / node peer taxonomy (post Step-4)",
Expand Down
Loading
Loading