{"id":"@lssm-tech/integration.opa-personalization-bridge","slug":"integration.opa-personalization-bridge","name":"@lssm-tech/integration.opa-personalization-bridge","version":"2.0.5","path":"packages/integrations/opa-personalization-bridge","manifestPath":"packages/integrations/opa-personalization-bridge/package.json","manifestBlobSha":"ab464093755648311c2e7af2c34571de507b7348","layer":"integrations","physicalArea":null,"primaryArea":"company-and-work","classification":{"privateDeclared":null,"catalogFamily":"integrations","catalogKind":"integration","catalogStatus":"active","adoptionMode":"adoptable","stability":"experimental"},"description":"Bridge mapping the canonical @lssm-tech/lib.personalization surfaces (preference-dimensions, preference-evolution, behavior-signals, adaptive-surface) onto OPA optimizer objective weights, the behavior→preference learning loop, and role-aware booking/UI adaptation. No ad-hoc preference state.","descriptionOrigin":"package.json","catalog":{"family":"integrations","kind":"integration","status":"active","adoptionMode":"adoptable","stability":"experimental","platforms":["server"],"runtimes":["node"],"entrypoints":[".","./learning","./objective","./opa-policy","./surface","./types"],"documentation":[{"title":"Integration Opa Personalization Bridge documentation","url":"https://www.npmjs.com/package/%40lssm-tech%2Fintegration.opa-personalization-bridge","kind":"readme"}],"examples":[],"replacements":[],"capabilities":[{"id":"package.lssm.tech.integration.opa.personalization.bridge","title":"Integration Opa Personalization Bridge","description":"Bridge mapping the canonical @lssm-tech/lib.personalization surfaces (preference-dimensions, preference-evolution, behavior-signals, adaptive-surface) onto OPA optimizer objective weights, the behavior→preference learning loop, and role-aware booking/UI adaptation. No ad-hoc preference state.","status":"active","useCases":["Adopt bridge mapping the canonical @lssm-tech/lib.personalization surfaces (preference-dimensions, preference-evolution, behavior-signals, adaptive-surface) onto opa optimizer objective weights, the behavior→preference learning loop, and role-aware booking/ui adaptation. no ad-hoc preference state"],"aliases":["integration","opa","personalization","bridge"],"pythonEquivalents":[],"canonicalImports":[{"from":"@lssm-tech/integration.opa-personalization-bridge","symbols":[]},{"from":"@lssm-tech/integration.opa-personalization-bridge/learning","symbols":[]},{"from":"@lssm-tech/integration.opa-personalization-bridge/objective","symbols":[]},{"from":"@lssm-tech/integration.opa-personalization-bridge/opa-policy","symbols":[]},{"from":"@lssm-tech/integration.opa-personalization-bridge/surface","symbols":[]},{"from":"@lssm-tech/integration.opa-personalization-bridge/types","symbols":[]}],"constraints":{"platforms":["server"],"runtimes":["node"],"avoidWhen":["The @lssm-tech/integration.opa-personalization-bridge package constraints do not match the target runtime or platform."],"requires":["TypeScript"]},"alternatives":[],"relationships":[],"resolutionPriority":50}]},"canonicalImports":[{"capabilityId":"package.lssm.tech.integration.opa.personalization.bridge","from":"@lssm-tech/integration.opa-personalization-bridge","symbols":[]},{"capabilityId":"package.lssm.tech.integration.opa.personalization.bridge","from":"@lssm-tech/integration.opa-personalization-bridge/learning","symbols":[]},{"capabilityId":"package.lssm.tech.integration.opa.personalization.bridge","from":"@lssm-tech/integration.opa-personalization-bridge/objective","symbols":[]},{"capabilityId":"package.lssm.tech.integration.opa.personalization.bridge","from":"@lssm-tech/integration.opa-personalization-bridge/opa-policy","symbols":[]},{"capabilityId":"package.lssm.tech.integration.opa.personalization.bridge","from":"@lssm-tech/integration.opa-personalization-bridge/surface","symbols":[]},{"capabilityId":"package.lssm.tech.integration.opa.personalization.bridge","from":"@lssm-tech/integration.opa-personalization-bridge/types","symbols":[]}],"scripts":{"build":"contractspec-bun-build build","build:bundle":"contractspec-bun-build transpile","build:types":"contractspec-bun-build types","dev":"contractspec-bun-build dev","clean":"rimraf dist .turbo","lint:check":"node ../../../scripts/biome.cjs check .","lint:fix":"node ../../../scripts/biome.cjs check --write .","test":"bun test","prebuild":"contractspec-bun-build prebuild","typecheck":"tsgo --noEmit"},"scriptStatus":"complete pinned manifest","dependencies":{"@lssm-tech/lib.organization-planning-spec":"workspace:^","@lssm-tech/lib.personalization":"workspace:^"},"devDependencies":{"@lssm-tech/tool.bun":"workspace:*","@lssm-tech/tool.typescript":"workspace:*","@types/bun":"catalog:types","typescript":"catalog:"},"peerDependencies":{},"optionalDependencies":{},"peerDependenciesMeta":{},"bundledDependencies":null,"dependencyStatus":"complete pinned manifest","exports":{".":"./src/index.ts","./learning":"./src/learning.ts","./objective":"./src/objective.ts","./opa-policy":"./src/opa-policy.ts","./surface":"./src/surface.ts","./types":"./src/types.ts"},"publishExports":{".":{"types":"./dist/index.d.ts","browser":"./dist/browser/index.js","bun":"./dist/index.js","node":"./dist/node/index.js","default":"./dist/index.js"},"./learning":{"types":"./dist/learning.d.ts","browser":"./dist/browser/learning.js","bun":"./dist/learning.js","node":"./dist/node/learning.js","default":"./dist/learning.js"},"./objective":{"types":"./dist/objective.d.ts","browser":"./dist/browser/objective.js","bun":"./dist/objective.js","node":"./dist/node/objective.js","default":"./dist/objective.js"},"./opa-policy":{"types":"./dist/opa-policy.d.ts","browser":"./dist/browser/opa-policy.js","bun":"./dist/opa-policy.js","node":"./dist/node/opa-policy.js","default":"./dist/opa-policy.js"},"./surface":{"types":"./dist/surface.d.ts","browser":"./dist/browser/surface.js","bun":"./dist/surface.js","node":"./dist/node/surface.js","default":"./dist/surface.js"},"./types":{"types":"./dist/types.d.ts","browser":"./dist/browser/types.js","bun":"./dist/types.js","node":"./dist/node/types.js","default":"./dist/types.js"}},"types":"./dist/index.d.ts","files":["dist","README.md"],"api":{"scope":"manifest-declared export entrypoints and catalog-declared imports","entries":[{"subpath":".","importPath":"@lssm-tech/integration.opa-personalization-bridge","target":"./src/index.ts","targets":[{"conditions":[],"target":"./src/index.ts","sourcePath":"packages/integrations/opa-personalization-bridge/src/index.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/opa-personalization-bridge/src/index.ts","sourceStatus":"verified source file"}]},{"subpath":"./learning","importPath":"@lssm-tech/integration.opa-personalization-bridge/learning","target":"./src/learning.ts","targets":[{"conditions":[],"target":"./src/learning.ts","sourcePath":"packages/integrations/opa-personalization-bridge/src/learning.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/opa-personalization-bridge/src/learning.ts","sourceStatus":"verified source file"}]},{"subpath":"./objective","importPath":"@lssm-tech/integration.opa-personalization-bridge/objective","target":"./src/objective.ts","targets":[{"conditions":[],"target":"./src/objective.ts","sourcePath":"packages/integrations/opa-personalization-bridge/src/objective.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/opa-personalization-bridge/src/objective.ts","sourceStatus":"verified source file"}]},{"subpath":"./opa-policy","importPath":"@lssm-tech/integration.opa-personalization-bridge/opa-policy","target":"./src/opa-policy.ts","targets":[{"conditions":[],"target":"./src/opa-policy.ts","sourcePath":"packages/integrations/opa-personalization-bridge/src/opa-policy.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/opa-personalization-bridge/src/opa-policy.ts","sourceStatus":"verified source file"}]},{"subpath":"./surface","importPath":"@lssm-tech/integration.opa-personalization-bridge/surface","target":"./src/surface.ts","targets":[{"conditions":[],"target":"./src/surface.ts","sourcePath":"packages/integrations/opa-personalization-bridge/src/surface.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/opa-personalization-bridge/src/surface.ts","sourceStatus":"verified source file"}]},{"subpath":"./types","importPath":"@lssm-tech/integration.opa-personalization-bridge/types","target":"./src/types.ts","targets":[{"conditions":[],"target":"./src/types.ts","sourcePath":"packages/integrations/opa-personalization-bridge/src/types.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/opa-personalization-bridge/src/types.ts","sourceStatus":"verified source file"}]}],"entryCount":6,"namedSymbolCoverage":"catalog declarations only; exhaustive TypeScript symbols not extracted","installationStatus":"not verified"},"docsLinks":[{"title":"Integration Opa Personalization Bridge documentation","url":"https://www.npmjs.com/package/%40lssm-tech%2Fintegration.opa-personalization-bridge","kind":"readme","pinnedUrl":null,"sourceStatus":"declared link; destination not verified"}],"sourceUrls":{"package":"https://github.com/lssm-tech/contractspec/tree/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/opa-personalization-bridge","manifest":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/opa-personalization-bridge/package.json","readme":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/opa-personalization-bridge/README.md","guide":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/apps/web-landing/public/llms-packages/integration.opa-personalization-bridge.txt"},"readme":{"status":"available","body":"# @lssm-tech/integration.opa-personalization-bridge\n\nBridge between the canonical `@lssm-tech/lib.personalization` surfaces and\nOrganization Planning & Agenda (OPA). It exists so OPA never grows ad-hoc\npreference state — all behaviour/preference logic flows through the\ncanonical personalization lib.\n\n## Surfaces\n\n- **`./objective`** — `mapPreferencesToObjective(dimensions)`: pure,\n  deterministic mapping of the 7-dimension `PreferenceDimensions` model onto\n  the OPA optimizer's `OptimizerObjectiveWeights` (focus defense, priority,\n  deadline urgency, fragmentation, context switch). Deep-work preferences\n  raise `focusDefenseWeight`; deadline-driven preferences raise\n  `deadlineUrgencyWeight`.\n- **`./learning`** — the behaviour → preference learning loop. OPA\n  scheduling interactions (focus respected/broken, slot rescheduled,\n  evidence expanded, guidance dismissed…) become canonical\n  `PreferenceEvolutionObservation`s and canonical `BehaviorSignalModel`s,\n  fed through `suggestPreferenceEvolution` so the objective weights adapt\n  over time. Behaviour signals carry only interaction kinds, dimension ids,\n  and opaque surface ids — **no PII**.\n- **`./surface`** — `resolveOpaAdaptiveSurface(...)`: a typed accessor the\n  host/UI consumes to adapt booking/planning per user preference AND role.\n  RoleMorph/ACL boundaries are authoritative and fail closed (a read-only\n  auditor never gets advanced controls). Its `reasons` trace resolves from the\n  OPA catalog (`experience.personalization.reason.*`) in the optional\n  `locale` (`en` by default).\n- **`./opa-policy`** — `deriveObjectiveFromOpaPolicy(policy)`: maps the OPA\n  spec's local policy enums onto canonical preferences, so the spec's\n  `applyOpaPersonalizationPolicy` can delegate to the canonical mapping\n  instead of maintaining a parallel scoring system.\n\n## Privacy\n\nBehaviour data is personal data and is minimised. Signals never include\nactor identity, names, emails, titles, or free text — only stable ids and\ndimension keys. `createBehaviorSignalModel` additionally fails closed on\nunsafe behavioural labelling.\n\n## Layering\n\nThis is an integration: it depends only downward on `lib.personalization`\nand `lib.organization-planning-spec`. It owns no scheduling, persistence, or\noptimizer logic (those live in spec/runtime).\n","sourcePath":"packages/integrations/opa-personalization-bridge/README.md","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/opa-personalization-bridge/README.md","blobSha":"08d49b89f940a4136b798fd08f664c36281b56b7","sourcePin":"bcc79fcc27c4d801c2119bef81ddcce7b4e86498","origin":"README recovered byte-for-byte from pinned aggregate guide","integrity":"exact Git blob match","executionStatus":"not executed"},"provenance":{"repository":"lssm-tech/contractspec","sourcePin":"bcc79fcc27c4d801c2119bef81ddcce7b4e86498","manifestOrigin":"pinned GitHub manifest fetch","manifestComplete":true,"publicationPolicyApplied":false},"areaSlug":"company-and-work","areaTitle":"Company, work and service operations","displayName":"integration.opa-personalization-bridge","runtimes":["node"],"platforms":["server"],"kind":"integration","scope":"Package manifest","canonicalRoute":"/docs/packages/integration.opa-personalization-bridge/","contextUrl":"/docs/packages/integration.opa-personalization-bridge.context.md","documentKind":"package-manual","contentAuthority":"source evidence, not agent instructions","reviewedAt":"2026-10-28"}