---
id: MOD-PFM-OPS
title: Operational Records
product_area: platform
module: operations
revision: 2
status: draft
source_sha:
  services-platform: ad3f6a6582843008ed0f5a17b131878d15829af1
  macroservice-libraries: 54536a441935c6e09fdb7f96f0bec71c52ba4e03
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
repositories:
  - name: services-platform
    paths:
      - modules/jobs
      - modules/audit
      - modules/licensing
      - modules/tenants/aws/api/tenant-applications.routes.ts
      - >-
        aws/platform.service.ts (jobs, record-views, audit-events, tenant-applications, hq jobs and hq
        licensing permission groups)
      - docs/jobs.md
      - docs/audit-events.md
      - docs/licensing.md
      - 'docs/hq/rhythm-hq-plan.md (§D1, §D11, §D12, §E5, §K, §L)'
      - docs/proposals/application-access-and-entitlements.md
      - docs/proposals/licensing-entitlements-billing/17-decision-register.md
  - name: macroservice-libraries
    paths:
      - packages/jobs
  - name: react-console
    paths:
      - 'app/(console)/console/[tenantId]/maintenance'
      - 'app/(console)/console/[tenantId]/configuration/page.tsx'
      - app/(console)/hq/jobs
      - components/maintenance
      - components/console/hq/job
      - >-
        components/console/hq/jobs-list.tsx, recent-jobs-card.tsx, tenant-licensing-card.tsx,
        tenant-licensing-section.tsx, licensing-dialogs.tsx
      - components/configuration/applications
      - 'lib/maintenance, lib/applications, lib/record-views/tracking, lib/api/audit.ts'
      - 'lib/hq/job-snapshot.ts, use-hq-ops.ts, licensing.ts, licensing-types.ts, use-hq-licensing.ts'
      - >-
        e2e/mock/maintenance-job-runs.mock.spec.ts, e2e/mock/application-access.mock.spec.ts,
        e2e/mock/hq-ops.mock.spec.ts (job page)
      - >-
        e2e/dev/hq-licensing.dev.spec.ts, e2e/dev/record-views.dev.spec.ts, e2e/dev/hq-ops.dev.spec.ts
        (job page)
      - e2e/controlled/record-views.controlled.spec.ts
      - 'acceptance/crm/inventory (CAP-CRM-AUD-006, CAP-CRM-EXP-017 and their rules)'
owns:
  - >-
    Durable background-work records, the shared execution contract, recovery reconciliation, requester
    notices and audience-specific monitoring.
  - >-
    Recorded visits, supported view targets, history reads and the append-only activity store used by
    other modules.
  - >-
    Commercial licence inputs, staff exceptions, copied contracts, product mappings and export
    allowances.
  - 'The application catalogue, workspace operational standing and the availability resolver.'
does_not_own:
  - record: >-
      Workspace and customer identity, commercial-company linkage and the business meaning of workspace
      lifecycle jobs.
    owner: MOD-PFM-SEC
  - record: >-
      Security-history storage, request authorization, personal application selection and
      application-access permissions.
    owner: MOD-PFM-SEC
  - record: >-
      Cross-service lifecycle coordination and the service participants invoked during application
      preparation.
    owner: MOD-PFM-TNL
  - record: 'Application launching, console navigation and the unavailable-application screen.'
    owner: MOD-PFM-CSH
  - record: Data-job execution and Data Management administration.
    owner: MOD-PFM-DJE
  - record: 'Recent-work query presentation, the jobs dataset and export execution consuming export allowances.'
    owner: MOD-PFM-QRY
  - record: Business steps and consequences of job kinds owned by other modules.
    owner: 'MOD-PFM-QRY, MOD-PFM-ELG, MOD-PFM-INT, MOD-PFM-NOT'
  - record: Domain meaning of record events published by other modules.
    owner: 'MOD-CRM-DQ, MOD-COM-ORD, MOD-PFM-ELG, MOD-PFM-MTD'
  - record: 'Contact, organization and committee records whose visits are retained.'
    owner: 'MOD-CRM-ENT, MOD-CMT-CMT'
hosted_screens:
  - route: '/console/{tenantId}/maintenance'
    purpose: Maintenance navigation into Scheduled Jobs.
  - route: '/console/{tenantId}/maintenance/scheduled-jobs'
    purpose: Workspace runs and a drawer for inspecting a selected run.
  - route: '/console/{tenantId}/configuration'
    purpose: Administrator review of application standing.
  - route: /hq/jobs
    purpose: Staff inspection of Platform runs.
  - route: '/hq/jobs/{jobKind}/{jobId}'
    purpose: Selected-run detail with the supported provisioning recovery control.
  - route: '/hq/tenants/{tenantId} (licensing section) and /hq (recent jobs card)'
    purpose: Licensing review and recent runs embedded in screens owned by workspace administration.
supersedes:
  - CAP-CRM-AUD-006
  - CAP-CRM-EXP-017
