Organization 360
What Was Built
Organization 360 presents the organization profile, stored compliance, hierarchy and a dated affiliated-contact roster. Roster filters distinguish current and historical relationships on the selected day, with roles, types and paging. Add Person, Edit and End change the owning contact. Organization record panels change classification, lock or archive state. Live mode hides inert profile-edit and hierarchy controls and marks unavailable section content explicitly.
Routing
The record-id page chooses live browser loading when the CRM live switch is enabled, because the browser holds the request credentials. The record layout supplies merged-record redirection to descendants. The section query keeps tab context, while result navigation applies only when a result context exists; opening a direct link does not invent a neighboring record list.
Source
OrganizationLiveScreen with OrganizationScreen owns the coordination described here. The source manifest identifies its page, presentation collaborators and request adapters at the pinned console commit. Service route evidence identifies the authoritative operation names and permission declarations. No pull-request attribution or earlier implementation date is inferred from the current checkout.
Components
The organization People surface supplies the CRM-source Contact Selector variant to Add Person. Its source and event shape differ from the named selector export that defaults to Quick Search, and the implementation contract preserves that distinction. The organization-side affiliation dialog and people card are local collaborators; they are separate from the contact-owned affiliation section and drawer. Platform owns the record action menu and common card shell. Their registration gaps do not justify attaching unrelated Entities components to this screen.
Data Integration
getCrmOrganizationView maps the live organization to the built organization presentation. The roster hook maps a numbered page to learned opaque cursors. Roster writes use contactAffiliationWriter over the owning contact rather than submitting an organization-wide relationship replacement.
The organization profile is held by the live screen. After record panels change type/lock/archive, useHeldOrganizationType rereads those values without replacing unrelated profile content. Roster reads maintain their own query-specific cursor map. tab and roster filters live in the address: affiliations, asOf, affiliationType, contactRole, page and pageSize. Dialogs hold relationship drafts and stable creation identity; their successful writes refresh the roster in place.
Loading Organization covers the profile read; the roster independently shows Loading Affiliated Contacts while a page is requested. The top-level live read distinguishes missing, forbidden, unconfigured and failed states; only failed reads offer Try Again. Roster errors offer a separate retry. Write refusals stay with the dialog; stale contact versions do not imply a saved relationship.
Changing roster query aborts the earlier request and starts a new cursor map. Successful roster writes forget learned cursors and refresh silently. Organization record refresh only rereads held classification, lock and archive context. Filters and paging survive reload through query parameters. No general organization correction draft or offline write replay is established.
Actions as Implemented
The inventory below follows every action of the protected design. These designs have no permanent action ids; the exact design label identifies each comparison until the design retrofit allocates them. Draft interactions are distinguished from requests that persist a record.
| Design action | Operation or boundary | Built behavior | Provenance | Source |
|---|---|---|---|---|
| Add Person | patchContact (the person's affiliations) | Add Person selects a contact and opens a relationship draft. Live submission reads the owner and adds the affiliation through its version-tested contact patch with a stable new relationship identity. | observed | react-console:components/console/organization/organization-360-live.tsx; react-console:components/console/organization/organization-360-live.tsx |
| Edit Affiliation | patchContact | The dialog keeps the organization fixed and edits the selected contact-owned affiliation, including dated roles; the writer preserves the contact version basis. | observed | react-console:components/console/organization/organization-360-live.tsx; react-console:components/console/organization/organization-360-live.tsx |
| End Affiliation | patchContact | The End dialog collects the inclusive end date and coordinates primary/title implications in the owning contact patch; success refreshes the roster. | observed | react-console:components/console/organization/organization-360-live.tsx; react-console:components/console/organization/organization-360-live.tsx |
| Change Type | patchOrganization | The shared panel reads the current record/type choices, submits a version-tested type patch and invokes record refresh after success. | observed | react-console:components/console/organization/organization-360-live.tsx; react-console:components/console/organization/organization-360-live.tsx |
| Lock | lockOrganization | The dedicated record panel collects a reason, reads the current version and submits the separately permissioned lock action; refreshed state determines the next available menu item. | observed | react-console:components/console/organization/organization-360-live.tsx; react-console:components/console/organization/organization-360-live.tsx |
| Unlock | unlockOrganization | The dedicated record panel collects a reason, reads the current version and submits the separately permissioned lock action; refreshed state determines the next available menu item. | observed | react-console:components/console/organization/organization-360-live.tsx; react-console:components/console/organization/organization-360-live.tsx |
| Lock History | listOrganizationLockChanges | The shared record panel reads the customer lock audit under record read authority; opening it performs no write. | observed | react-console:components/console/organization/organization-360-live.tsx; react-console:components/console/organization/organization-360-live.tsx |
| Archive Organization | archiveOrganization | A dedicated archive/unarchive confirmation submits the versioned record action and refreshes saved availability; archive preserves the record rather than deleting it. | observed | react-console:components/console/organization/organization-360-live.tsx; react-console:components/console/organization/organization-360-live.tsx |
| Unarchive Organization | unarchiveOrganization | A dedicated archive/unarchive confirmation submits the versioned record action and refreshes saved availability; archive preserves the record rather than deleting it. | observed | react-console:components/console/organization/organization-360-live.tsx; react-console:components/console/organization/organization-360-live.tsx |
| Navigate sections and results | none: local interaction | Section and roster query changes preserve record context in the URL. Result navigation uses the frozen result context when present; unavailable live tabs show unavailable content. | observed | react-console:components/console/organization/organization-360-live.tsx; react-console:components/console/organization/organization-360-live.tsx |
Authorization
Roster editing evaluates permissions.crm.contacts.edit, mapped to crm.contacts.update. Organization section actions evaluate update, archive, lock and unlock grants and saved archive/lock state. The record layout uses MergedRecordRedirect; the live page relies on service refusal for its profile read. getOrganization requires crm.organizations.read; listOrganizationAffiliations requires crm.contacts.read. Roster getContact/patchContact require crm.contacts.read / crm.contacts.update. patchOrganization requires crm.organizations.update; lock/unlock use their respective keys; lock audit uses crm.organizations.read; archive/unarchive use crm.organizations.archive.
The authorization inventory in frontmatter records the actual service requirements. Browser filtering is presentation; the service is authoritative for scope, version and record restrictions. Nothing in this source review makes a business role an authorization role or certifies shell identity and application access beyond the recorded dependency.
Observability
useRecordViewTracking reports a ready visit only when the rendered record matches the requested identity; mutations retain service-owned change/audit effects. No dedicated screen logging is established in the listed components; shared request and service logging remains outside this screen’s telemetry claim. No screen-specific metric emission is established by the inspected source.
The top-level live read distinguishes missing, forbidden, unconfigured and failed states; only failed reads offer Try Again. Roster errors offer a separate retry. Write refusals stay with the dialog; stale contact versions do not imply a saved relationship. These visible failure surfaces are evidence of feedback, not evidence that every request reached a deployed service or every wider audit integration completed.
Design Fidelity
The design’s generic configured-presentation and unconfigured-layout claims do not describe the organization live path: it maps into OrganizationScreen directly, without effective page-layout resolution. CRM_ORGANIZATION_TABS limits live content and inert organization editing/hierarchy actions are hidden. No general organization editor or organization version-history drawer is wired.
All twelve designs still require their standard retrofit: feature, user goals, scope, navigation, layout mode, dependency list, field details, action ids, registered components, acceptance criteria and open questions are incomplete. A Screen Acceptance Specification is also absent for this screen. The implementation preserves those gaps as findings and does not manufacture acceptance ids or change the protected design.
Verification
Organization and affiliation acceptance inspect people pages, saved ties, archive and compliance context. General organization correction and terminal compliance reprocess remain partial in those registers; the live screen has no general editor.
The frontmatter names the relevant existing registers and feature suite; none is reported as executed here. API and aggregate integration prove their declared service boundaries, not assembled-screen accessibility. No dedicated registered component-test group or complete screen acceptance document exists for this screen. Accessibility and deployment remain not-verified.
Screenshots
The retained images are copied byte for byte from the console’s documentation at the pinned commit. The recorded dimensions describe the image, including full-page captures and element crops; they are not substituted for the browser viewport. The timestamp is the last modifying commit date of the source image, not an inferred shutter time. These fixture captures show historical presentation; they do not establish that the pinned live deployment renders every state identically.
| State | Image dimensions | Capture source |
|---|---|---|
| organization people | 1440 × 1300 pixels (image dimensions; full-page images and element crops may differ from the browser viewport) | organization-people.png; react-console:docs/affiliations/screens-v2/organization-people.png at baf6dae382d6f41dce976c7f848667ccc37e076f; documented fixture capture, not a verified live deployment |
| change organization type | 1280 × 720 pixels (image dimensions; full-page images and element crops may differ from the browser viewport) | change-organization-type.png; react-console:docs/screenshots/record-creation/change-organization-type.png at baf6dae382d6f41dce976c7f848667ccc37e076f; documented fixture capture, not a verified live deployment |
The type-change prompt is recorded in SVP-CRM-ENT-003. The related affiliation presentation history is retained separately in SVP-CRM-ENT-004; neither record establishes product approval. Source: react-console:scripts/v0/change-record-type.prompt.md and rhythm-v2-docs:specs/crm/entities/implementation/prompts/SVP-CRM-ENT-004-edit-contact.md; provenance: observed.