Org directory consumer boundary

Org Explorer removed. The Delve-iframe Org Explorer crawl surface has been retired. Outlook People (host page) — and specifically its Organization tab — is now the sole source of org-structure (manager chain, direct…

Updated

Org Explorer removed. The Delve-iframe Org Explorer crawl surface has been retired. Outlook People (host page) — and specifically its Organization tab — is now the sole source of org-structure (manager chain, direct reports, works-with). The legacy org_explorer.py connector module was renamed to owa_lpc_reader.py and retains only shared LPC parsers plus a dormant home-snapshot reader used by Cockpit photo backfill.

forge-lcdl exposes atomic, product-agnostic read operations for Outlook People (host page). Consumers (for example forge-cockpit-web) attach an authorized browser session, call governed tasks, and map wire output to org_people.sqlite, org_graph.sqlite, and files/org/{profile_id}/people/.

LCDL must not import consumer repos or know crawl depth policies, COCKPIT_ORG_SCAN_MAX_PEOPLE, canonical-disk compaction, org_ingest_queue drain, or org-chart UI events.

OWA surface (single consumer store)

Surface OWA entry LCDL connector Cockpit orchestrator harvest_source
Outlook People /people/ outlook_people.py people_harvest.py outlook_people
~~Org Explorer~~ ~~/host/… + Delve iframe~~ removed (was org_explorer.py) removed

Outlook People writes through ingest_harvest(); org-structure edges come from the LPC Organization tab parsed on the People profile card.

Atomic capability catalog — Outlook People

Capability Governed task_id Input (summary) Output (summary)
People health outlook_probe_people_health session_ref, optional operator ids ok, search_ready, tree_ready
Contact list snapshot outlook_people_home_snapshot scroll_rounds, max_rows people[], edges[] (empty v1)
Directory search focus outlook_people_focus_search query, display_name, mail person, focused_graph_id
Tree / row click outlook_people_focus_tree display_name, mail, graph_id focus_ok, person
Person snapshot outlook_people_snapshot_person focus fields person, panel
Profile panel read outlook_people_read_profile_panel optional expected name/mail card, parsed fields
Panel dismiss outlook_people_dismiss_profile_panel session_ref dismissed

Full list: OUTLOOK-PEOPLE-READ-STRATEGIES.md. Dual matrix: OUTLOOK-PEOPLE-DUAL-ARCHITECTURE.md.

Wire shape (org directory)

Both surfaces emit OrgHarvestWire-compatible JSON for Cockpit:

  • people[]graph_id, display_name, mail, optional title/dept/photo
  • edges[] — structural rels (reports_to, peer_of, works_with); derived from the People Organization tab (names resolved to graph_id consumer-side)
  • focused_graph_id, upn, tenant_id

Consumers map via OrgHarvestWire.from_task_resultingest_harvest.

What LCDL must not know

Out of scope for LCDL Belongs in consumer
org_people.sqlite, org_graph.sqlite Cockpit SQLCipher
files/org/, harvest_manifest.json, profile_check Cockpit org/ingest.py
pending_mail:* → canonical GUID people_harvest._resolve_graph_ids_from_db
Canonical disk / compaction disk_canonical.py, disk_compact.py
org_ingest_queue stub/enrich drain ingest_queue.py, profile-enrich harness
Guided scope / depth policy people_harvest.py, depth_policy.py
MSAL Graph sync org/sync_service.py
contact.org_graph_id linker contact_link.py
Org chart NDJSON live events Cockpit crawl API

Consumer responsibilities

  1. Session — Pick the People tab, connect_owa_page_via_selective_cdp, register_playwright_page(session_ref, page).
  2. Composition — Probe → snapshot loop; optional search/tree enrich per person.
  3. MappingOrgHarvestWireingest_harvest(harvest_source=…).
  4. Orchestration — Caps, CDP lock (_ORG_CDP_LOCK), scan runs, contact linking.

Example consumer: forge-cockpit-weborg-people-dual-architecture.md.

Migration status (forge-cockpit-web)

Area LCDL atoms Cockpit status
Outlook People scanner outlook_people_* tasks Production via people_harvest.py
Org structure (manager / DR / works-with) People Organization tab parsers Production — sole source
Org Explorer harvest / crawl Removed
Microsoft Graph directory N/A Cockpit org/sync_service.py only