PERSPECTIVE-IMPLEMENTATION-PLAN.md
c25. Perspective Implementation Plan
- Goal
- Execution Principle
- Current File Ownership
- Recommended File Split
- Phase 1: Expand The Synthetic Graph
- Phase 2: Surface The Richer Graph In The Existing Inventory Experiment
- Phase 3: Create The Second c25 Experiment Page
- Phase 4: Add One Wrapper Per Item Type
- Phase 5: Add Wrapper Support To The Second Experiment Page
- Phase 6: Add The Compression-Sensitive Wrappers
- File-Level Checklist
- First Slice
- Ready-To-Start Definition
Goal
Execute the perspective augmentation by expanding the existing synthetic inventory graph first, then building one wrapper component per item type plus a second c25 experiment page dedicated to item-specific maps.
This file is the execution companion to:
Execution Principle
Do not start by building ten item-specific wrappers against incomplete data.
Instead:
- expand the synthetic scenario contract
- keep the current inventory view rendering cleanly
- add a second experiment page for item-specific maps
- add one wrapper per item type, fed by view-specific data
- tune summaries, grouping, and compression only after the data model is believable
Current File Ownership
These files already form the center of c25 and should stay the primary edit surface:
- inventoryScenarios.js Owns the scenario generator, entity catalogs, deterministic tier exports, and scenario stats.
- ExperimentsApp.vue Owns the experiment shell, scenario controls, grouping controls, and header stats.
- QMapInventoryIndex.vue Owns the public wrapper seam for inventory-shaped data.
- QMapInventoryIndexDefaults.js Owns inventory-specific visual tuning defaults.
- src/components/index.js Owns exports for the public wrapper seam.
- dev/App.vue Owns the experiment index and should expose the second c25 page once it exists.
Recommended File Split
The current synthetic generator is already carrying multiple responsibilities. Before adding six new entity families, split it into a small set of focused modules.
Recommended new files:
dev/experiments/c25.ai-ecosystem-inventory-map/shared/inventoryCatalogs.jsOwns label catalogs for models, endpoints, API keys, users, sessions, and secondary call patterns.dev/experiments/c25.ai-ecosystem-inventory-map/shared/inventoryActorFactories.jsOwns actor builders such ascreateSessionActor(),createUserActor(),createModelActor(),createApiKeyActor(),createEndpointActor(), andcreateSecondaryCallActor().dev/experiments/c25.ai-ecosystem-inventory-map/shared/inventoryFlowBuilders.jsOwnscreateFlow()plus perspective-relevant flow metadata and helper builders for relationship families.dev/experiments/c25.ai-ecosystem-inventory-map/shared/itemMapScenarios.jsOwns view-specific synthetic data builders for item-specific wrappers.dev/experiments/c25.ai-ecosystem-inventory-map/ItemMapsApp.vueOwns the second experiment page for category-specific wrappers.dev/experiments/c25.ai-ecosystem-inventory-map/item-maps.htmlSecond HTML entry point, mirroring the c23 two-page pattern.dev/experiments/c25.ai-ecosystem-inventory-map/item-maps.jsMount entry forItemMapsApp.vue.
Keep inventoryScenarios.js as the orchestrator that:
- assembles scenario tiers
- wires catalogs and factories together
- exports
AI_ECOSYSTEM_INVENTORY_SCENARIOS - exports
AI_ECOSYSTEM_INVENTORY_SCENARIO_MAP
Keep itemMapScenarios.js as the wrapper-specific scenario layer that:
- derives view-specific synthetic payloads from the richer graph
- exposes one scenario contract per item wrapper
- keeps the item-specific map page independent from the inventory-index page
Phase 1: Expand The Synthetic Graph
Files
- inventoryScenarios.js
shared/inventoryCatalogs.jsshared/inventoryActorFactories.jsshared/inventoryFlowBuilders.js
Work
Add first-class actors for:
SessionUserModelAPI KeyEndpointSecondary Call
Keep and preserve existing actors:
AI AgentRepositoryFileMCP ServerToolSub-Agent
Add missing flow families:
user -> sessionsession -> agentsession -> modelsession -> mcp-serversession -> toolsession -> sub-agentsession -> repositorysession -> endpointagent -> modelmodel -> endpointapi-key -> modelapi-key -> endpointapi-key -> mcp-serversecondary-call -> modelsecondary-call -> endpointsecondary-call -> repositorysecondary-call -> filesecondary-call -> parent sessionsecondary-call -> parent agent
Add actor tags needed for perspective grouping:
entityTypeownerownerTypeteambusinessUnitenvironmentproviderstatussecurityTiercapabilityClassmodelFamilyendpointRegionendpointKindaccessModesessionIdsessionTyperepocallDepthparentCallId
Add flow tags needed for perspective summaries and filters:
protocoloperationdirectionlatencyBucketerrorStateretryCountcostWeighttokenWeighttimeBucketinitiatedBycredentialIdparentSessionIdparentCallId
Output Contract
Each scenario should continue returning:
actorsdataflowsstatsmeta
But stats should expand to include:
sessionsusersmodelsapiKeysendpointssecondaryCallserrorCountretryCountestimatedCosttokenVolume
Verification
- all four deterministic tiers still compile
- current inventory map still renders
- no existing actor family disappears
- new entity families appear in every tier, including
demo
Phase 2: Surface The Richer Graph In The Existing Inventory Experiment
Files
Work
Update the header stats and scenario metadata to expose the expanded graph:
- sessions
- users
- models
- endpoints
- API keys
- secondary calls
- cost and token summaries
- retries and errors where useful
Add a compact note in the experiment header that the scenario pack now supports perspective-specific pivots.
Do not add the item-specific map UI yet. This phase is only about making the richer graph visible and sanity-checkable.
Verification
- the experiment header remains readable on desktop
- the scenario cards still feel compact
demo,teamspace,enterprise, andglobal-enterpriseremain easy to switch between without visual breakage
Phase 3: Create The Second c25 Experiment Page
Files
dev/experiments/c25.ai-ecosystem-inventory-map/ItemMapsApp.vuedev/experiments/c25.ai-ecosystem-inventory-map/item-maps.htmldev/experiments/c25.ai-ecosystem-inventory-map/item-maps.js- dev/App.vue
Work
Add a second page for c25, following the c23 pattern of two experiment entry points.
This second page should:
- mount
ItemMapsApp.vue - expose a select dropdown for choosing which item-specific wrapper component to load
- keep shared scene controls where practical
- make it easy to compare wrapper behavior without editing code
Recommended page label:
c25.ai-ecosystem-item-maps
Verification
- the experiment index shows two c25 entries
- the second entry loads independently of the inventory-index page
- switching the dropdown swaps the mounted wrapper component cleanly
Phase 4: Add One Wrapper Per Item Type
Files
shared/itemMapScenarios.js- src/components/index.js
- QMapInventoryIndex.vue
- new wrapper files under
src/components/
Work
Create one wrapper per item type:
QMapSessionMap.vueQMapAgentMap.vueQMapUserMap.vueQMapMcpServerMap.vueQMapModelMap.vueQMapApiKeyMap.vueQMapEndpointMap.vueQMapToolSkillMap.vueQMapRepoFileMap.vueQMapSecondaryCallMap.vue
Each wrapper should:
- accept a view-specific payload
- reduce it to qmap actors and dataflows if needed
- own default grouping and summary behavior for that entity family
- remain independent from experiment-local imports
itemMapScenarios.js should provide synthetic payloads shaped for each wrapper instead of forcing every wrapper to consume the entire inventory object directly.
Verification
- switching the dropdown loads a different wrapper cleanly
- each wrapper answers a visibly different question
- wrappers are data-specific, not just visual aliases of the same generic scene
Phase 5: Add Wrapper Support To The Second Experiment Page
Files
dev/experiments/c25.ai-ecosystem-inventory-map/ItemMapsApp.vueshared/itemMapScenarios.js- src/components/index.js
Work
Mount item-specific components dynamically from the select dropdown.
The second page should:
- maintain a registry from dropdown option to wrapper component
- resolve the matching view-specific synthetic payload
- pass that payload into the mounted wrapper
- keep shared controls like lighting and grouping where they make sense
Preserve QMapInventoryIndex as the original first-page wrapper. Do not collapse all item-specific maps back into it.
Verification
- changing the dropdown updates both component and payload
- each mounted wrapper renders without needing page-specific hacks
- the first c25 page remains unchanged
Phase 6: Add The Compression-Sensitive Wrappers
Files
shared/itemMapScenarios.jsdev/experiments/c25.ai-ecosystem-inventory-map/ItemMapsApp.vue- possibly a new summary helper under
shared/if the experiment proves it necessary
Work
Add the harder wrappers only after the richer graph and first-wave wrappers are stable:
ModelsEndpointsUsersAPI KeysSecondary Calls
Special handling likely needed:
API Keysmay want lower-visual-weight nodes and stronger summary stripsSecondary Callsmay want collapsed chains or fan-out summariesModelsandEndpointsmay need provider-heavy grouping defaults
Verification
- the scene remains interpretable at
enterpriseandglobal-enterprise - dense perspectives introduce summaries instead of uncontrolled node explosions
File-Level Checklist
shared/inventoryCatalogs.js
- add catalogs for users, sessions, models, API keys, endpoints, and secondary call patterns
- keep labels deterministic and varied enough to feel believable
shared/inventoryActorFactories.js
- add actor builders for all new entity families
- ensure every actor ships with the perspective tags it needs
- preserve current actor tag shape for existing entities
shared/inventoryFlowBuilders.js
- centralize flow creation
- add flow metadata fields once, not ad hoc in each scenario branch
- keep ids deterministic
inventoryScenarios.js
- refactor into orchestrator role
- import catalogs, actor factories, and flow builders
- expand each tier to include all entity families
- expand
statsandmeta
shared/itemMapScenarios.js
- derive wrapper-specific payloads from the richer graph
- avoid one giant generic payload for every item map
- make each wrapper's input shape intentional and easy to reason about
ExperimentsApp.vue
- add new counts to the header
- keep the existing grouping controls usable
ItemMapsApp.vue
- add the select dropdown for wrapper switching
- register each item-specific wrapper component
- pass the matching view-specific synthetic payload
- preserve shared controls where useful for comparison
item-maps.html and item-maps.js
- add the second c25 experiment entry point
- mirror the c23 two-page setup pattern
QMapInventoryIndex.vue
- keep the current inventory contract working
- do not collapse the item-specific wrappers back into this file
- keep it as the dedicated inventory/index wrapper
QMapInventoryIndexDefaults.js
- keep current defaults as the baseline inventory fallback
- keep these defaults specific to the inventory page rather than the item-specific map page
src/components/QMapSessionMap.vue through src/components/QMapSecondaryCallMap.vue
- add one wrapper component per item type
- keep props narrow and view-specific
- own grouping and summary defaults locally
- avoid experiment-local imports
src/components/index.js
- export each new wrapper component
dev/App.vue
- add a second c25 experiment entry in the dev experiment list
First Slice
The first concrete coding slice should be:
- split
inventoryScenarios.jsinto smaller shared modules - add
Session,User,Model,API Key,Endpoint, andSecondary Call - add the missing flow families and metadata tags
- expand scenario stats and header counts
- scaffold the second c25 page entry point
- verify the existing inventory surface still reads clearly in all four tiers
If that slice goes well, the next slice is the first batch of item-specific wrappers plus the dropdown-based component switcher.
Ready-To-Start Definition
We are ready to start implementation when:
- the current synthetic generator has an agreed file split
- the new entity families and flow families are accepted
- the second-page experiment pattern is accepted
- the first slice is explicitly limited to synthetic graph expansion plus experiment stats and page scaffolding
That definition is already satisfied by this plan.