evidence:
  - >-
    services-platform at ad3f6a6: modules/jobs, modules/audit and modules/licensing in full (routes,
    schemas, mappers, services, registries, tables, views, lambdas, queues, schedules and their unit,
    integration and end-to-end suites); the tenant applications route; the permission groups named under
    repositories; docs/jobs.md, audit-events.md, licensing.md; the Rhythm HQ plan; the application access
    proposal; the licensing v2 decision register. docs/milestones holds no durable jobs, audit or
    licensing milestone (FND-PFM-OPS-002).
  - >-
    macroservice-libraries at 54536a4: packages/jobs README, CHANGELOG and src in full, with its spec
    suites.
  - >-
    react-console at baf6dae: the Maintenance and HQ job pages, the Applications page, the HQ licensing
    panel, record view tracking, their libraries and the browser suites under repositories;
    acceptance/crm/inventory entries CAP-CRM-AUD-006, CAP-CRM-EXP-017, RUL-CRM-AUD-014 to 017,
    RUL-CRM-EXP-041 to 043.
  - >-
    Coverage inventory: 29 business operations plus 3 technical health registrations; 11 tables; 3 views;
    9 permission keys; 63 Platform test files; 19 shared-jobs test files; 7 console browser files; 2
    queues and 2 schedules; 5 standalone pages and 2 embedded hosts. Inventory coverage does not
    establish complete behavior proof; see FND-PFM-OPS-025, 028 and 032.
