Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
56e946d
[issue-5500] feat: ship Eidoverse World Design V2
atomantic Aug 31, 2026
671c050
[issue-5500] fix: address review (claude): preserve upgrade state
atomantic Aug 31, 2026
217c860
[issue-5500] fix: address review (claude): preserve projected semantics
atomantic Aug 31, 2026
fba0a64
[issue-5500] fix: address review (claude): normalize legacy world ove…
atomantic Aug 31, 2026
c8b6be1
[issue-5500] fix: address review (claude): reconcile world controls
atomantic Aug 31, 2026
f99a3b0
[issue-5500] fix: address review (claude): preserve upgrade priorities
atomantic Aug 31, 2026
5cdc9d5
[issue-5500] fix: address review (claude): enforce projection contracts
atomantic Aug 31, 2026
6302a66
[issue-5500] fix: address review (claude): preserve attention signals
atomantic Aug 31, 2026
5e98ee0
[issue-5500] fix: address review (claude): converge customized worlds
atomantic Aug 31, 2026
2c092fd
[issue-5500] fix: address review (claude): stabilize custom world edi…
atomantic Aug 31, 2026
f92774f
[issue-5500] fix: address review (claude): harden world upgrades
atomantic Aug 31, 2026
7393068
[issue-5500] fix: address review (claude): enforce projection contracts
atomantic Aug 31, 2026
47b9073
[issue-5500] fix: address review (claude): secure migration pacing
atomantic Aug 31, 2026
819051c
[issue-5500] fix: address review (claude): clarify world state
atomantic Aug 31, 2026
e476395
[issue-5500] fix: address review (claude): verify boot reconciliation
atomantic Aug 31, 2026
fafc1cb
[issue-5500] fix: address review (claude): recover ownership cleanup
atomantic Aug 31, 2026
8cfbe53
[issue-5500] fix: address review (claude): harden world portability
atomantic Aug 31, 2026
0645611
[issue-5500] fix: address review (claude): balance stale signals
atomantic Aug 31, 2026
86c8552
[issue-5500] chore: regenerate Eidoverse route catalog
atomantic Aug 31, 2026
1946249
[issue-5500] test: make Eidoverse lifecycle paths portable
atomantic Aug 31, 2026
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
520 changes: 520 additions & 0 deletions client/src/components/eidoverse/EidoverseWorldDrawer.jsx

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions client/src/lib/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ grep -i "what you want to do" client/src/lib/README.md
```

| `navFeatures.js` | `filterNavByFeatures(navEntries, isFeatureEnabled)` — drops nav-manifest entries whose optional instance feature (`post`, `datadog`, `jira`, `gsd`) is off. The single gate for BROWSE surfaces (sidebar, ⌘K); routes stay reachable by URL, bookmark, and voice. Pair with `useInstanceFeatures`. |
| `eidoverseWorldReset.js` | Client reset-reconciliation maps for Eidoverse source kinds and district asset slots; parity-tested against the authoritative server world-design contracts. |
| `postQuickSession.js` | Pure Quick POST duration presets, local-observation estimator, deterministic budget composer, and preview metadata. |
| `postRotation.js` | Pure deterministic day-based rotation for POST practice selection — `orderByRecencyRotation` sorts candidates fresh-before-recently-practiced, then by priority, and rotates equivalent ones by local day. Mirrored from `server/lib/postRotation.js`. |

Expand Down
35 changes: 35 additions & 0 deletions client/src/lib/eidoverseWorldReset.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
export const EIDOVERSE_SOURCE_KIND = Object.freeze({
apps: 'app',
agents: 'agent',
tasks: 'task',
features: 'feature',
peers: 'peer',
health: 'health',
productivity: 'productivity',
activity: 'activity',
goals: 'goal',
memory: 'memory',
storage: 'storage',
jira: 'jira',
operations: 'operations',
});

export const EIDOVERSE_RESET_ASSET_SLOTS = Object.freeze({
nexus: Object.freeze(['nexus', 'health', 'operations', 'feature', 'district']),
apps: Object.freeze(['app']),
agents: Object.freeze(['agent', 'task']),
goals: Object.freeze(['goal', 'jira']),
memory: Object.freeze(['memory']),
data: Object.freeze(['storage']),
federation: Object.freeze(['peer']),
activity: Object.freeze(['activity', 'productivity']),
});

const CUSTOM_DISTRICT_ASSET_SLOTS = Object.freeze(['district']);

export function eidoverseResetAssetSlotsForDistrict(districtId, sources = []) {
return [...new Set([
...(EIDOVERSE_RESET_ASSET_SLOTS[districtId] || CUSTOM_DISTRICT_ASSET_SLOTS),
...sources.map((source) => EIDOVERSE_SOURCE_KIND[source]).filter(Boolean),
])];
}
1 change: 1 addition & 0 deletions client/src/lib/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ export * from './catalogTypes.js';
export * from './creativeDirectorPlan.js';
export * from './creativeDirectorPreview.js';
export * from './editorialRoadmap.js';
export * from './eidoverseWorldReset.js';
export * from './federatedMediaReadiness.js';
export * from './fableLoomReadiness.js';
export * from './glbFailure.js';
Expand Down
Loading