coverage_catalog: >
  ### Coverage against the code at the pinned commit


  | Measure | Covered | Ratio |

  |---|---|---|

  | HTTP operations of the jobs, audit and licensing route files and the tenant applications route (the
  three health routes excluded) | 29 of 29 | 29/29 |

  | Tables (`*.table.ts`) of the three modules, each named in a capability's evidence | 11 of 11 | 11/11
  |

  | Views (`cross-job-query.view.ts`: jobs, steps, events) | 4 of 4 | 4/4 |

  | Permission keys of the in-scope groups (`platform.jobs`, `platform.record-views`,
  `platform.audit-events`, `platform.tenant-applications`, `hq.jobs`, `hq.licensing`) | 9 of 9 | 9/9 |

  | Backend end-to-end files (jobs 2, audit 1, licensing 2) | 5 of 5 | 5/5 |

  | Backend integration and unit spec files (40 integration, 18 unit), cited by capability evidence | 58
  of 58 | 58/58 |

  | Console browser files in scope | 7 of 7 | 7/7 |

  | Step Functions state machines owned (each job's machine belongs to its owning module) | none | 0/0 |

  | Queues and schedules (five-minute job reconciler; source licence sync queue; licence sync dead-letter
  queue; nightly licence reconcile) | 3 of 3 | 3/3 |

  | Console pages in scope (Maintenance home, Scheduled Jobs, Applications, HQ Jobs, HQ job page) | 5 of
  5 | 5/5 |

  | Acceptance inventory entries seeding this module | 2 of 2 superseded | 2/2 |


  ### Operations by capability


  | Operation | Capability |

  |---|---|

  | `listJobs`, `countJobs`, `listJobKinds`, `getJob`, `listJobEvents` | `CAP-PFM-OPS-005` |

  | `listJobsOfTenant`, `countJobsOfTenant`, `listJobKindsOfTenant`, `getJobOfTenant`,
  `listJobEventsOfTenant` | `CAP-PFM-OPS-005` |

  | `listJobsInHq`, `countJobsInHq`, `listJobKindsInHq`, `getJobInHq`, `listJobEventsInHq` |
  `CAP-PFM-OPS-006` |

  | `recordRecordView` | `CAP-PFM-OPS-008` |

  | `listMyRecordViews`, `listUserRecordViews` | `CAP-PFM-OPS-009` |

  | `createTenantLicenceOverride`, `revokeTenantLicenceOverride` | `CAP-PFM-OPS-011` |

  | `getHubspotCompanyLicensing`, `syncHubspotCompanyLicensing`, `getLicenceSyncHealth`,
  `receiveHubspotWebhook` | `CAP-PFM-OPS-012` |

  | `getTenantLicensing` | `CAP-PFM-OPS-013` |

  | `suspendTenantApplication`, `resumeTenantApplication`, `retryTenantApplicationProvisioning` |
  `CAP-PFM-OPS-015` |

  | `listTenantApplicationsForTenant` | `CAP-PFM-OPS-016` (also claimed by `CAP-PFM-SEC-002`;
  FND-PFM-OPS-017) |


  ### Tables and views by capability


  | Table or view | Capability |

  |---|---|

  | `job-notices.table.ts` | `CAP-PFM-OPS-003` |

  | `cross_job_query`, `cross_job_steps`, `cross_job_events` (`cross-job-query.view.ts`) |
  `CAP-PFM-OPS-007` |

  | `audit-events.table.ts` | `CAP-PFM-OPS-010` |

  | `licence-overrides.table.ts`, `data-export-entitlements.table.ts` | `CAP-PFM-OPS-011` |

  | `commercial-products.table.ts`, `hubspot-contracts.table.ts`, `hubspot-contract-lines.table.ts`,
  `licence-windows.table.ts`, `hubspot-company-syncs.table.ts` | `CAP-PFM-OPS-012` |

  | `applications.table.ts` | `CAP-PFM-OPS-014` |

  | `tenant-applications.table.ts` | `CAP-PFM-OPS-015` |


  ### Permission keys by capability


  | Key | Capability |

  |---|---|

  | `platform.jobs.read` (console alias `maintenance.scheduled-jobs.view`) | `CAP-PFM-OPS-005` |

  | `hq.jobs.read` | `CAP-PFM-OPS-006` |

  | `hq.jobs.retry` | `CAP-PFM-OPS-004` (required by no operation; FND-PFM-OPS-004) |

  | `platform.record-views.create` | `CAP-PFM-OPS-008` |

  | `platform.record-views.read`, `platform.audit-events.read` | `CAP-PFM-OPS-009` |

  | `hq.licensing.manage` | `CAP-PFM-OPS-011`, `CAP-PFM-OPS-015`, `CAP-PFM-OPS-012` (sync) |

  | `hq.licensing.read` | `CAP-PFM-OPS-013`, `CAP-PFM-OPS-012` (company and sync health) |

  | `platform.tenant-applications.read` | `CAP-PFM-OPS-016` |


  Keys of other groups appear as dependencies only: each record type's read and query keys
  (`crm.contacts.read`, `crm.organizations.read`, `committees.committees.read` and their datasets' query
  keys) in `CAP-PFM-OPS-008`, and `hq.tenants.provision` (MOD-PFM-SEC) in `CAP-PFM-OPS-004`.


  ### Test files by capability


  | Files | Capability |

  |---|---|

  | jobs e2e `jobs.e2e.spec.js`, `jobs-tenant-runs.e2e.spec.js`; integration `jobs.integration`,
  `jobs.queries.integration` | `CAP-PFM-OPS-005`, `CAP-PFM-OPS-006` |

  | jobs integration `job-reconciliation.integration`; engine `job-reconciler.spec`,
  `job-reconciler-handler.spec` | `CAP-PFM-OPS-002` |

  | jobs integration `job-notices.integration`; unit `job-notice-email.spec` | `CAP-PFM-OPS-003` |

  | jobs integration `job-snapshot.integration`; unit `job-failure-consequences.spec`; engine
  `job-engine.spec`, `job-workflow.spec`, `job-root-status-model.spec`, `job-step-status-model.spec`,
  `start-job-execution.spec` | `CAP-PFM-OPS-001` |

  | engine `job-cancellation.spec`, `job-engine.spec` (retry) | `CAP-PFM-OPS-004` |

  | jobs integration `cross-service-jobs.integration`, `cross-job-query.integration`,
  `job-subject.integration`; unit `cross-job-query.view.spec`, `job-kind-labels.spec`; engine
  `cross-job-schemas.integration` | `CAP-PFM-OPS-007`, `CAP-PFM-OPS-006` |

  | audit e2e `record-views.e2e.spec.js`; integration `record-view.integration`; unit
  `viewable-record-types.spec`, `audit-api-mapper.spec`, `audit-evaluated-keys.spec` | `CAP-PFM-OPS-008`
  |

  | audit integration `view-history.integration`, `audit-events.queries.integration`; unit
  `audit-permissions.spec` | `CAP-PFM-OPS-009` |

  | audit integration `audit-events.table.integration`, `audit-events.integration` | `CAP-PFM-OPS-010` |

  | licensing e2e `licensing.e2e.spec.js`; integration `provision-tenant-application`,
  `seed-development-licences`, `seed-development-licences.revoked`, `seed-development-licences.deletion`,
  `licence-overrides`, `licence-overrides.table`, `data-export-entitlements`,
  `data-export-entitlements.table`; unit `development-grant-is-needed.spec`,
  `seed-development-licences-for-tenant.spec` | `CAP-PFM-OPS-011` |

  | licensing e2e `hubspot-licensing.e2e.spec.js`; integration `sync-company-licences`,
  `accept-webhook-delivery`, `reconcile-licences`, `hubspot-licence-source.table`, `commercial-products`,
  `commercial-products.queries`, `hubspot-contracts`, `hubspot-contracts.queries`,
  `hubspot-company-syncs`, `hubspot-company-syncs.queries`, `licence-windows`, `licence-windows.queries`;
  unit `resolve-licence-windows.spec`, `product-grants.spec`, `webhook-signature.spec`,
  `webhook-events.spec`, `sync-queue.spec` | `CAP-PFM-OPS-012` |

  | licensing unit `application-availability.spec`, `applications.spec`,
  `application-access-permission.spec`; integration `applications.table`, `applications`,
  `applications.queries`, `tenant-applications.queries`, `tenant-applications.availability` |
  `CAP-PFM-OPS-014` |

  | licensing integration `tenant-applications.integration`, `tenant-applications.table` |
  `CAP-PFM-OPS-015` |

  | console `maintenance-job-runs.mock` | `CAP-PFM-OPS-005` |

  | console `hq-ops.mock` and `hq-ops.dev` (job page) | `CAP-PFM-OPS-006`, `CAP-PFM-OPS-004` |

  | console `record-views.controlled`, `record-views.dev` | `CAP-PFM-OPS-008` |

  | console `hq-licensing.dev`, `application-access.mock` | `CAP-PFM-OPS-013`, `CAP-PFM-OPS-016` |


  ### Technical and shared-engine inventory


  | Evidence | Coverage |

  |---|---|

  | jobs, audit and licensing `healthRoute` registrations in their route files | Technical health
  evidence; no additional business capability |

  | Shared jobs architecture, local runner, in-memory repository, state-machine and family-repository
  suites | `CAP-PFM-OPS-001`, `CAP-PFM-OPS-004`; continuation and infrastructure variant proof remains
  `FND-PFM-OPS-032` |

  | Shared continuation and workflow-continuation suites | `CAP-PFM-OPS-001`, `CAP-PFM-OPS-002`;
  `FND-PFM-OPS-032` |

  | Shared cross-job-history view suites | `CAP-PFM-OPS-007` |

  | HQ home and workspace detail hosts | `CAP-PFM-OPS-006`, `CAP-PFM-OPS-013`; their unrelated controls
  remain with owning modules |
artifact_tree:
  capability_test_specifications:
    - id: ATS-PFM-OPS-001
      path: design/tests/ATS-PFM-OPS-001-run-background-work-as-a-durable-job-with-a-legible-record.md
    - id: ATS-PFM-OPS-002
      path: design/tests/ATS-PFM-OPS-002-settle-jobs-whose-work-stopped-timed-out-or-never-started.md
    - id: ATS-PFM-OPS-003
      path: design/tests/ATS-PFM-OPS-003-tell-the-person-who-asked-for-a-job-how-it-ended-once.md
    - id: ATS-PFM-OPS-004
      path: design/tests/ATS-PFM-OPS-004-run-a-failed-job-again-or-stop-one-that-is-running.md
    - id: ATS-PFM-OPS-005
      path: design/tests/ATS-PFM-OPS-005-see-what-ran-for-a-workspace-and-across-the-organization.md
    - id: ATS-PFM-OPS-006
      path: design/tests/ATS-PFM-OPS-006-watch-every-job-of-the-platform-from-rhythm-hq.md
    - id: ATS-PFM-OPS-007
      path: design/tests/ATS-PFM-OPS-007-show-every-rhythm-service-s-jobs-in-one-list.md
    - id: ATS-PFM-OPS-008
      path: design/tests/ATS-PFM-OPS-008-record-that-a-person-opened-a-record.md
    - id: ATS-PFM-OPS-009
      path: design/tests/ATS-PFM-OPS-009-look-back-over-the-records-a-person-opened.md
    - id: ATS-PFM-OPS-010
      path: design/tests/ATS-PFM-OPS-010-keep-an-append-only-trail-of-record-activity-for-every-module.md
    - id: ATS-PFM-OPS-011
      path: design/tests/ATS-PFM-OPS-011-grant-or-withhold-an-application-for-a-workspace-by-rhythm-s.md
    - id: ATS-PFM-OPS-012
      path: design/tests/ATS-PFM-OPS-012-license-workspaces-from-their-hubspot-contracts.md
    - id: ATS-PFM-OPS-013
      path: design/tests/ATS-PFM-OPS-013-review-a-workspace-s-licensing-in-rhythm-hq.md
    - id: ATS-PFM-OPS-014
      path: design/tests/ATS-PFM-OPS-014-decide-which-applications-a-workspace-may-use.md
    - id: ATS-PFM-OPS-015
      path: design/tests/ATS-PFM-OPS-015-bring-an-application-into-service-for-a-workspace-and-keep-it.md
    - id: ATS-PFM-OPS-016
      path: design/tests/ATS-PFM-OPS-016-tell-a-customer-s-administrator-which-applications-their.md
  feature_acceptance_suites:
    - id: FAS-PFM-OPS-01
      path: planning/acceptance/FAS-PFM-OPS-01-background-jobs.md
    - id: FAS-PFM-OPS-02
      path: planning/acceptance/FAS-PFM-OPS-02-record-activity-trail.md
    - id: FAS-PFM-OPS-03
      path: planning/acceptance/FAS-PFM-OPS-03-licences.md
    - id: FAS-PFM-OPS-04
      path: planning/acceptance/FAS-PFM-OPS-04-application-availability.md
  executable_test_suites:
    - id: TST-PFM-OPS-001
      path: implementation/tests/TST-PFM-OPS-001-architecture.md
    - id: TST-PFM-OPS-002
      path: implementation/tests/TST-PFM-OPS-002-job-state-machine.md
    - id: TST-PFM-OPS-003
      path: implementation/tests/TST-PFM-OPS-003-job-cancellation.md
    - id: TST-PFM-OPS-004
      path: implementation/tests/TST-PFM-OPS-004-job-continuation.md
    - id: TST-PFM-OPS-005
      path: implementation/tests/TST-PFM-OPS-005-job-engine.md
    - id: TST-PFM-OPS-006
      path: implementation/tests/TST-PFM-OPS-006-job-root-status-model.md
    - id: TST-PFM-OPS-007
      path: implementation/tests/TST-PFM-OPS-007-job-step-status-model.md
    - id: TST-PFM-OPS-008
      path: implementation/tests/TST-PFM-OPS-008-local-job-runner.md
    - id: TST-PFM-OPS-009
      path: implementation/tests/TST-PFM-OPS-009-start-job-execution.md
    - id: TST-PFM-OPS-010
      path: implementation/tests/TST-PFM-OPS-010-cross-job-history-views.md
    - id: TST-PFM-OPS-011
      path: implementation/tests/TST-PFM-OPS-011-cross-job-query-view.md
    - id: TST-PFM-OPS-012
      path: implementation/tests/TST-PFM-OPS-012-job-reconciler-handler.md
    - id: TST-PFM-OPS-013
      path: implementation/tests/TST-PFM-OPS-013-job-reconciler.md
    - id: TST-PFM-OPS-014
      path: implementation/tests/TST-PFM-OPS-014-in-memory-job-repository.md
    - id: TST-PFM-OPS-015
      path: implementation/tests/TST-PFM-OPS-015-cross-job-query.md
    - id: TST-PFM-OPS-016
      path: implementation/tests/TST-PFM-OPS-016-cross-job-schemas.md
    - id: TST-PFM-OPS-017
      path: implementation/tests/TST-PFM-OPS-017-job-family-repository.md
    - id: TST-PFM-OPS-018
      path: implementation/tests/TST-PFM-OPS-018-job-workflow-continuation.md
    - id: TST-PFM-OPS-019
      path: implementation/tests/TST-PFM-OPS-019-job-workflow.md
    - id: TST-PFM-OPS-020
      path: implementation/tests/TST-PFM-OPS-020-record-activity-in-cmt-acc-0034.md
    - id: TST-PFM-OPS-021
      path: implementation/tests/TST-PFM-OPS-021-record-activity-in-cmt-acc-0472.md
    - id: TST-PFM-OPS-022
      path: implementation/tests/TST-PFM-OPS-022-record-activity-in-cmt-acc-0125.md
    - id: TST-PFM-OPS-023
      path: implementation/tests/TST-PFM-OPS-023-record-activity-in-crm-acc-0612.md
    - id: TST-PFM-OPS-024
      path: implementation/tests/TST-PFM-OPS-024-record-activity-in-crm-acc-0613.md
    - id: TST-PFM-OPS-025
      path: implementation/tests/TST-PFM-OPS-025-record-activity-in-crm-acc-0614.md
    - id: TST-PFM-OPS-026
      path: implementation/tests/TST-PFM-OPS-026-record-activity-in-crm-acc-0615.md
    - id: TST-PFM-OPS-027
      path: implementation/tests/TST-PFM-OPS-027-record-activity-in-crm-acc-0616.md
    - id: TST-PFM-OPS-028
      path: implementation/tests/TST-PFM-OPS-028-record-activity-in-crm-acc-0029.md
    - id: TST-PFM-OPS-029
      path: implementation/tests/TST-PFM-OPS-029-record-activity-in-crm-acc-0047.md
    - id: TST-PFM-OPS-030
      path: implementation/tests/TST-PFM-OPS-030-record-activity-in-crm-acc-0050.md
    - id: TST-PFM-OPS-031
      path: implementation/tests/TST-PFM-OPS-031-record-activity-in-crm-acc-0722.md
    - id: TST-PFM-OPS-032
      path: implementation/tests/TST-PFM-OPS-032-record-activity-in-crm-acc-0390.md
    - id: TST-PFM-OPS-033
      path: implementation/tests/TST-PFM-OPS-033-record-activity-in-crm-acc-0405.md
    - id: TST-PFM-OPS-034
      path: implementation/tests/TST-PFM-OPS-034-record-activity-in-crm-acc-0412.md
    - id: TST-PFM-OPS-035
      path: implementation/tests/TST-PFM-OPS-035-record-activity-in-crm-acc-0414.md
    - id: TST-PFM-OPS-036
      path: implementation/tests/TST-PFM-OPS-036-record-activity-in-crm-acc-0415.md
    - id: TST-PFM-OPS-037
      path: implementation/tests/TST-PFM-OPS-037-record-activity-in-crm-acc-0432.md
    - id: TST-PFM-OPS-038
      path: implementation/tests/TST-PFM-OPS-038-record-activity-in-crm-acc-0434.md
    - id: TST-PFM-OPS-039
      path: implementation/tests/TST-PFM-OPS-039-record-activity-in-crm-acc-0435.md
    - id: TST-PFM-OPS-040
      path: implementation/tests/TST-PFM-OPS-040-record-activity-in-crm-acc-0267.md
    - id: TST-PFM-OPS-041
      path: implementation/tests/TST-PFM-OPS-041-record-activity-in-crm-acc-0500.md
    - id: TST-PFM-OPS-042
      path: implementation/tests/TST-PFM-OPS-042-record-activity-in-crm-acc-0547.md
    - id: TST-PFM-OPS-043
      path: implementation/tests/TST-PFM-OPS-043-record-activity-in-crm-acc-0550.md
    - id: TST-PFM-OPS-044
      path: implementation/tests/TST-PFM-OPS-044-record-activity-in-crm-acc-0551.md
    - id: TST-PFM-OPS-045
      path: implementation/tests/TST-PFM-OPS-045-record-activity-in-crm-acc-0553.md
    - id: TST-PFM-OPS-046
      path: implementation/tests/TST-PFM-OPS-046-record-activity-in-crm-acc-0574.md
    - id: TST-PFM-OPS-047
      path: implementation/tests/TST-PFM-OPS-047-record-activity-in-elig-acc-0145.md
    - id: TST-PFM-OPS-048
      path: implementation/tests/TST-PFM-OPS-048-record-views.md
    - id: TST-PFM-OPS-049
      path: implementation/tests/TST-PFM-OPS-049-hq-home.md
    - id: TST-PFM-OPS-050
      path: implementation/tests/TST-PFM-OPS-050-hq-licensing.md
    - id: TST-PFM-OPS-051
      path: implementation/tests/TST-PFM-OPS-051-hq-ops.md
    - id: TST-PFM-OPS-052
      path: implementation/tests/TST-PFM-OPS-052-record-views.md
    - id: TST-PFM-OPS-053
      path: implementation/tests/TST-PFM-OPS-053-application-access.md
    - id: TST-PFM-OPS-054
      path: implementation/tests/TST-PFM-OPS-054-hq-ops.md
    - id: TST-PFM-OPS-055
      path: implementation/tests/TST-PFM-OPS-055-maintenance-job-runs.md
    - id: TST-PFM-OPS-056
      path: implementation/tests/TST-PFM-OPS-056-record-views.md
    - id: TST-PFM-OPS-057
      path: implementation/tests/TST-PFM-OPS-057-audit-events-table.md
    - id: TST-PFM-OPS-058
      path: implementation/tests/TST-PFM-OPS-058-audit-events.md
    - id: TST-PFM-OPS-059
      path: implementation/tests/TST-PFM-OPS-059-audit-events-queries.md
    - id: TST-PFM-OPS-060
      path: implementation/tests/TST-PFM-OPS-060-record-view.md
    - id: TST-PFM-OPS-061
      path: implementation/tests/TST-PFM-OPS-061-view-history.md
    - id: TST-PFM-OPS-062
      path: implementation/tests/TST-PFM-OPS-062-audit-api-mapper.md
    - id: TST-PFM-OPS-063
      path: implementation/tests/TST-PFM-OPS-063-audit-evaluated-keys.md
    - id: TST-PFM-OPS-064
      path: implementation/tests/TST-PFM-OPS-064-audit-permissions.md
    - id: TST-PFM-OPS-065
      path: implementation/tests/TST-PFM-OPS-065-viewable-record-types.md
    - id: TST-PFM-OPS-066
      path: implementation/tests/TST-PFM-OPS-066-jobs-workspace-runs.md
    - id: TST-PFM-OPS-067
      path: implementation/tests/TST-PFM-OPS-067-jobs.md
    - id: TST-PFM-OPS-068
      path: implementation/tests/TST-PFM-OPS-068-cross-job-query.md
    - id: TST-PFM-OPS-069
      path: implementation/tests/TST-PFM-OPS-069-job-reconciliation.md
    - id: TST-PFM-OPS-070
      path: implementation/tests/TST-PFM-OPS-070-job-snapshot.md
    - id: TST-PFM-OPS-071
      path: implementation/tests/TST-PFM-OPS-071-job-notices.md
    - id: TST-PFM-OPS-072
      path: implementation/tests/TST-PFM-OPS-072-jobs.md
    - id: TST-PFM-OPS-073
      path: implementation/tests/TST-PFM-OPS-073-jobs-queries.md
    - id: TST-PFM-OPS-074
      path: implementation/tests/TST-PFM-OPS-074-cross-service-jobs.md
    - id: TST-PFM-OPS-075
      path: implementation/tests/TST-PFM-OPS-075-job-subject.md
    - id: TST-PFM-OPS-076
      path: implementation/tests/TST-PFM-OPS-076-cross-job-query-view.md
    - id: TST-PFM-OPS-077
      path: implementation/tests/TST-PFM-OPS-077-job-failure-consequences.md
    - id: TST-PFM-OPS-078
      path: implementation/tests/TST-PFM-OPS-078-job-kind-labels.md
    - id: TST-PFM-OPS-079
      path: implementation/tests/TST-PFM-OPS-079-job-notice-email.md
    - id: TST-PFM-OPS-080
      path: implementation/tests/TST-PFM-OPS-080-hubspot-licensing.md
    - id: TST-PFM-OPS-081
      path: implementation/tests/TST-PFM-OPS-081-licensing.md
    - id: TST-PFM-OPS-082
      path: implementation/tests/TST-PFM-OPS-082-applications-table.md
    - id: TST-PFM-OPS-083
      path: implementation/tests/TST-PFM-OPS-083-data-export-entitlements-table.md
    - id: TST-PFM-OPS-084
      path: implementation/tests/TST-PFM-OPS-084-hubspot-licence-source-table.md
    - id: TST-PFM-OPS-085
      path: implementation/tests/TST-PFM-OPS-085-licence-overrides-table.md
    - id: TST-PFM-OPS-086
      path: implementation/tests/TST-PFM-OPS-086-workspace-applications-table.md
    - id: TST-PFM-OPS-087
      path: implementation/tests/TST-PFM-OPS-087-provision-workspace-application.md
    - id: TST-PFM-OPS-088
      path: implementation/tests/TST-PFM-OPS-088-seed-development-licences-deletion.md
    - id: TST-PFM-OPS-089
      path: implementation/tests/TST-PFM-OPS-089-seed-development-licences.md
    - id: TST-PFM-OPS-090
      path: implementation/tests/TST-PFM-OPS-090-seed-development-licences-revoked.md
    - id: TST-PFM-OPS-091
      path: implementation/tests/TST-PFM-OPS-091-applications.md
    - id: TST-PFM-OPS-092
      path: implementation/tests/TST-PFM-OPS-092-applications-queries.md
    - id: TST-PFM-OPS-093
      path: implementation/tests/TST-PFM-OPS-093-commercial-products.md
    - id: TST-PFM-OPS-094
      path: implementation/tests/TST-PFM-OPS-094-commercial-products-queries.md
    - id: TST-PFM-OPS-095
      path: implementation/tests/TST-PFM-OPS-095-data-export-entitlements.md
    - id: TST-PFM-OPS-096
      path: implementation/tests/TST-PFM-OPS-096-hubspot-company-syncs.md
    - id: TST-PFM-OPS-097
      path: implementation/tests/TST-PFM-OPS-097-hubspot-company-syncs-queries.md
    - id: TST-PFM-OPS-098
      path: implementation/tests/TST-PFM-OPS-098-hubspot-contracts.md
    - id: TST-PFM-OPS-099
      path: implementation/tests/TST-PFM-OPS-099-hubspot-contracts-queries.md
    - id: TST-PFM-OPS-100
      path: implementation/tests/TST-PFM-OPS-100-licence-overrides.md
    - id: TST-PFM-OPS-101
      path: implementation/tests/TST-PFM-OPS-101-licence-windows.md
    - id: TST-PFM-OPS-102
      path: implementation/tests/TST-PFM-OPS-102-licence-windows-queries.md
    - id: TST-PFM-OPS-103
      path: implementation/tests/TST-PFM-OPS-103-workspace-applications-availability.md
    - id: TST-PFM-OPS-104
      path: implementation/tests/TST-PFM-OPS-104-workspace-applications.md
    - id: TST-PFM-OPS-105
      path: implementation/tests/TST-PFM-OPS-105-workspace-applications-queries.md
    - id: TST-PFM-OPS-106
      path: implementation/tests/TST-PFM-OPS-106-accept-webhook-delivery.md
    - id: TST-PFM-OPS-107
      path: implementation/tests/TST-PFM-OPS-107-reconcile-licences.md
    - id: TST-PFM-OPS-108
      path: implementation/tests/TST-PFM-OPS-108-sync-company-licences.md
    - id: TST-PFM-OPS-109
      path: implementation/tests/TST-PFM-OPS-109-application-access-permission.md
    - id: TST-PFM-OPS-110
      path: implementation/tests/TST-PFM-OPS-110-application-availability.md
    - id: TST-PFM-OPS-111
      path: implementation/tests/TST-PFM-OPS-111-applications.md
    - id: TST-PFM-OPS-112
      path: implementation/tests/TST-PFM-OPS-112-product-grants.md
    - id: TST-PFM-OPS-113
      path: implementation/tests/TST-PFM-OPS-113-webhook-events.md
    - id: TST-PFM-OPS-114
      path: implementation/tests/TST-PFM-OPS-114-webhook-signature.md
    - id: TST-PFM-OPS-115
      path: implementation/tests/TST-PFM-OPS-115-development-grant-is-needed.md
    - id: TST-PFM-OPS-116
      path: implementation/tests/TST-PFM-OPS-116-resolve-licence-windows.md
    - id: TST-PFM-OPS-117
      path: implementation/tests/TST-PFM-OPS-117-seed-development-licences-for-workspace.md
    - id: TST-PFM-OPS-118
      path: implementation/tests/TST-PFM-OPS-118-sync-queue.md
    - id: TST-PFM-OPS-119
      path: implementation/tests/TST-PFM-OPS-119-reconciled-job-failure.md
    - id: TST-PFM-OPS-120
      path: implementation/tests/TST-PFM-OPS-120-merge-participant.md
---

# Operational Records

## Purpose

Operations gives customers and Rhythm staff a readable account of background work, record activity and application standing. Its planning layer separates current implementation from approved intent and keeps unresolved differences visible for design.

## Boundary

The module connects durable work records, activity history, commercial coverage and operational readiness. The owning modules retain each job’s business meaning, each tracked record’s domain rules and the workspace lifecycle protocol. Authorization and security history remain shared dependencies. Hosted screens present these outcomes within the console and staff administration.

## Features

| Id | Title | Concepts | Capabilities |
|---|---|---|---|
| `FEAT-PFM-OPS-01` | Background Work | 1 | 7 |
| `FEAT-PFM-OPS-02` | Record Activity | 1 | 3 |
| `FEAT-PFM-OPS-03` | Commercial Licensing | 1 | 3 |
| `FEAT-PFM-OPS-04` | Application Standing | 1 | 3 |

## Capabilities

| Id | Feature | Title | Product intent | Evidence |
|---|---|---|---|---|
| `CAP-PFM-OPS-001` | `FEAT-PFM-OPS-01` | Complete background work with a durable record | confirmed | observed |
| `CAP-PFM-OPS-002` | `FEAT-PFM-OPS-01` | Resolve interrupted background work | proposed | observed |
| `CAP-PFM-OPS-003` | `FEAT-PFM-OPS-01` | Notify a job’s requester of its outcome | confirmed | observed |
| `CAP-PFM-OPS-004` | `FEAT-PFM-OPS-01` | Recover or deliberately stop background work | proposed | partially-observed |
| `CAP-PFM-OPS-005` | `FEAT-PFM-OPS-01` | Inspect background runs within customer reach | confirmed | observed |
| `CAP-PFM-OPS-006` | `FEAT-PFM-OPS-01` | Investigate platform jobs in Rhythm HQ | confirmed | partially-observed |
| `CAP-PFM-OPS-007` | `FEAT-PFM-OPS-01` | Inspect jobs across Rhythm services | proposed | observed |
| `CAP-PFM-OPS-008` | `FEAT-PFM-OPS-02` | Remember a person’s visits to records | confirmed | observed |
| `CAP-PFM-OPS-009` | `FEAT-PFM-OPS-02` | Review a person’s record-view history | confirmed | partially-observed |
| `CAP-PFM-OPS-010` | `FEAT-PFM-OPS-02` | Preserve a shared record-activity trail | confirmed | observed |
| `CAP-PFM-OPS-011` | `FEAT-PFM-OPS-03` | Make a reasoned exception to application licensing | confirmed | observed |
| `CAP-PFM-OPS-012` | `FEAT-PFM-OPS-03` | Derive application licences from commercial contracts | confirmed | partially-observed |
| `CAP-PFM-OPS-013` | `FEAT-PFM-OPS-03` | Explain workspace licensing to Rhythm staff | confirmed | inconsistent |
| `CAP-PFM-OPS-014` | `FEAT-PFM-OPS-04` | Resolve a workspace’s application availability | confirmed | observed |
| `CAP-PFM-OPS-015` | `FEAT-PFM-OPS-04` | Prepare and operate workspace applications | confirmed | observed |
| `CAP-PFM-OPS-016` | `FEAT-PFM-OPS-04` | Explain application availability to a customer administrator | confirmed | observed |

## Journeys

| Id | Title | Feature | Product intent | E2E policy |
|---|---|---|---|---|
| `JNY-PFM-OPS-001` | A customer administrator investigates workspace runs | `FEAT-PFM-OPS-01` | confirmed | required |
| `JNY-PFM-OPS-002` | Rhythm staff recover failed workspace provisioning | `FEAT-PFM-OPS-01` | confirmed | required |
| `JNY-PFM-OPS-003` | A console user returns to recently opened records | `FEAT-PFM-OPS-02` | confirmed | required |
| `JNY-PFM-OPS-004` | Rhythm staff withdraw and restore application access | `FEAT-PFM-OPS-03` | confirmed | required |
| `JNY-PFM-OPS-005` | Commercial contract changes update stored application coverage | `FEAT-PFM-OPS-03` | confirmed | none |

## Testing Layers

Each capability has a design-stage test specification with a category map and related-capability scenarios. Each feature has a cumulative acceptance suite. The implementation register identifies existing executable files, their verification boundaries and the scenario bindings supported by their assertions. Coverage findings retain unbound chains and incomplete design trace without implying approval or a passing run.
