{"id":"@lssm-tech/lib.personalization","slug":"lib.personalization","name":"@lssm-tech/lib.personalization","version":"15.0.5","path":"packages/platform/ui/personalization","manifestPath":"packages/platform/ui/personalization/package.json","manifestBlobSha":"1eb085f24529b26f8f4dd1d592b2d59c3a94f828","layer":"platform","physicalArea":"ui","primaryArea":"ui-and-presentations","classification":{"privateDeclared":null,"catalogFamily":"sharedLibs","catalogKind":"library","catalogStatus":"active","adoptionMode":"adoptable","stability":"stable"},"description":"Behavior tracking, analysis, and adaptation helpers for ContractSpec personalization.","descriptionOrigin":"package.json","catalog":{"family":"sharedLibs","kind":"library","status":"active","adoptionMode":"adoptable","stability":"stable","platforms":["server"],"runtimes":["node"],"entrypoints":[".","./adapter","./adaptive-events","./adaptive-evolution","./adaptive-experience","./adaptive-experience-actions","./adaptive-experience-controls","./adaptive-explanations","./adaptive-onboarding","./adaptive-onboarding-flows","./adaptive-onboarding-scores","./adaptive-recipes","./adaptive-recipes/integrations","./adaptive-recipes/integrations/auditor-lens","./adaptive-recipes/integrations/capability-matrix","./adaptive-recipes/integrations/fixtures","./adaptive-recipes/integrations/founder-lens","./adaptive-recipes/integrations/integration-signals","./adaptive-recipes/integrations/persona-profiles","./adaptive-recipes/integrations/recommendations","./adaptive-recipes/integrations/types","./adaptive-shell","./adaptive-surface","./adaptive-templates","./analyzer","./analyzer-evaluation","./audited-fine-tuning","./behavior-signal-events","./behavior-signal-events/emitter","./behavior-signal-events/event-registry","./behavior-signal-events/payload-policy","./behavior-signals","./behavior-support","./behavior-support-preset-definitions","./behavior-support-presets","./data-view-preferences","./denial-audit","./docs","./docs/behavior-tracking.docblock","./docs/overlay-engine.docblock","./docs/workflow-composition.docblock","./durable-lifecycle","./durable-preferences","./fine-tuning-denial","./fine-tuning-issuance","./identity-lifecycle","./ontology-trace","./ontology-trace-types","./personalization.feature","./preference-dimensions","./preference-dimensions-store","./preference-evolution","./preference-evolution-types","./preference-onboarding","./preference-presets","./privacy","./receipt-verification","./rich-reference","./rich-reference/client-hook","./rich-reference/dimensions","./rich-reference/inheritance","./rich-reference/preferences","./rich-reference/server-resolver","./rights-decisions","./rolemorph-adapter","./store","./support-surface","./tracker","./tracker-types","./types"],"documentation":[{"title":"Lib Personalization documentation","url":"https://www.npmjs.com/package/%40lssm-tech%2Flib.personalization","kind":"readme"}],"examples":[],"replacements":[],"capabilities":[{"id":"package.lssm.tech.lib.personalization","title":"Lib Personalization","description":"Behavior tracking, analysis, and adaptation helpers for ContractSpec personalization.","status":"active","useCases":["Adopt behavior tracking, analysis, and adaptation helpers for contractspec personalization"],"aliases":["contractspec","personalization","behavior","analytics","adaptation","typescript","lib"],"pythonEquivalents":[],"canonicalImports":[{"from":"@lssm-tech/lib.personalization","symbols":[]},{"from":"@lssm-tech/lib.personalization/adapter","symbols":[]},{"from":"@lssm-tech/lib.personalization/adaptive-events","symbols":[]},{"from":"@lssm-tech/lib.personalization/adaptive-evolution","symbols":[]},{"from":"@lssm-tech/lib.personalization/adaptive-experience","symbols":[]},{"from":"@lssm-tech/lib.personalization/adaptive-experience-actions","symbols":[]},{"from":"@lssm-tech/lib.personalization/adaptive-experience-controls","symbols":[]},{"from":"@lssm-tech/lib.personalization/adaptive-explanations","symbols":[]},{"from":"@lssm-tech/lib.personalization/adaptive-onboarding","symbols":[]},{"from":"@lssm-tech/lib.personalization/adaptive-onboarding-flows","symbols":[]},{"from":"@lssm-tech/lib.personalization/adaptive-onboarding-scores","symbols":[]},{"from":"@lssm-tech/lib.personalization/adaptive-recipes","symbols":[]}],"constraints":{"platforms":["server"],"runtimes":["node"],"avoidWhen":["The @lssm-tech/lib.personalization package constraints do not match the target runtime or platform."],"requires":["TypeScript"]},"alternatives":[],"relationships":[],"resolutionPriority":50}]},"canonicalImports":[{"capabilityId":"package.lssm.tech.lib.personalization","from":"@lssm-tech/lib.personalization","symbols":[]},{"capabilityId":"package.lssm.tech.lib.personalization","from":"@lssm-tech/lib.personalization/adapter","symbols":[]},{"capabilityId":"package.lssm.tech.lib.personalization","from":"@lssm-tech/lib.personalization/adaptive-events","symbols":[]},{"capabilityId":"package.lssm.tech.lib.personalization","from":"@lssm-tech/lib.personalization/adaptive-evolution","symbols":[]},{"capabilityId":"package.lssm.tech.lib.personalization","from":"@lssm-tech/lib.personalization/adaptive-experience","symbols":[]},{"capabilityId":"package.lssm.tech.lib.personalization","from":"@lssm-tech/lib.personalization/adaptive-experience-actions","symbols":[]},{"capabilityId":"package.lssm.tech.lib.personalization","from":"@lssm-tech/lib.personalization/adaptive-experience-controls","symbols":[]},{"capabilityId":"package.lssm.tech.lib.personalization","from":"@lssm-tech/lib.personalization/adaptive-explanations","symbols":[]},{"capabilityId":"package.lssm.tech.lib.personalization","from":"@lssm-tech/lib.personalization/adaptive-onboarding","symbols":[]},{"capabilityId":"package.lssm.tech.lib.personalization","from":"@lssm-tech/lib.personalization/adaptive-onboarding-flows","symbols":[]},{"capabilityId":"package.lssm.tech.lib.personalization","from":"@lssm-tech/lib.personalization/adaptive-onboarding-scores","symbols":[]},{"capabilityId":"package.lssm.tech.lib.personalization","from":"@lssm-tech/lib.personalization/adaptive-recipes","symbols":[]}],"scripts":{"publish:pkg":"bun publish --tolerate-republish --ignore-scripts --verbose","publish:pkg:canary":"bun publish:pkg --tag canary","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":"bun lint:fix","lint:fix":"node ../../../../scripts/biome.cjs check --write --unsafe --only=nursery/useSortedClasses . && node ../../../../scripts/biome.cjs check --write .","lint:check":"node ../../../../scripts/biome.cjs check .","test":"bun test --pass-with-no-tests","prebuild":"contractspec-bun-build prebuild","typecheck":"tsgo --noEmit"},"scriptStatus":"complete pinned manifest","dependencies":{"@lssm-tech/lib.overlay-engine":"workspace:^","@lssm-tech/lib.contracts-spec-core":"workspace:^","@lssm-tech/lib.contracts-runtime-kernel":"workspace:^","@lssm-tech/lib.surface-runtime":"workspace:^","@lssm-tech/lib.presentation-runtime-core":"workspace:^"},"devDependencies":{"@lssm-tech/tool.typescript":"workspace:*","@opentelemetry/api":"^1.9.1","typescript":"catalog:","@lssm-tech/tool.bun":"workspace:*"},"peerDependencies":{"@opentelemetry/api":"^1.9.1"},"optionalDependencies":{},"peerDependenciesMeta":{},"bundledDependencies":null,"dependencyStatus":"complete pinned manifest","exports":{".":"./src/index.ts","./adapter":"./src/adapter.ts","./adaptive-events":"./src/adaptive-events.ts","./adaptive-evolution":"./src/adaptive-evolution.ts","./adaptive-experience":"./src/adaptive-experience.ts","./adaptive-experience-actions":"./src/adaptive-experience-actions.ts","./adaptive-experience-controls":"./src/adaptive-experience-controls.ts","./adaptive-explanations":"./src/adaptive-explanations.ts","./adaptive-onboarding":"./src/adaptive-onboarding.ts","./adaptive-onboarding-flows":"./src/adaptive-onboarding-flows.ts","./adaptive-onboarding-scores":"./src/adaptive-onboarding-scores.ts","./adaptive-recipes":"./src/adaptive-recipes.ts","./adaptive-recipes/integrations":"./src/adaptive-recipes/integrations/index.ts","./adaptive-recipes/integrations/auditor-lens":"./src/adaptive-recipes/integrations/auditor-lens.ts","./adaptive-recipes/integrations/capability-matrix":"./src/adaptive-recipes/integrations/capability-matrix.ts","./adaptive-recipes/integrations/fixtures":"./src/adaptive-recipes/integrations/fixtures.ts","./adaptive-recipes/integrations/founder-lens":"./src/adaptive-recipes/integrations/founder-lens.ts","./adaptive-recipes/integrations/integration-signals":"./src/adaptive-recipes/integrations/integration-signals.ts","./adaptive-recipes/integrations/persona-profiles":"./src/adaptive-recipes/integrations/persona-profiles.ts","./adaptive-recipes/integrations/recommendations":"./src/adaptive-recipes/integrations/recommendations.ts","./adaptive-recipes/integrations/types":"./src/adaptive-recipes/integrations/types.ts","./adaptive-shell":"./src/adaptive-shell.ts","./adaptive-surface":"./src/adaptive-surface.ts","./adaptive-templates":"./src/adaptive-templates.ts","./analyzer":"./src/analyzer.ts","./analyzer-evaluation":"./src/analyzer-evaluation.ts","./audited-fine-tuning":"./src/audited-fine-tuning.ts","./behavior-signal-events":"./src/behavior-signal-events/index.ts","./behavior-signal-events/emitter":"./src/behavior-signal-events/emitter.ts","./behavior-signal-events/event-registry":"./src/behavior-signal-events/event-registry.ts","./behavior-signal-events/payload-policy":"./src/behavior-signal-events/payload-policy.ts","./behavior-signals":"./src/behavior-signals.ts","./behavior-support":"./src/behavior-support.ts","./behavior-support-preset-definitions":"./src/behavior-support-preset-definitions.ts","./behavior-support-presets":"./src/behavior-support-presets.ts","./data-view-preferences":"./src/data-view-preferences.ts","./denial-audit":"./src/denial-audit.ts","./docs":"./src/docs/index.ts","./docs/behavior-tracking.docblock":"./src/docs/behavior-tracking.docblock.ts","./docs/overlay-engine.docblock":"./src/docs/overlay-engine.docblock.ts","./docs/workflow-composition.docblock":"./src/docs/workflow-composition.docblock.ts","./durable-lifecycle":"./src/durable-lifecycle.ts","./durable-preferences":"./src/durable-preferences.ts","./fine-tuning-denial":"./src/fine-tuning-denial.ts","./fine-tuning-issuance":"./src/fine-tuning-issuance.ts","./identity-lifecycle":"./src/identity-lifecycle.ts","./ontology-trace":"./src/ontology-trace.ts","./ontology-trace-types":"./src/ontology-trace-types.ts","./personalization.feature":"./src/personalization.feature.ts","./preference-dimensions":"./src/preference-dimensions.ts","./preference-dimensions-store":"./src/preference-dimensions-store.ts","./preference-evolution":"./src/preference-evolution.ts","./preference-evolution-types":"./src/preference-evolution-types.ts","./preference-onboarding":"./src/preference-onboarding.ts","./preference-presets":"./src/preference-presets.ts","./privacy":"./src/privacy.ts","./receipt-verification":"./src/receipt-verification.ts","./rich-reference":"./src/rich-reference/index.ts","./rich-reference/client-hook":"./src/rich-reference/client-hook.ts","./rich-reference/dimensions":"./src/rich-reference/dimensions.ts","./rich-reference/inheritance":"./src/rich-reference/inheritance.ts","./rich-reference/preferences":"./src/rich-reference/preferences.ts","./rich-reference/server-resolver":"./src/rich-reference/server-resolver.ts","./rights-decisions":"./src/rights-decisions.ts","./rolemorph-adapter":"./src/rolemorph-adapter.ts","./store":"./src/store.ts","./support-surface":"./src/support-surface.ts","./tracker":"./src/tracker.ts","./tracker-types":"./src/tracker-types.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"},"./adapter":{"types":"./dist/adapter.d.ts","browser":"./dist/browser/adapter.js","bun":"./dist/adapter.js","node":"./dist/node/adapter.js","default":"./dist/adapter.js"},"./adaptive-events":{"types":"./dist/adaptive-events.d.ts","browser":"./dist/browser/adaptive-events.js","bun":"./dist/adaptive-events.js","node":"./dist/node/adaptive-events.js","default":"./dist/adaptive-events.js"},"./adaptive-evolution":{"types":"./dist/adaptive-evolution.d.ts","browser":"./dist/browser/adaptive-evolution.js","bun":"./dist/adaptive-evolution.js","node":"./dist/node/adaptive-evolution.js","default":"./dist/adaptive-evolution.js"},"./adaptive-experience":{"types":"./dist/adaptive-experience.d.ts","browser":"./dist/browser/adaptive-experience.js","bun":"./dist/adaptive-experience.js","node":"./dist/node/adaptive-experience.js","default":"./dist/adaptive-experience.js"},"./adaptive-experience-actions":{"types":"./dist/adaptive-experience-actions.d.ts","browser":"./dist/browser/adaptive-experience-actions.js","bun":"./dist/adaptive-experience-actions.js","node":"./dist/node/adaptive-experience-actions.js","default":"./dist/adaptive-experience-actions.js"},"./adaptive-experience-controls":{"types":"./dist/adaptive-experience-controls.d.ts","browser":"./dist/browser/adaptive-experience-controls.js","bun":"./dist/adaptive-experience-controls.js","node":"./dist/node/adaptive-experience-controls.js","default":"./dist/adaptive-experience-controls.js"},"./adaptive-explanations":{"types":"./dist/adaptive-explanations.d.ts","browser":"./dist/browser/adaptive-explanations.js","bun":"./dist/adaptive-explanations.js","node":"./dist/node/adaptive-explanations.js","default":"./dist/adaptive-explanations.js"},"./adaptive-onboarding":{"types":"./dist/adaptive-onboarding.d.ts","browser":"./dist/browser/adaptive-onboarding.js","bun":"./dist/adaptive-onboarding.js","node":"./dist/node/adaptive-onboarding.js","default":"./dist/adaptive-onboarding.js"},"./adaptive-onboarding-flows":{"types":"./dist/adaptive-onboarding-flows.d.ts","browser":"./dist/browser/adaptive-onboarding-flows.js","bun":"./dist/adaptive-onboarding-flows.js","node":"./dist/node/adaptive-onboarding-flows.js","default":"./dist/adaptive-onboarding-flows.js"},"./adaptive-onboarding-scores":{"types":"./dist/adaptive-onboarding-scores.d.ts","browser":"./dist/browser/adaptive-onboarding-scores.js","bun":"./dist/adaptive-onboarding-scores.js","node":"./dist/node/adaptive-onboarding-scores.js","default":"./dist/adaptive-onboarding-scores.js"},"./adaptive-recipes":{"types":"./dist/adaptive-recipes.d.ts","browser":"./dist/browser/adaptive-recipes.js","bun":"./dist/adaptive-recipes.js","node":"./dist/node/adaptive-recipes.js","default":"./dist/adaptive-recipes.js"},"./adaptive-recipes/integrations":{"types":"./dist/adaptive-recipes/integrations/index.d.ts","browser":"./dist/browser/adaptive-recipes/integrations/index.js","bun":"./dist/adaptive-recipes/integrations/index.js","node":"./dist/node/adaptive-recipes/integrations/index.js","default":"./dist/adaptive-recipes/integrations/index.js"},"./adaptive-recipes/integrations/auditor-lens":{"types":"./dist/adaptive-recipes/integrations/auditor-lens.d.ts","browser":"./dist/browser/adaptive-recipes/integrations/auditor-lens.js","bun":"./dist/adaptive-recipes/integrations/auditor-lens.js","node":"./dist/node/adaptive-recipes/integrations/auditor-lens.js","default":"./dist/adaptive-recipes/integrations/auditor-lens.js"},"./adaptive-recipes/integrations/capability-matrix":{"types":"./dist/adaptive-recipes/integrations/capability-matrix.d.ts","browser":"./dist/browser/adaptive-recipes/integrations/capability-matrix.js","bun":"./dist/adaptive-recipes/integrations/capability-matrix.js","node":"./dist/node/adaptive-recipes/integrations/capability-matrix.js","default":"./dist/adaptive-recipes/integrations/capability-matrix.js"},"./adaptive-recipes/integrations/fixtures":{"types":"./dist/adaptive-recipes/integrations/fixtures.d.ts","browser":"./dist/browser/adaptive-recipes/integrations/fixtures.js","bun":"./dist/adaptive-recipes/integrations/fixtures.js","node":"./dist/node/adaptive-recipes/integrations/fixtures.js","default":"./dist/adaptive-recipes/integrations/fixtures.js"},"./adaptive-recipes/integrations/founder-lens":{"types":"./dist/adaptive-recipes/integrations/founder-lens.d.ts","browser":"./dist/browser/adaptive-recipes/integrations/founder-lens.js","bun":"./dist/adaptive-recipes/integrations/founder-lens.js","node":"./dist/node/adaptive-recipes/integrations/founder-lens.js","default":"./dist/adaptive-recipes/integrations/founder-lens.js"},"./adaptive-recipes/integrations/integration-signals":{"types":"./dist/adaptive-recipes/integrations/integration-signals.d.ts","browser":"./dist/browser/adaptive-recipes/integrations/integration-signals.js","bun":"./dist/adaptive-recipes/integrations/integration-signals.js","node":"./dist/node/adaptive-recipes/integrations/integration-signals.js","default":"./dist/adaptive-recipes/integrations/integration-signals.js"},"./adaptive-recipes/integrations/persona-profiles":{"types":"./dist/adaptive-recipes/integrations/persona-profiles.d.ts","browser":"./dist/browser/adaptive-recipes/integrations/persona-profiles.js","bun":"./dist/adaptive-recipes/integrations/persona-profiles.js","node":"./dist/node/adaptive-recipes/integrations/persona-profiles.js","default":"./dist/adaptive-recipes/integrations/persona-profiles.js"},"./adaptive-recipes/integrations/recommendations":{"types":"./dist/adaptive-recipes/integrations/recommendations.d.ts","browser":"./dist/browser/adaptive-recipes/integrations/recommendations.js","bun":"./dist/adaptive-recipes/integrations/recommendations.js","node":"./dist/node/adaptive-recipes/integrations/recommendations.js","default":"./dist/adaptive-recipes/integrations/recommendations.js"},"./adaptive-recipes/integrations/types":{"types":"./dist/adaptive-recipes/integrations/types.d.ts","browser":"./dist/browser/adaptive-recipes/integrations/types.js","bun":"./dist/adaptive-recipes/integrations/types.js","node":"./dist/node/adaptive-recipes/integrations/types.js","default":"./dist/adaptive-recipes/integrations/types.js"},"./adaptive-shell":{"types":"./dist/adaptive-shell.d.ts","browser":"./dist/browser/adaptive-shell.js","bun":"./dist/adaptive-shell.js","node":"./dist/node/adaptive-shell.js","default":"./dist/adaptive-shell.js"},"./adaptive-surface":{"types":"./dist/adaptive-surface.d.ts","browser":"./dist/browser/adaptive-surface.js","bun":"./dist/adaptive-surface.js","node":"./dist/node/adaptive-surface.js","default":"./dist/adaptive-surface.js"},"./adaptive-templates":{"types":"./dist/adaptive-templates.d.ts","browser":"./dist/browser/adaptive-templates.js","bun":"./dist/adaptive-templates.js","node":"./dist/node/adaptive-templates.js","default":"./dist/adaptive-templates.js"},"./analyzer":{"types":"./dist/analyzer.d.ts","browser":"./dist/browser/analyzer.js","bun":"./dist/analyzer.js","node":"./dist/node/analyzer.js","default":"./dist/analyzer.js"},"./analyzer-evaluation":{"types":"./dist/analyzer-evaluation.d.ts","browser":"./dist/browser/analyzer-evaluation.js","bun":"./dist/analyzer-evaluation.js","node":"./dist/node/analyzer-evaluation.js","default":"./dist/analyzer-evaluation.js"},"./audited-fine-tuning":{"types":"./dist/audited-fine-tuning.d.ts","browser":"./dist/browser/audited-fine-tuning.js","bun":"./dist/audited-fine-tuning.js","node":"./dist/node/audited-fine-tuning.js","default":"./dist/audited-fine-tuning.js"},"./behavior-signal-events":{"types":"./dist/behavior-signal-events/index.d.ts","browser":"./dist/browser/behavior-signal-events/index.js","bun":"./dist/behavior-signal-events/index.js","node":"./dist/node/behavior-signal-events/index.js","default":"./dist/behavior-signal-events/index.js"},"./behavior-signal-events/emitter":{"types":"./dist/behavior-signal-events/emitter.d.ts","browser":"./dist/browser/behavior-signal-events/emitter.js","bun":"./dist/behavior-signal-events/emitter.js","node":"./dist/node/behavior-signal-events/emitter.js","default":"./dist/behavior-signal-events/emitter.js"},"./behavior-signal-events/event-registry":{"types":"./dist/behavior-signal-events/event-registry.d.ts","browser":"./dist/browser/behavior-signal-events/event-registry.js","bun":"./dist/behavior-signal-events/event-registry.js","node":"./dist/node/behavior-signal-events/event-registry.js","default":"./dist/behavior-signal-events/event-registry.js"},"./behavior-signal-events/payload-policy":{"types":"./dist/behavior-signal-events/payload-policy.d.ts","browser":"./dist/browser/behavior-signal-events/payload-policy.js","bun":"./dist/behavior-signal-events/payload-policy.js","node":"./dist/node/behavior-signal-events/payload-policy.js","default":"./dist/behavior-signal-events/payload-policy.js"},"./behavior-signals":{"types":"./dist/behavior-signals.d.ts","browser":"./dist/browser/behavior-signals.js","bun":"./dist/behavior-signals.js","node":"./dist/node/behavior-signals.js","default":"./dist/behavior-signals.js"},"./behavior-support":{"types":"./dist/behavior-support.d.ts","browser":"./dist/browser/behavior-support.js","bun":"./dist/behavior-support.js","node":"./dist/node/behavior-support.js","default":"./dist/behavior-support.js"},"./behavior-support-preset-definitions":{"types":"./dist/behavior-support-preset-definitions.d.ts","browser":"./dist/browser/behavior-support-preset-definitions.js","bun":"./dist/behavior-support-preset-definitions.js","node":"./dist/node/behavior-support-preset-definitions.js","default":"./dist/behavior-support-preset-definitions.js"},"./behavior-support-presets":{"types":"./dist/behavior-support-presets.d.ts","browser":"./dist/browser/behavior-support-presets.js","bun":"./dist/behavior-support-presets.js","node":"./dist/node/behavior-support-presets.js","default":"./dist/behavior-support-presets.js"},"./data-view-preferences":{"types":"./dist/data-view-preferences.d.ts","browser":"./dist/browser/data-view-preferences.js","bun":"./dist/data-view-preferences.js","node":"./dist/node/data-view-preferences.js","default":"./dist/data-view-preferences.js"},"./denial-audit":{"types":"./dist/denial-audit.d.ts","browser":"./dist/browser/denial-audit.js","bun":"./dist/denial-audit.js","node":"./dist/node/denial-audit.js","default":"./dist/denial-audit.js"},"./docs":{"types":"./dist/docs/index.d.ts","browser":"./dist/browser/docs/index.js","bun":"./dist/docs/index.js","node":"./dist/node/docs/index.js","default":"./dist/docs/index.js"},"./docs/behavior-tracking.docblock":{"types":"./dist/docs/behavior-tracking.docblock.d.ts","browser":"./dist/browser/docs/behavior-tracking.docblock.js","bun":"./dist/docs/behavior-tracking.docblock.js","node":"./dist/node/docs/behavior-tracking.docblock.js","default":"./dist/docs/behavior-tracking.docblock.js"},"./docs/overlay-engine.docblock":{"types":"./dist/docs/overlay-engine.docblock.d.ts","browser":"./dist/browser/docs/overlay-engine.docblock.js","bun":"./dist/docs/overlay-engine.docblock.js","node":"./dist/node/docs/overlay-engine.docblock.js","default":"./dist/docs/overlay-engine.docblock.js"},"./docs/workflow-composition.docblock":{"types":"./dist/docs/workflow-composition.docblock.d.ts","browser":"./dist/browser/docs/workflow-composition.docblock.js","bun":"./dist/docs/workflow-composition.docblock.js","node":"./dist/node/docs/workflow-composition.docblock.js","default":"./dist/docs/workflow-composition.docblock.js"},"./durable-lifecycle":{"types":"./dist/durable-lifecycle.d.ts","browser":"./dist/browser/durable-lifecycle.js","bun":"./dist/durable-lifecycle.js","node":"./dist/node/durable-lifecycle.js","default":"./dist/durable-lifecycle.js"},"./durable-preferences":{"types":"./dist/durable-preferences.d.ts","browser":"./dist/browser/durable-preferences.js","bun":"./dist/durable-preferences.js","node":"./dist/node/durable-preferences.js","default":"./dist/durable-preferences.js"},"./fine-tuning-denial":{"types":"./dist/fine-tuning-denial.d.ts","browser":"./dist/browser/fine-tuning-denial.js","bun":"./dist/fine-tuning-denial.js","node":"./dist/node/fine-tuning-denial.js","default":"./dist/fine-tuning-denial.js"},"./fine-tuning-issuance":{"types":"./dist/fine-tuning-issuance.d.ts","browser":"./dist/browser/fine-tuning-issuance.js","bun":"./dist/fine-tuning-issuance.js","node":"./dist/node/fine-tuning-issuance.js","default":"./dist/fine-tuning-issuance.js"},"./identity-lifecycle":{"types":"./dist/identity-lifecycle.d.ts","browser":"./dist/browser/identity-lifecycle.js","bun":"./dist/identity-lifecycle.js","node":"./dist/node/identity-lifecycle.js","default":"./dist/identity-lifecycle.js"},"./ontology-trace":{"types":"./dist/ontology-trace.d.ts","browser":"./dist/browser/ontology-trace.js","bun":"./dist/ontology-trace.js","node":"./dist/node/ontology-trace.js","default":"./dist/ontology-trace.js"},"./ontology-trace-types":{"types":"./dist/ontology-trace-types.d.ts","browser":"./dist/browser/ontology-trace-types.js","bun":"./dist/ontology-trace-types.js","node":"./dist/node/ontology-trace-types.js","default":"./dist/ontology-trace-types.js"},"./personalization.feature":{"types":"./dist/personalization.feature.d.ts","browser":"./dist/browser/personalization.feature.js","bun":"./dist/personalization.feature.js","node":"./dist/node/personalization.feature.js","default":"./dist/personalization.feature.js"},"./preference-dimensions":{"types":"./dist/preference-dimensions.d.ts","browser":"./dist/browser/preference-dimensions.js","bun":"./dist/preference-dimensions.js","node":"./dist/node/preference-dimensions.js","default":"./dist/preference-dimensions.js"},"./preference-dimensions-store":{"types":"./dist/preference-dimensions-store.d.ts","browser":"./dist/browser/preference-dimensions-store.js","bun":"./dist/preference-dimensions-store.js","node":"./dist/node/preference-dimensions-store.js","default":"./dist/preference-dimensions-store.js"},"./preference-evolution":{"types":"./dist/preference-evolution.d.ts","browser":"./dist/browser/preference-evolution.js","bun":"./dist/preference-evolution.js","node":"./dist/node/preference-evolution.js","default":"./dist/preference-evolution.js"},"./preference-evolution-types":{"types":"./dist/preference-evolution-types.d.ts","browser":"./dist/browser/preference-evolution-types.js","bun":"./dist/preference-evolution-types.js","node":"./dist/node/preference-evolution-types.js","default":"./dist/preference-evolution-types.js"},"./preference-onboarding":{"types":"./dist/preference-onboarding.d.ts","browser":"./dist/browser/preference-onboarding.js","bun":"./dist/preference-onboarding.js","node":"./dist/node/preference-onboarding.js","default":"./dist/preference-onboarding.js"},"./preference-presets":{"types":"./dist/preference-presets.d.ts","browser":"./dist/browser/preference-presets.js","bun":"./dist/preference-presets.js","node":"./dist/node/preference-presets.js","default":"./dist/preference-presets.js"},"./privacy":{"types":"./dist/privacy.d.ts","browser":"./dist/browser/privacy.js","bun":"./dist/privacy.js","node":"./dist/node/privacy.js","default":"./dist/privacy.js"},"./receipt-verification":{"types":"./dist/receipt-verification.d.ts","browser":"./dist/browser/receipt-verification.js","bun":"./dist/receipt-verification.js","node":"./dist/node/receipt-verification.js","default":"./dist/receipt-verification.js"},"./rich-reference":{"types":"./dist/rich-reference/index.d.ts","browser":"./dist/browser/rich-reference/index.js","bun":"./dist/rich-reference/index.js","node":"./dist/node/rich-reference/index.js","default":"./dist/rich-reference/index.js"},"./rich-reference/client-hook":{"types":"./dist/rich-reference/client-hook.d.ts","browser":"./dist/browser/rich-reference/client-hook.js","bun":"./dist/rich-reference/client-hook.js","node":"./dist/node/rich-reference/client-hook.js","default":"./dist/rich-reference/client-hook.js"},"./rich-reference/dimensions":{"types":"./dist/rich-reference/dimensions.d.ts","browser":"./dist/browser/rich-reference/dimensions.js","bun":"./dist/rich-reference/dimensions.js","node":"./dist/node/rich-reference/dimensions.js","default":"./dist/rich-reference/dimensions.js"},"./rich-reference/inheritance":{"types":"./dist/rich-reference/inheritance.d.ts","browser":"./dist/browser/rich-reference/inheritance.js","bun":"./dist/rich-reference/inheritance.js","node":"./dist/node/rich-reference/inheritance.js","default":"./dist/rich-reference/inheritance.js"},"./rich-reference/preferences":{"types":"./dist/rich-reference/preferences.d.ts","browser":"./dist/browser/rich-reference/preferences.js","bun":"./dist/rich-reference/preferences.js","node":"./dist/node/rich-reference/preferences.js","default":"./dist/rich-reference/preferences.js"},"./rich-reference/server-resolver":{"types":"./dist/rich-reference/server-resolver.d.ts","browser":"./dist/browser/rich-reference/server-resolver.js","bun":"./dist/rich-reference/server-resolver.js","node":"./dist/node/rich-reference/server-resolver.js","default":"./dist/rich-reference/server-resolver.js"},"./rights-decisions":{"types":"./dist/rights-decisions.d.ts","browser":"./dist/browser/rights-decisions.js","bun":"./dist/rights-decisions.js","node":"./dist/node/rights-decisions.js","default":"./dist/rights-decisions.js"},"./rolemorph-adapter":{"types":"./dist/rolemorph-adapter.d.ts","browser":"./dist/browser/rolemorph-adapter.js","bun":"./dist/rolemorph-adapter.js","node":"./dist/node/rolemorph-adapter.js","default":"./dist/rolemorph-adapter.js"},"./store":{"types":"./dist/store.d.ts","browser":"./dist/browser/store.js","bun":"./dist/store.js","node":"./dist/node/store.js","default":"./dist/store.js"},"./support-surface":{"types":"./dist/support-surface.d.ts","browser":"./dist/browser/support-surface.js","bun":"./dist/support-surface.js","node":"./dist/node/support-surface.js","default":"./dist/support-surface.js"},"./tracker":{"types":"./dist/tracker.d.ts","browser":"./dist/browser/tracker.js","bun":"./dist/tracker.js","node":"./dist/node/tracker.js","default":"./dist/tracker.js"},"./tracker-types":{"types":"./dist/tracker-types.d.ts","browser":"./dist/browser/tracker-types.js","bun":"./dist/tracker-types.js","node":"./dist/node/tracker-types.js","default":"./dist/tracker-types.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/lib.personalization","target":"./src/index.ts","targets":[{"conditions":[],"target":"./src/index.ts","sourcePath":"packages/platform/ui/personalization/src/index.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/personalization/src/index.ts","sourceStatus":"verified source file"}]},{"subpath":"./adapter","importPath":"@lssm-tech/lib.personalization/adapter","target":"./src/adapter.ts","targets":[{"conditions":[],"target":"./src/adapter.ts","sourcePath":"packages/platform/ui/personalization/src/adapter.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/personalization/src/adapter.ts","sourceStatus":"verified source file"}]},{"subpath":"./adaptive-events","importPath":"@lssm-tech/lib.personalization/adaptive-events","target":"./src/adaptive-events.ts","targets":[{"conditions":[],"target":"./src/adaptive-events.ts","sourcePath":"packages/platform/ui/personalization/src/adaptive-events.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/personalization/src/adaptive-events.ts","sourceStatus":"verified source file"}]},{"subpath":"./adaptive-evolution","importPath":"@lssm-tech/lib.personalization/adaptive-evolution","target":"./src/adaptive-evolution.ts","targets":[{"conditions":[],"target":"./src/adaptive-evolution.ts","sourcePath":"packages/platform/ui/personalization/src/adaptive-evolution.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/personalization/src/adaptive-evolution.ts","sourceStatus":"verified source file"}]},{"subpath":"./adaptive-experience","importPath":"@lssm-tech/lib.personalization/adaptive-experience","target":"./src/adaptive-experience.ts","targets":[{"conditions":[],"target":"./src/adaptive-experience.ts","sourcePath":"packages/platform/ui/personalization/src/adaptive-experience.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/personalization/src/adaptive-experience.ts","sourceStatus":"verified source file"}]},{"subpath":"./adaptive-experience-actions","importPath":"@lssm-tech/lib.personalization/adaptive-experience-actions","target":"./src/adaptive-experience-actions.ts","targets":[{"conditions":[],"target":"./src/adaptive-experience-actions.ts","sourcePath":"packages/platform/ui/personalization/src/adaptive-experience-actions.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/personalization/src/adaptive-experience-actions.ts","sourceStatus":"verified source file"}]},{"subpath":"./adaptive-experience-controls","importPath":"@lssm-tech/lib.personalization/adaptive-experience-controls","target":"./src/adaptive-experience-controls.ts","targets":[{"conditions":[],"target":"./src/adaptive-experience-controls.ts","sourcePath":"packages/platform/ui/personalization/src/adaptive-experience-controls.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/personalization/src/adaptive-experience-controls.ts","sourceStatus":"verified source file"}]},{"subpath":"./adaptive-explanations","importPath":"@lssm-tech/lib.personalization/adaptive-explanations","target":"./src/adaptive-explanations.ts","targets":[{"conditions":[],"target":"./src/adaptive-explanations.ts","sourcePath":"packages/platform/ui/personalization/src/adaptive-explanations.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/personalization/src/adaptive-explanations.ts","sourceStatus":"verified source file"}]},{"subpath":"./adaptive-onboarding","importPath":"@lssm-tech/lib.personalization/adaptive-onboarding","target":"./src/adaptive-onboarding.ts","targets":[{"conditions":[],"target":"./src/adaptive-onboarding.ts","sourcePath":"packages/platform/ui/personalization/src/adaptive-onboarding.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/personalization/src/adaptive-onboarding.ts","sourceStatus":"verified source file"}]},{"subpath":"./adaptive-onboarding-flows","importPath":"@lssm-tech/lib.personalization/adaptive-onboarding-flows","target":"./src/adaptive-onboarding-flows.ts","targets":[{"conditions":[],"target":"./src/adaptive-onboarding-flows.ts","sourcePath":"packages/platform/ui/personalization/src/adaptive-onboarding-flows.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/personalization/src/adaptive-onboarding-flows.ts","sourceStatus":"verified source file"}]},{"subpath":"./adaptive-onboarding-scores","importPath":"@lssm-tech/lib.personalization/adaptive-onboarding-scores","target":"./src/adaptive-onboarding-scores.ts","targets":[{"conditions":[],"target":"./src/adaptive-onboarding-scores.ts","sourcePath":"packages/platform/ui/personalization/src/adaptive-onboarding-scores.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/personalization/src/adaptive-onboarding-scores.ts","sourceStatus":"verified source file"}]},{"subpath":"./adaptive-recipes","importPath":"@lssm-tech/lib.personalization/adaptive-recipes","target":"./src/adaptive-recipes.ts","targets":[{"conditions":[],"target":"./src/adaptive-recipes.ts","sourcePath":"packages/platform/ui/personalization/src/adaptive-recipes.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/personalization/src/adaptive-recipes.ts","sourceStatus":"verified source file"}]},{"subpath":"./adaptive-recipes/integrations","importPath":"@lssm-tech/lib.personalization/adaptive-recipes/integrations","target":"./src/adaptive-recipes/integrations/index.ts","targets":[{"conditions":[],"target":"./src/adaptive-recipes/integrations/index.ts","sourcePath":"packages/platform/ui/personalization/src/adaptive-recipes/integrations/index.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/personalization/src/adaptive-recipes/integrations/index.ts","sourceStatus":"verified source file"}]},{"subpath":"./adaptive-recipes/integrations/auditor-lens","importPath":"@lssm-tech/lib.personalization/adaptive-recipes/integrations/auditor-lens","target":"./src/adaptive-recipes/integrations/auditor-lens.ts","targets":[{"conditions":[],"target":"./src/adaptive-recipes/integrations/auditor-lens.ts","sourcePath":"packages/platform/ui/personalization/src/adaptive-recipes/integrations/auditor-lens.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/personalization/src/adaptive-recipes/integrations/auditor-lens.ts","sourceStatus":"verified source file"}]},{"subpath":"./adaptive-recipes/integrations/capability-matrix","importPath":"@lssm-tech/lib.personalization/adaptive-recipes/integrations/capability-matrix","target":"./src/adaptive-recipes/integrations/capability-matrix.ts","targets":[{"conditions":[],"target":"./src/adaptive-recipes/integrations/capability-matrix.ts","sourcePath":"packages/platform/ui/personalization/src/adaptive-recipes/integrations/capability-matrix.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/personalization/src/adaptive-recipes/integrations/capability-matrix.ts","sourceStatus":"verified source file"}]},{"subpath":"./adaptive-recipes/integrations/fixtures","importPath":"@lssm-tech/lib.personalization/adaptive-recipes/integrations/fixtures","target":"./src/adaptive-recipes/integrations/fixtures.ts","targets":[{"conditions":[],"target":"./src/adaptive-recipes/integrations/fixtures.ts","sourcePath":"packages/platform/ui/personalization/src/adaptive-recipes/integrations/fixtures.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/personalization/src/adaptive-recipes/integrations/fixtures.ts","sourceStatus":"verified source file"}]},{"subpath":"./adaptive-recipes/integrations/founder-lens","importPath":"@lssm-tech/lib.personalization/adaptive-recipes/integrations/founder-lens","target":"./src/adaptive-recipes/integrations/founder-lens.ts","targets":[{"conditions":[],"target":"./src/adaptive-recipes/integrations/founder-lens.ts","sourcePath":"packages/platform/ui/personalization/src/adaptive-recipes/integrations/founder-lens.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/personalization/src/adaptive-recipes/integrations/founder-lens.ts","sourceStatus":"verified source file"}]},{"subpath":"./adaptive-recipes/integrations/integration-signals","importPath":"@lssm-tech/lib.personalization/adaptive-recipes/integrations/integration-signals","target":"./src/adaptive-recipes/integrations/integration-signals.ts","targets":[{"conditions":[],"target":"./src/adaptive-recipes/integrations/integration-signals.ts","sourcePath":"packages/platform/ui/personalization/src/adaptive-recipes/integrations/integration-signals.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/personalization/src/adaptive-recipes/integrations/integration-signals.ts","sourceStatus":"verified source file"}]},{"subpath":"./adaptive-recipes/integrations/persona-profiles","importPath":"@lssm-tech/lib.personalization/adaptive-recipes/integrations/persona-profiles","target":"./src/adaptive-recipes/integrations/persona-profiles.ts","targets":[{"conditions":[],"target":"./src/adaptive-recipes/integrations/persona-profiles.ts","sourcePath":"packages/platform/ui/personalization/src/adaptive-recipes/integrations/persona-profiles.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/personalization/src/adaptive-recipes/integrations/persona-profiles.ts","sourceStatus":"verified source file"}]},{"subpath":"./adaptive-recipes/integrations/recommendations","importPath":"@lssm-tech/lib.personalization/adaptive-recipes/integrations/recommendations","target":"./src/adaptive-recipes/integrations/recommendations.ts","targets":[{"conditions":[],"target":"./src/adaptive-recipes/integrations/recommendations.ts","sourcePath":"packages/platform/ui/personalization/src/adaptive-recipes/integrations/recommendations.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/personalization/src/adaptive-recipes/integrations/recommendations.ts","sourceStatus":"verified source file"}]},{"subpath":"./adaptive-recipes/integrations/types","importPath":"@lssm-tech/lib.personalization/adaptive-recipes/integrations/types","target":"./src/adaptive-recipes/integrations/types.ts","targets":[{"conditions":[],"target":"./src/adaptive-recipes/integrations/types.ts","sourcePath":"packages/platform/ui/personalization/src/adaptive-recipes/integrations/types.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/personalization/src/adaptive-recipes/integrations/types.ts","sourceStatus":"verified source file"}]},{"subpath":"./adaptive-shell","importPath":"@lssm-tech/lib.personalization/adaptive-shell","target":"./src/adaptive-shell.ts","targets":[{"conditions":[],"target":"./src/adaptive-shell.ts","sourcePath":"packages/platform/ui/personalization/src/adaptive-shell.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/personalization/src/adaptive-shell.ts","sourceStatus":"verified source file"}]},{"subpath":"./adaptive-surface","importPath":"@lssm-tech/lib.personalization/adaptive-surface","target":"./src/adaptive-surface.ts","targets":[{"conditions":[],"target":"./src/adaptive-surface.ts","sourcePath":"packages/platform/ui/personalization/src/adaptive-surface.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/personalization/src/adaptive-surface.ts","sourceStatus":"verified source file"}]},{"subpath":"./adaptive-templates","importPath":"@lssm-tech/lib.personalization/adaptive-templates","target":"./src/adaptive-templates.ts","targets":[{"conditions":[],"target":"./src/adaptive-templates.ts","sourcePath":"packages/platform/ui/personalization/src/adaptive-templates.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/personalization/src/adaptive-templates.ts","sourceStatus":"verified source file"}]},{"subpath":"./analyzer","importPath":"@lssm-tech/lib.personalization/analyzer","target":"./src/analyzer.ts","targets":[{"conditions":[],"target":"./src/analyzer.ts","sourcePath":"packages/platform/ui/personalization/src/analyzer.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/personalization/src/analyzer.ts","sourceStatus":"verified source file"}]},{"subpath":"./analyzer-evaluation","importPath":"@lssm-tech/lib.personalization/analyzer-evaluation","target":"./src/analyzer-evaluation.ts","targets":[{"conditions":[],"target":"./src/analyzer-evaluation.ts","sourcePath":"packages/platform/ui/personalization/src/analyzer-evaluation.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/personalization/src/analyzer-evaluation.ts","sourceStatus":"verified source file"}]},{"subpath":"./audited-fine-tuning","importPath":"@lssm-tech/lib.personalization/audited-fine-tuning","target":"./src/audited-fine-tuning.ts","targets":[{"conditions":[],"target":"./src/audited-fine-tuning.ts","sourcePath":"packages/platform/ui/personalization/src/audited-fine-tuning.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/personalization/src/audited-fine-tuning.ts","sourceStatus":"verified source file"}]},{"subpath":"./behavior-signal-events","importPath":"@lssm-tech/lib.personalization/behavior-signal-events","target":"./src/behavior-signal-events/index.ts","targets":[{"conditions":[],"target":"./src/behavior-signal-events/index.ts","sourcePath":"packages/platform/ui/personalization/src/behavior-signal-events/index.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/personalization/src/behavior-signal-events/index.ts","sourceStatus":"verified source file"}]},{"subpath":"./behavior-signal-events/emitter","importPath":"@lssm-tech/lib.personalization/behavior-signal-events/emitter","target":"./src/behavior-signal-events/emitter.ts","targets":[{"conditions":[],"target":"./src/behavior-signal-events/emitter.ts","sourcePath":"packages/platform/ui/personalization/src/behavior-signal-events/emitter.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/personalization/src/behavior-signal-events/emitter.ts","sourceStatus":"verified source file"}]},{"subpath":"./behavior-signal-events/event-registry","importPath":"@lssm-tech/lib.personalization/behavior-signal-events/event-registry","target":"./src/behavior-signal-events/event-registry.ts","targets":[{"conditions":[],"target":"./src/behavior-signal-events/event-registry.ts","sourcePath":"packages/platform/ui/personalization/src/behavior-signal-events/event-registry.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/personalization/src/behavior-signal-events/event-registry.ts","sourceStatus":"verified source file"}]},{"subpath":"./behavior-signal-events/payload-policy","importPath":"@lssm-tech/lib.personalization/behavior-signal-events/payload-policy","target":"./src/behavior-signal-events/payload-policy.ts","targets":[{"conditions":[],"target":"./src/behavior-signal-events/payload-policy.ts","sourcePath":"packages/platform/ui/personalization/src/behavior-signal-events/payload-policy.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/personalization/src/behavior-signal-events/payload-policy.ts","sourceStatus":"verified source file"}]},{"subpath":"./behavior-signals","importPath":"@lssm-tech/lib.personalization/behavior-signals","target":"./src/behavior-signals.ts","targets":[{"conditions":[],"target":"./src/behavior-signals.ts","sourcePath":"packages/platform/ui/personalization/src/behavior-signals.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/personalization/src/behavior-signals.ts","sourceStatus":"verified source file"}]},{"subpath":"./behavior-support","importPath":"@lssm-tech/lib.personalization/behavior-support","target":"./src/behavior-support.ts","targets":[{"conditions":[],"target":"./src/behavior-support.ts","sourcePath":"packages/platform/ui/personalization/src/behavior-support.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/personalization/src/behavior-support.ts","sourceStatus":"verified source file"}]},{"subpath":"./behavior-support-preset-definitions","importPath":"@lssm-tech/lib.personalization/behavior-support-preset-definitions","target":"./src/behavior-support-preset-definitions.ts","targets":[{"conditions":[],"target":"./src/behavior-support-preset-definitions.ts","sourcePath":"packages/platform/ui/personalization/src/behavior-support-preset-definitions.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/personalization/src/behavior-support-preset-definitions.ts","sourceStatus":"verified source file"}]},{"subpath":"./behavior-support-presets","importPath":"@lssm-tech/lib.personalization/behavior-support-presets","target":"./src/behavior-support-presets.ts","targets":[{"conditions":[],"target":"./src/behavior-support-presets.ts","sourcePath":"packages/platform/ui/personalization/src/behavior-support-presets.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/personalization/src/behavior-support-presets.ts","sourceStatus":"verified source file"}]},{"subpath":"./data-view-preferences","importPath":"@lssm-tech/lib.personalization/data-view-preferences","target":"./src/data-view-preferences.ts","targets":[{"conditions":[],"target":"./src/data-view-preferences.ts","sourcePath":"packages/platform/ui/personalization/src/data-view-preferences.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/personalization/src/data-view-preferences.ts","sourceStatus":"verified source file"}]},{"subpath":"./denial-audit","importPath":"@lssm-tech/lib.personalization/denial-audit","target":"./src/denial-audit.ts","targets":[{"conditions":[],"target":"./src/denial-audit.ts","sourcePath":"packages/platform/ui/personalization/src/denial-audit.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/personalization/src/denial-audit.ts","sourceStatus":"verified source file"}]},{"subpath":"./docs","importPath":"@lssm-tech/lib.personalization/docs","target":"./src/docs/index.ts","targets":[{"conditions":[],"target":"./src/docs/index.ts","sourcePath":"packages/platform/ui/personalization/src/docs/index.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/personalization/src/docs/index.ts","sourceStatus":"verified source file"}]},{"subpath":"./docs/behavior-tracking.docblock","importPath":"@lssm-tech/lib.personalization/docs/behavior-tracking.docblock","target":"./src/docs/behavior-tracking.docblock.ts","targets":[{"conditions":[],"target":"./src/docs/behavior-tracking.docblock.ts","sourcePath":"packages/platform/ui/personalization/src/docs/behavior-tracking.docblock.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/personalization/src/docs/behavior-tracking.docblock.ts","sourceStatus":"verified source file"}]},{"subpath":"./docs/overlay-engine.docblock","importPath":"@lssm-tech/lib.personalization/docs/overlay-engine.docblock","target":"./src/docs/overlay-engine.docblock.ts","targets":[{"conditions":[],"target":"./src/docs/overlay-engine.docblock.ts","sourcePath":"packages/platform/ui/personalization/src/docs/overlay-engine.docblock.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/personalization/src/docs/overlay-engine.docblock.ts","sourceStatus":"verified source file"}]},{"subpath":"./docs/workflow-composition.docblock","importPath":"@lssm-tech/lib.personalization/docs/workflow-composition.docblock","target":"./src/docs/workflow-composition.docblock.ts","targets":[{"conditions":[],"target":"./src/docs/workflow-composition.docblock.ts","sourcePath":"packages/platform/ui/personalization/src/docs/workflow-composition.docblock.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/personalization/src/docs/workflow-composition.docblock.ts","sourceStatus":"verified source file"}]},{"subpath":"./durable-lifecycle","importPath":"@lssm-tech/lib.personalization/durable-lifecycle","target":"./src/durable-lifecycle.ts","targets":[{"conditions":[],"target":"./src/durable-lifecycle.ts","sourcePath":"packages/platform/ui/personalization/src/durable-lifecycle.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/personalization/src/durable-lifecycle.ts","sourceStatus":"verified source file"}]},{"subpath":"./durable-preferences","importPath":"@lssm-tech/lib.personalization/durable-preferences","target":"./src/durable-preferences.ts","targets":[{"conditions":[],"target":"./src/durable-preferences.ts","sourcePath":"packages/platform/ui/personalization/src/durable-preferences.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/personalization/src/durable-preferences.ts","sourceStatus":"verified source file"}]},{"subpath":"./fine-tuning-denial","importPath":"@lssm-tech/lib.personalization/fine-tuning-denial","target":"./src/fine-tuning-denial.ts","targets":[{"conditions":[],"target":"./src/fine-tuning-denial.ts","sourcePath":"packages/platform/ui/personalization/src/fine-tuning-denial.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/personalization/src/fine-tuning-denial.ts","sourceStatus":"verified source file"}]},{"subpath":"./fine-tuning-issuance","importPath":"@lssm-tech/lib.personalization/fine-tuning-issuance","target":"./src/fine-tuning-issuance.ts","targets":[{"conditions":[],"target":"./src/fine-tuning-issuance.ts","sourcePath":"packages/platform/ui/personalization/src/fine-tuning-issuance.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/personalization/src/fine-tuning-issuance.ts","sourceStatus":"verified source file"}]},{"subpath":"./identity-lifecycle","importPath":"@lssm-tech/lib.personalization/identity-lifecycle","target":"./src/identity-lifecycle.ts","targets":[{"conditions":[],"target":"./src/identity-lifecycle.ts","sourcePath":"packages/platform/ui/personalization/src/identity-lifecycle.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/personalization/src/identity-lifecycle.ts","sourceStatus":"verified source file"}]},{"subpath":"./ontology-trace","importPath":"@lssm-tech/lib.personalization/ontology-trace","target":"./src/ontology-trace.ts","targets":[{"conditions":[],"target":"./src/ontology-trace.ts","sourcePath":"packages/platform/ui/personalization/src/ontology-trace.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/personalization/src/ontology-trace.ts","sourceStatus":"verified source file"}]},{"subpath":"./ontology-trace-types","importPath":"@lssm-tech/lib.personalization/ontology-trace-types","target":"./src/ontology-trace-types.ts","targets":[{"conditions":[],"target":"./src/ontology-trace-types.ts","sourcePath":"packages/platform/ui/personalization/src/ontology-trace-types.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/personalization/src/ontology-trace-types.ts","sourceStatus":"verified source file"}]},{"subpath":"./personalization.feature","importPath":"@lssm-tech/lib.personalization/personalization.feature","target":"./src/personalization.feature.ts","targets":[{"conditions":[],"target":"./src/personalization.feature.ts","sourcePath":"packages/platform/ui/personalization/src/personalization.feature.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/personalization/src/personalization.feature.ts","sourceStatus":"verified source file"}]},{"subpath":"./preference-dimensions","importPath":"@lssm-tech/lib.personalization/preference-dimensions","target":"./src/preference-dimensions.ts","targets":[{"conditions":[],"target":"./src/preference-dimensions.ts","sourcePath":"packages/platform/ui/personalization/src/preference-dimensions.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/personalization/src/preference-dimensions.ts","sourceStatus":"verified source file"}]},{"subpath":"./preference-dimensions-store","importPath":"@lssm-tech/lib.personalization/preference-dimensions-store","target":"./src/preference-dimensions-store.ts","targets":[{"conditions":[],"target":"./src/preference-dimensions-store.ts","sourcePath":"packages/platform/ui/personalization/src/preference-dimensions-store.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/personalization/src/preference-dimensions-store.ts","sourceStatus":"verified source file"}]},{"subpath":"./preference-evolution","importPath":"@lssm-tech/lib.personalization/preference-evolution","target":"./src/preference-evolution.ts","targets":[{"conditions":[],"target":"./src/preference-evolution.ts","sourcePath":"packages/platform/ui/personalization/src/preference-evolution.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/personalization/src/preference-evolution.ts","sourceStatus":"verified source file"}]},{"subpath":"./preference-evolution-types","importPath":"@lssm-tech/lib.personalization/preference-evolution-types","target":"./src/preference-evolution-types.ts","targets":[{"conditions":[],"target":"./src/preference-evolution-types.ts","sourcePath":"packages/platform/ui/personalization/src/preference-evolution-types.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/personalization/src/preference-evolution-types.ts","sourceStatus":"verified source file"}]},{"subpath":"./preference-onboarding","importPath":"@lssm-tech/lib.personalization/preference-onboarding","target":"./src/preference-onboarding.ts","targets":[{"conditions":[],"target":"./src/preference-onboarding.ts","sourcePath":"packages/platform/ui/personalization/src/preference-onboarding.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/personalization/src/preference-onboarding.ts","sourceStatus":"verified source file"}]},{"subpath":"./preference-presets","importPath":"@lssm-tech/lib.personalization/preference-presets","target":"./src/preference-presets.ts","targets":[{"conditions":[],"target":"./src/preference-presets.ts","sourcePath":"packages/platform/ui/personalization/src/preference-presets.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/personalization/src/preference-presets.ts","sourceStatus":"verified source file"}]},{"subpath":"./privacy","importPath":"@lssm-tech/lib.personalization/privacy","target":"./src/privacy.ts","targets":[{"conditions":[],"target":"./src/privacy.ts","sourcePath":"packages/platform/ui/personalization/src/privacy.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/personalization/src/privacy.ts","sourceStatus":"verified source file"}]},{"subpath":"./receipt-verification","importPath":"@lssm-tech/lib.personalization/receipt-verification","target":"./src/receipt-verification.ts","targets":[{"conditions":[],"target":"./src/receipt-verification.ts","sourcePath":"packages/platform/ui/personalization/src/receipt-verification.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/personalization/src/receipt-verification.ts","sourceStatus":"verified source file"}]},{"subpath":"./rich-reference","importPath":"@lssm-tech/lib.personalization/rich-reference","target":"./src/rich-reference/index.ts","targets":[{"conditions":[],"target":"./src/rich-reference/index.ts","sourcePath":"packages/platform/ui/personalization/src/rich-reference/index.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/personalization/src/rich-reference/index.ts","sourceStatus":"verified source file"}]},{"subpath":"./rich-reference/client-hook","importPath":"@lssm-tech/lib.personalization/rich-reference/client-hook","target":"./src/rich-reference/client-hook.ts","targets":[{"conditions":[],"target":"./src/rich-reference/client-hook.ts","sourcePath":"packages/platform/ui/personalization/src/rich-reference/client-hook.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/personalization/src/rich-reference/client-hook.ts","sourceStatus":"verified source file"}]},{"subpath":"./rich-reference/dimensions","importPath":"@lssm-tech/lib.personalization/rich-reference/dimensions","target":"./src/rich-reference/dimensions.ts","targets":[{"conditions":[],"target":"./src/rich-reference/dimensions.ts","sourcePath":"packages/platform/ui/personalization/src/rich-reference/dimensions.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/personalization/src/rich-reference/dimensions.ts","sourceStatus":"verified source file"}]},{"subpath":"./rich-reference/inheritance","importPath":"@lssm-tech/lib.personalization/rich-reference/inheritance","target":"./src/rich-reference/inheritance.ts","targets":[{"conditions":[],"target":"./src/rich-reference/inheritance.ts","sourcePath":"packages/platform/ui/personalization/src/rich-reference/inheritance.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/personalization/src/rich-reference/inheritance.ts","sourceStatus":"verified source file"}]},{"subpath":"./rich-reference/preferences","importPath":"@lssm-tech/lib.personalization/rich-reference/preferences","target":"./src/rich-reference/preferences.ts","targets":[{"conditions":[],"target":"./src/rich-reference/preferences.ts","sourcePath":"packages/platform/ui/personalization/src/rich-reference/preferences.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/personalization/src/rich-reference/preferences.ts","sourceStatus":"verified source file"}]},{"subpath":"./rich-reference/server-resolver","importPath":"@lssm-tech/lib.personalization/rich-reference/server-resolver","target":"./src/rich-reference/server-resolver.ts","targets":[{"conditions":[],"target":"./src/rich-reference/server-resolver.ts","sourcePath":"packages/platform/ui/personalization/src/rich-reference/server-resolver.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/personalization/src/rich-reference/server-resolver.ts","sourceStatus":"verified source file"}]},{"subpath":"./rights-decisions","importPath":"@lssm-tech/lib.personalization/rights-decisions","target":"./src/rights-decisions.ts","targets":[{"conditions":[],"target":"./src/rights-decisions.ts","sourcePath":"packages/platform/ui/personalization/src/rights-decisions.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/personalization/src/rights-decisions.ts","sourceStatus":"verified source file"}]},{"subpath":"./rolemorph-adapter","importPath":"@lssm-tech/lib.personalization/rolemorph-adapter","target":"./src/rolemorph-adapter.ts","targets":[{"conditions":[],"target":"./src/rolemorph-adapter.ts","sourcePath":"packages/platform/ui/personalization/src/rolemorph-adapter.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/personalization/src/rolemorph-adapter.ts","sourceStatus":"verified source file"}]},{"subpath":"./store","importPath":"@lssm-tech/lib.personalization/store","target":"./src/store.ts","targets":[{"conditions":[],"target":"./src/store.ts","sourcePath":"packages/platform/ui/personalization/src/store.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/personalization/src/store.ts","sourceStatus":"verified source file"}]},{"subpath":"./support-surface","importPath":"@lssm-tech/lib.personalization/support-surface","target":"./src/support-surface.ts","targets":[{"conditions":[],"target":"./src/support-surface.ts","sourcePath":"packages/platform/ui/personalization/src/support-surface.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/personalization/src/support-surface.ts","sourceStatus":"verified source file"}]},{"subpath":"./tracker","importPath":"@lssm-tech/lib.personalization/tracker","target":"./src/tracker.ts","targets":[{"conditions":[],"target":"./src/tracker.ts","sourcePath":"packages/platform/ui/personalization/src/tracker.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/personalization/src/tracker.ts","sourceStatus":"verified source file"}]},{"subpath":"./tracker-types","importPath":"@lssm-tech/lib.personalization/tracker-types","target":"./src/tracker-types.ts","targets":[{"conditions":[],"target":"./src/tracker-types.ts","sourcePath":"packages/platform/ui/personalization/src/tracker-types.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/personalization/src/tracker-types.ts","sourceStatus":"verified source file"}]},{"subpath":"./types","importPath":"@lssm-tech/lib.personalization/types","target":"./src/types.ts","targets":[{"conditions":[],"target":"./src/types.ts","sourcePath":"packages/platform/ui/personalization/src/types.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/personalization/src/types.ts","sourceStatus":"verified source file"}]}],"entryCount":70,"namedSymbolCoverage":"catalog declarations only; exhaustive TypeScript symbols not extracted","installationStatus":"not verified"},"docsLinks":[{"title":"Lib Personalization documentation","url":"https://www.npmjs.com/package/%40lssm-tech%2Flib.personalization","kind":"readme","pinnedUrl":null,"sourceStatus":"declared link; destination not verified"}],"sourceUrls":{"package":"https://github.com/lssm-tech/contractspec/tree/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/personalization","manifest":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/personalization/package.json","readme":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/personalization/README.md","guide":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/apps/web-landing/public/llms-packages/lib.personalization.txt"},"readme":{"status":"available","body":"# @lssm-tech/lib.personalization\n\n`@lssm-tech/lib.personalization` tracks behavior events, summarizes them into actionable insights, and converts those insights into transparent personalization outputs such as overlay suggestions, preference recommendations, and runtime adaptive-experience decisions. It also defines the shared preference-dimensions model consumed by runtime layers.\n\nWebsite: https://contractspec.io\n\n## Installation\n\n`bun add @lssm-tech/lib.personalization`\n\nor\n\n`npm install @lssm-tech/lib.personalization`\n\n## What belongs here\n\nThis package currently has three jobs:\n\n- Behavior telemetry and analysis: `tracker`, `store`, `analyzer`, `adapter`, and `types` handle event capture, storage, summarization, and conversion into adaptation hints.\n- Shared adaptive contracts: `preference-dimensions`, behavior support, behavior signals, and runtime resolution define the generic adaptive-experience model consumed by runtime layers.\n- Ontology trace alignment: adaptive events, behavior signals, DataView interactions, and sanitized fine-tuning receipts can carry graph/evidence references without storing raw user context as training data.\n- Practical adoption: curated presets, onboarding recommendation, and safe evolution suggestions help applications offer a better starting point without creating rigid personas.\n\nUse this package when you need a thin personalization layer inside ContractSpec. Do not use it as a general analytics platform or as the full overlay runtime.\n\nThe root entrypoint keeps ontology trace and sanitized receipt references\nunambiguous while the existing `./adaptive-events`, `./adaptive-experience`, and\n`./ontology-trace` subpaths remain compatible. Prefer the focused subpath when\nonly one adaptive concern is needed.\n\n## Core workflow\n\n```ts\nimport {\n  BehaviorAnalyzer,\n  createBehaviorTracker,\n  insightsToOverlaySuggestion,\n  InMemoryBehaviorStore,\n} from \"@lssm-tech/lib.personalization\";\n\nconst store = new InMemoryBehaviorStore();\n\nconst tracker = createBehaviorTracker({\n  store,\n  context: {\n    tenantId: \"acme\",\n    userId: \"user-123\",\n    role: \"manager\",\n    roles: [\"manager\"],\n    permissions: [\"billing.order.read\"],\n    policyDecisions: {\n      internalNotes: {\n        effect: \"deny\",\n        fields: [\"internalNotes\"],\n        missing: { permissions: [\"billing.notes.read\"] },\n      },\n    },\n  },\n  autoFlushIntervalMs: 5000,\n});\n\ntracker.trackFieldAccess({\n  operation: \"billing.createOrder\",\n  field: \"internalNotes\",\n});\ntracker.trackFieldAccess({\n  operation: \"billing.createOrder\",\n  field: \"customerReference\",\n});\ntracker.trackFeatureUsage({\n  feature: \"workflow-editor\",\n  action: \"opened\",\n});\ntracker.trackWorkflowStep({\n  workflow: \"invoice-approval\",\n  step: \"review\",\n  status: \"entered\",\n});\n\nawait tracker.flush();\nawait tracker.dispose();\n\nconst analyzer = new BehaviorAnalyzer(store, {\n  fieldInactivityThreshold: 2,\n});\n\nconst insights = await analyzer.analyze({\n  tenantId: \"acme\",\n  userId: \"user-123\",\n  windowMs: 7 * 24 * 60 * 60 * 1000,\n});\n\nconst overlay = insightsToOverlaySuggestion(insights, {\n  overlayId: \"acme-order-form\",\n  tenantId: \"acme\",\n  capability: \"billing.createOrder\",\n});\n```\n\nTypical flow:\n\n1. Record behavior events through `BehaviorTracker`.\n2. Persist and summarize those events through a `BehaviorStore`.\n3. Analyze the summary with `BehaviorAnalyzer`.\n4. Convert insights into an `OverlaySpec` suggestion or workflow adaptation hints.\n\n## DataView preferences\n\nUse the data-view preference helpers when a collection `DataViewSpec` should\nhonor preferred list/grid/table mode, density, or data depth without coupling\nthe design-system renderer to personalization:\n\n```tsx\nimport { DataViewRenderer } from \"@lssm-tech/lib.design-system\";\nimport { resolveDataViewPreferences } from \"@lssm-tech/lib.personalization/data-view-preferences\";\n\nconst resolved = resolveDataViewPreferences({\n  spec: AccountsDataView,\n  preferences: profile.canonical,\n  insights,\n  record: savedDataViewPreference,\n});\n\n<DataViewRenderer\n  spec={AccountsDataView}\n  items={rows}\n  defaultViewMode={resolved.viewMode}\n  defaultDensity={resolved.density}\n  defaultDataDepth={resolved.dataDepth}\n/>;\n```\n\nThe helper returns plain data and never imports React or the design-system\npackage. Stored data-view preference records win over behavior insights,\npreference dimensions, and authored contract defaults. Disallowed inferred view\nmodes are ignored so the renderer only receives modes allowed by the spec.\n\n## Private projection cache\n\n`createPrivateProjectionCache<T>()` holds private rows, drafts and citations\nfor one exact server authority (tenant, workspace, subject, actor, session,\ngrant and entitlement revisions). Call `observeAuthority(next)` before\nrendering a context: any change purges every entry and notifies\n`onInvalidate` listeners, and writes produced under an older scope are\nrefused. Attach `privateProjectionCacheIdentityBuffer(identity, cache)` to\n`PersonalizationIdentityLifecycle` so sign-out and account or tenant switches\npurge it too. It is presentation state only; servers still authorize every\nread and command.\n\n## Adaptive shell projection\n\nUse `@lssm-tech/lib.personalization/adaptive-shell` when a product shell needs\nto translate the existing seven preference dimensions into plain layout,\nnavigation, density, data-depth, and control hints. The projection is\nruntime-only, has no persistence store, and accepts RoleMorph/policy/workspace\nsafety boundaries so preferences can tune presentation without granting hidden\nroutes, restricted evidence, or actions.\n\n```ts\nimport { resolveAdaptiveShellProjection } from \"@lssm-tech/lib.personalization/adaptive-shell\";\n\nconst shell = resolveAdaptiveShellProjection({\n  resolvedExperience,\n  safetyBoundaries: [\n    {\n      id: \"policy:auditor-read-only\",\n      target: \"actions\",\n      effect: \"read-only\",\n      reason: \"Auditor shell actions stay read-only.\",\n    },\n  ],\n});\n\nconsole.log(shell.navigation, shell.layoutVariant, shell.control);\n```\n\nEvery applied or suppressed shell adaptation carries a reason, evidence IDs,\nontology refs, and a safety level. Use\n`createAdaptiveShellRuntimeActionEvents()` to emit these records through the\nexisting adaptive runtime-action event channel.\n\nFor hosts that already receive the narrower RoleMorph presentation hint, use\n`adaptRoleMorphPresentationToPreferences()` from `./rolemorph-adapter`. It maps\nsupported RoleMorph values into all seven canonical preference dimensions,\nfalls back to authored defaults for missing or unknown values, reports rejected\nand not-applicable inputs, and returns a presentation-only projection that can\nnever grant authority.\n\nRecord renderer interactions with the behavior tracker so later analysis can\nderive scoped preferred modes:\n\n```ts\ntracker.trackDataViewInteraction({\n  dataViewKey: AccountsDataView.meta.key,\n  dataViewVersion: AccountsDataView.meta.version,\n  action: \"view_mode_changed\",\n  viewMode: \"grid\",\n});\n\ntracker.trackDataViewInteraction({\n  dataViewKey: AccountsDataView.meta.key,\n  action: \"data_depth_changed\",\n  dataDepth: \"detailed\",\n});\n\ntracker.trackDataViewInteraction({\n  dataViewKey: AccountsDataView.meta.key,\n  action: \"selection_changed\",\n  selectedCount: 3,\n  selectionScope: \"multiple\",\n});\n\ntracker.trackDataViewInteraction({\n  dataViewKey: AccountsDataView.meta.key,\n  action: \"action_invoked\",\n  actionKey: \"accounts.archive\",\n  actionPlacement: \"selection-toolbar\",\n  actionIntent: \"destructive\",\n});\n```\n\n`selection_changed` records only the selection count and scope, and\n`action_invoked` only the action key, placement and intent. The tracker copies\ndeclared input fields into the event, so row ids or row data passed alongside\nan interaction never reach the behavior store.\n\nAgent prompt for a DataView preference integration:\n\n```md\nAdd DataView personalization for <screen>.\n\n- Resolve viewMode, density, dataDepth, and pageSize with resolveDataViewPreferences.\n- Apply resolved values to DataViewRenderer as default or controlled props.\n- Track opened, view_mode_changed, density_changed, data_depth_changed, search_changed, filter_changed, sort_changed, page_changed, selection_changed (selectedCount and selectionScope only) and action_invoked (actionKey, actionPlacement, actionIntent) actions with trackDataViewInteraction. Never pass row ids.\n- Persist only the dimensions enabled by view.collection.personalization.persist.\n- Ignore behavior-derived modes not allowed by view.collection.viewModes.allowedModes.\n- Keep @lssm-tech/lib.personalization free of React and design-system imports.\n```\n\n## Adaptive application integration\n\nApplications should keep product-specific rules in their own packages and\nreuse the ContractSpec adaptive foundation for the generic wiring:\n\n- Use `@lssm-tech/lib.personalization` for low-level contracts, event\n  builders, emitters, behavior signals, and runtime adaptive resolution.\n- Use `@lssm-tech/lib.presentation-runtime-core/adaptive-experience` to map\n  `ResolvedAdaptiveExperience` into platform-neutral presentation defaults.\n- Use `@lssm-tech/lib.presentation-runtime-react/useAdaptiveDataView` to\n  resolve DataView defaults and translate manual renderer changes into\n  `data_view_interaction` events.\n- Use `@lssm-tech/lib.contracts-runtime-client-react/adaptive-form` to derive\n  form guidance, density, recovery, and reflection hints from the same runtime\n  adaptive result.\n\n`DataViewRenderer` and `DataTableToolbar` remain generic design-system\ncomponents. They accept plain adaptive/default props and generic interaction\ncallbacks, but they do not import personalization or store behavior data.\n\n```tsx\nimport { DataViewRenderer } from \"@lssm-tech/lib.design-system\";\nimport { useAdaptiveDataView } from \"@lssm-tech/lib.presentation-runtime-react/useAdaptiveDataView\";\n\nconst adaptive = useAdaptiveDataView({\n  spec: AccountsDataView,\n  preferences,\n  behaviorSupport,\n  behaviorSignals,\n  behaviorEventBase: {\n    tenantId,\n    userId,\n  },\n  onBehaviorEvent: (event) => tracker.trackDataViewInteraction(event),\n});\n\n<DataViewRenderer\n  spec={AccountsDataView}\n  items={rows}\n  {...adaptive.dataViewRendererProps}\n/>;\n```\n\nRecommended application layering:\n\n- Backend: persist explicit preference records, accepted suggestions, and\n  behavior events. Do not persist `ResolvedAdaptiveExperience` as a hidden user\n  identity.\n- Runtime adapter: combine product policy, permissions, current context,\n  preferences, behavior support, and signals into a resolved runtime result.\n- Design-system surface: consume plain props, emit generic interaction callbacks,\n  and let the runtime adapter translate them into behavior evidence.\n- Application package: add only product-specific wording, policy, permissions,\n  persistence, and workflow decisions.\n\n### Ontology refs and sanitized fine-tuning receipts\n\nAdaptive traces can reference the canonical Company Work Graph by ID while\nremaining payload-safe:\n\n```ts\nimport {\n  createSanitizedAdaptiveFineTuningReceipt,\n  resolveAdaptiveExperience,\n} from \"@lssm-tech/lib.personalization\";\n\nconst resolved = resolveAdaptiveExperience({\n  preferences,\n  behaviorSupport,\n  behaviorSignals,\n  context: {\n    ontologyRefs: {\n      graphId: \"company-work-graph\",\n      nodes: [{ id: \"surface:approval-panel\", domain: \"surface\" }],\n      evidence: [{ id: \"receipt:audit-1\", kind: \"auditReceipt\" }],\n    },\n  },\n  trace: { traceId: \"trace-1\", trainingJobId: \"train-1\" },\n});\n\nconst receipt = createSanitizedAdaptiveFineTuningReceipt({\n  id: \"receipt:train-1\",\n  createdAt: \"2026-05-17T00:00:00Z\",\n  trace: resolved.trace,\n  ontologyRefs: resolved.ontologyRefs,\n  policy: {\n    policyDecisionRef: \"policy:allow-sanitized-training\",\n    consentRef: \"consent:training-1\",\n    authorityScopeRef: \"authority:workspace\",\n    exportAllowed: true,\n    trainingAllowed: true,\n    reason: \"Only redacted graph/evidence refs and trace IDs are exported.\",\n  },\n  redaction: {\n    status: \"redacted\",\n    redactionDecisionId: \"redaction:1\",\n    excludedFields: [\"metadata\", \"context.userIntent\"],\n  },\n  verification: {\n    consent: {\n      ref: \"consent:training-1\",\n      status: \"granted\",\n      scopes: [\"export\", \"training\"],\n      grantedAt: \"2026-05-16T00:00:00Z\",\n      expiresAt: \"2026-06-16T00:00:00Z\",\n    },\n    policy: {\n      decisionRef: \"policy:allow-sanitized-training\",\n      effect: \"allow\",\n      authorityScopeRef: \"authority:workspace\",\n      evaluatedAt: \"2026-05-17T00:00:00Z\",\n    },\n    redaction: {\n      decisionId: \"redaction:1\",\n      executedAt: \"2026-05-17T00:00:00Z\",\n      verified: true,\n      rawPayloadExcluded: true,\n    },\n    evidenceDigest: \"sha256:0123456789abcdef\",\n  },\n});\n```\n\nReceipt construction fails closed unless consent is granted, unexpired, and\nscoped to export and training; the policy and authority refs match an allow\ndecision; redaction was executed and verified; raw payloads are excluded; and\nthe evidence has a SHA-256 integrity digest. Receipts contain refs and explicit\nprohibited conclusions, never raw metadata, user intent, or hidden profiles.\n\n\nAutonomous Work Order traces use the same rule: adaptive events and behavior signals may identify the work order, surface DataView/page, RoleMorph decision, evidence receipt, policy decision, and redaction receipt by ref. They must not store raw user intent, hidden profile claims, or sensitive payloads as training data. Fine-tuning receipts export only sanitized trace IDs, ontology refs, policy/redaction refs, and prohibited-conclusion metadata.\n\n## API map\n\n### Main runtime APIs\n\n- `BehaviorStore`: persistence boundary for recording, querying, and summarizing `BehaviorEvent` data.\n- `InMemoryBehaviorStore`: simple in-memory implementation for tests, demos, and local composition.\n- `BehaviorTracker` and `createBehaviorTracker`: buffered event capture with tenant/user context and OpenTelemetry instrumentation.\n- `BehaviorAnalyzer`: converts `BehaviorSummary` data into `BehaviorInsights`.\n- Authorization context: events may carry `roles`, `permissions`, and policy decision summaries so analyzers can suppress denied fields/actions without granting access.\n- `insightsToOverlaySuggestion`: turns analysis output into an overlay-engine `OverlaySpec`.\n- `insightsToWorkflowAdaptations`: turns workflow bottlenecks into lightweight adaptation notes.\n\n### Core data contracts\n\n- `BehaviorEvent`: discriminated union with four event kinds: `field_access`, `feature_usage`, `workflow_step`, and `data_view_interaction`.\n- `BehaviorQuery`: filter shape used by `BehaviorStore.query()` and `BehaviorStore.summarize()`.\n- `BehaviorSummary`: aggregated counts returned by store summarization.\n- `BehaviorInsights`: analyzer output including hidden-field candidates, bottlenecks, and layout preference hints.\n  When authorization decisions are supplied, denied fields/actions are surfaced for suppression and are not promoted in overlay reorder suggestions.\n- `BehaviorAnalyzerOptions`: tuning knobs for inactivity threshold and minimum workflow sample size.\n- `OverlaySuggestionOptions`: metadata required to build an overlay suggestion.\n- `WorkflowAdaptation`: workflow, step, and note triple derived from bottlenecks.\n- DataView preference helpers: `resolveDataViewPreferences`, `DataViewPreferenceRecord`, `DataViewPreferencePatch`, and mapping helpers for density and view-mode patches.\n- Adaptive integration helpers: `AdaptiveExperienceEmitter`, adaptive event builders, `resolveAdaptiveDataViewState`, `createDataViewInteractionEvent`, `resolveAdaptiveShellProjection`, `createAdaptiveShellRuntimeActionEvents`, ontology trace refs, and sanitized fine-tuning receipt builders.\n\n### Preference model contracts\n\n- `PreferenceDimensions`: the shared 7-dimension personalization model.\n- `BehaviorSupportDimensions`: the support-strategy model for helping users act, recover, and review progress.\n- `BehaviorSignalModel`: scoped behavior evidence used to explain adaptation suggestions without profiling users.\n- `ResolvedAdaptiveExperience`: runtime-only result describing what the application should do now.\n- Preset helpers: `PREFERENCE_DIMENSION_PRESETS`, `PREFERENCE_PRESET_DEFINITIONS`, `getPreferencePresetDimensions`, and `createPreferencePresetCatalog`.\n- Behavior support preset helpers: `BEHAVIOR_SUPPORT_PRESETS`, `BEHAVIOR_SUPPORT_PRESET_DEFINITIONS`, and `getBehaviorSupportPresetDimensions`.\n- Onboarding helpers: `recommendPreferencePreset`, `recommendBehaviorSupportPreset`, `recommendAdaptiveExperience`, and related recommendation types.\n- Adoption helpers: adaptive templates, UI-agnostic onboarding flows, explanation templates, risk helpers, recipes, scenarios, and migration paths.\n- Evolution helpers: `suggestPreferenceEvolution`, `suggestAdaptiveExperienceEvolution`, and related suggestion types.\n- `PreferenceScope`: source scope used when a preference value is resolved.\n- `ResolvedPreferenceProfile`: canonical resolved preferences plus source attribution and constraint notes.\n- `PreferenceResolutionContext`: minimal runtime context required to resolve a preference profile.\n- `BundlePreferenceAdapter`: contract for resolving and persisting preference patches in runtime consumers.\n- `PREFERENCE_DIMENSION_VALUES`: the allowed values of each dimension in scale order (menu/radio builders and validation share it).\n- `createPreferenceDimensionsStore(defaults)` and `createUsePreferenceDimensions({ dimensions, fine, serverSnapshot }, React)` (`./preference-dimensions-store`): subscribable 7-dimension client store and a React-injected hook combining it with the RichReference fine-layer store. Hosts own the defaults, singleton instances and server hydration. Call `replace(snapshot)` instead of `hydrate(snapshot)` when the identity or workspace changes, so dimensions set in the previous scope cannot leak.\n\n## Adaptive experience toolkit\n\nUse ContractSpec personalization to give builders a transparent adaptation layer. The package separates how software presents itself from how the system supports user action:\n\n- `PreferenceDimensions` decide how the software adapts as a tool.\n- `BehaviorSupportDimensions` decide how the system supports human action.\n- `BehaviorSignalModel` records what evidence is strong enough to suggest a change.\n- `ResolvedAdaptiveExperience` describes what should happen now, at runtime.\n\nThis is not a profiling engine, user-personality classifier, behavioral manipulation toolkit, analytics platform, or authorization system. It is a small set of contracts for saying: \"The system noticed this scoped pattern and can adjust the experience in a way the user can inspect and override.\"\n\n### Interaction preferences\n\n`PreferenceDimensions` describes how a person wants to experience an application across seven independent dimensions:\n\n- `guidance`: how much help the interface offers.\n- `density`: how much information appears at once.\n- `dataDepth`: whether the app starts from summaries, details, or exhaustive evidence.\n- `control`: how much configuration and direct manipulation is exposed.\n- `media`: whether the experience prefers text, visuals, voice, or a hybrid.\n- `pace`: whether interactions should feel deliberate, balanced, or rapid.\n- `narrative`: whether content starts top-down, bottom-up, or adapts by context.\n\nThese dimensions are software interaction preferences, not behavior labels and not permissions. `control: \"full\"` never grants access to features a user is not authorized to use.\n\n### Behavior support dimensions\n\n`BehaviorSupportDimensions` describes how the system supports action, momentum, recovery, and decision-making:\n\n- `attention`: how the system helps the user notice what matters next.\n- `activation`: how the system helps the user start.\n- `actionScale`: how large the next useful action should be.\n- `rhythm`: how work fits time, energy, urgency, or changing context.\n- `environment`: what surrounding structure makes action easier.\n- `challenge`: how much stretch or pressure is appropriate.\n- `meaningFrame`: what makes the action feel worthwhile.\n- `permission`: what helps the user begin, reduce, pause, or renegotiate.\n- `selfAuthority`: how the system supports confidence, composure, structure, and follow-through.\n- `accountability`: how much external structure or review the user wants.\n- `recovery`: what should happen after skipped actions, misses, contradictions, or failed attempts.\n- `reflection`: how much learning or review should happen after action.\n\nThis layer is support strategy, not identity. Use language such as \"start support\", \"smaller first step\", \"repair first\", \"private review\", or \"brief reflection\". Avoid moral, clinical, or manipulative labels such as \"lazy\", \"avoidant\", \"low motivation\", \"approval-seeking\", \"low-value user\", or \"manipulable user\".\n\n### Presets are starting points\n\nThe package exports a small interaction preset catalog that application builders can ship directly:\n\n- `balanced`: safe default for general use.\n- `guideMe`: slower, guided onboarding for new or uncertain users.\n- `summaryFirst`: compact, fast, dashboard-style usage.\n- `deepAnalyst`: data-rich, evidence-first investigation mode.\n- `builder`: fast, configurable mode for creating and adjusting workflows.\n- `opsWarRoom`: dense, visual, rapid mode for live operational surfaces.\n- `auditReview`: deliberate, traceable, detail-heavy review mode.\n- `minimalFocus`: low-noise, focused, simple experience.\n\nPresets are not identities. Use labels such as \"Summary-first\" or \"Minimal focus\", not labels such as \"manager mode\" or \"skill level\".\n\n```ts\nimport {\n  getPreferencePresetDimensions,\n  PREFERENCE_PRESET_DEFINITIONS,\n} from \"@lssm-tech/lib.personalization\";\n\nconst startingPreferences = getPreferencePresetDimensions(\"summaryFirst\");\nconst presetIntent = PREFERENCE_PRESET_DEFINITIONS.summaryFirst.intent;\n```\n\nOverride or extend the catalog by merging your own named bundles of `PreferenceDimensions`:\n\n```ts\nimport {\n  createPreferencePresetCatalog,\n  PREFERENCE_PRESET_DEFINITIONS,\n} from \"@lssm-tech/lib.personalization\";\n\nconst catalog = createPreferencePresetCatalog({\n  calmReview: {\n    id: \"calmReview\",\n    label: \"Calm review\",\n    intent: \"A slower review flow with fewer visual interruptions.\",\n    dimensions: {\n      ...PREFERENCE_PRESET_DEFINITIONS.auditReview.dimensions,\n      media: \"text\",\n      pace: \"deliberate\",\n    },\n  },\n});\n```\n\nBehavior support presets are also editable starting points, not user types:\n\n- `steadyMomentum`: consistent progress with moderate support.\n- `activationFirst`: reduce start friction and help users begin.\n- `permissionFirst`: make smaller starts, pauses, or renegotiation easy.\n- `deepWorkBuilder`: protect focus, mastery, and intentional work.\n- `recoveryFirst`: help users resume after misses or interruptions.\n- `identityBuilder`: connect action to user-defined values or commitments.\n- `selfAuthorityBuilder`: build confidence, composure, structure, and follow-through.\n- `socialMomentum`: support shared rhythm or review when explicitly wanted.\n- `deadlineSprint`: support short-term urgency and focused execution.\n- `minimalNudge`: keep support low-noise with minimal intervention.\n\nGood UI wording: \"Suggested support style: Recovery-first.\" Bad UI wording: \"You are a recovery-first user.\"\n\n### Templates\n\nAdaptive experience templates combine an interaction preset, behavior support preset, onboarding path, evolution policy, recommended scopes, safety notes, explanation copy, and generic product intent.\n\nTemplates are starting points for builders. They are not user identities, not permanent classifications, and not product domains.\n\nAvailable templates:\n\n- `balancedAdaptive`: safe default for most applications.\n- `guidedFirstRun`: more guidance, smaller first actions, and safe first-run defaults.\n- `expertOperator`: compact UI, faster pace, more control, and fewer interruptions when explicitly wanted.\n- `summaryDecision`: summary-first dashboards, overviews, triage, and decision surfaces.\n- `deepReview`: detailed, deliberate, evidence-heavy review workflows.\n- `focusExecution`: action-oriented workflows where start, focus, and recovery matter.\n- `recoverySupport`: neutral repair-first defaults after missed steps or interruptions.\n- `collaborativeMomentum`: shared rhythm and review support with consent boundaries.\n- `minimalAssist`: low-noise adaptation with minimal intervention.\n- `learningBuilder`: guided capability growth and mastery support.\n\n```ts\nimport {\n  getAdaptiveExperienceTemplate,\n  recommendAdaptiveTemplate,\n} from \"@lssm-tech/lib.personalization/adaptive-templates\";\n\nconst template = getAdaptiveExperienceTemplate(\"guidedFirstRun\");\n\nconst recommendation = recommendAdaptiveTemplate({\n  selectedInteractionPreset: \"guideMe\",\n  selectedBehaviorSupportPreset: \"activationFirst\",\n});\n\nconsole.log(template.productIntent);\nconsole.log(recommendation.reasons);\n```\n\nTemplate categories help builders browse defaults by product intent: `general`, `onboarding`, `expert`, `decision`, `review`, `execution`, `recovery`, `collaboration`, `minimal`, and `learning`. Each category describes when to use it, when not to use it, the experience it creates, and the safety concerns that matter.\n\n### UI-agnostic onboarding flows\n\nThe package exports onboarding definitions that applications can render in any UI. They contain flow IDs, titles, descriptions, recommended templates, human-readable questions, options, answer mappings, skip behavior, fallback behavior, and result summaries.\n\nAvailable flows:\n\n- `quickStartAdaptive`: short flow with a few questions for most apps.\n- `fullAdaptiveSetup`: longer setup when adaptation matters deeply.\n- `interactionOnlySetup`: configures only `PreferenceDimensions`.\n- `behaviorSupportSetup`: configures only `BehaviorSupportDimensions`.\n- `expertSetup`: lets advanced users inspect and directly select dimensions.\n- `progressiveSetup`: starts from a template and asks questions when confidence is low.\n\n```ts\nimport {\n  ADAPTIVE_ONBOARDING_FLOWS,\n  ADAPTIVE_ONBOARDING_QUESTIONS,\n  resolveAdaptiveOnboardingRecommendation,\n} from \"@lssm-tech/lib.personalization/adaptive-onboarding-flows\";\n\nconst flow = ADAPTIVE_ONBOARDING_FLOWS.quickStartAdaptive;\nconst questions = flow.questionIds.map(\n  (id) => ADAPTIVE_ONBOARDING_QUESTIONS[id]\n);\n\nconst result = resolveAdaptiveOnboardingRecommendation(\"quickStartAdaptive\", {\n  guidancePreference: \"walkthrough\",\n  dataDepthPreference: \"standard\",\n  actionScalePreference: \"small\",\n  recoveryPreference: \"repair\",\n});\n\nconsole.log(result.selectedAdaptiveTemplate);\nconsole.log(result.dimensionsInferredFromAnswers);\nconsole.log(result.dimensionsUsingFallbackDefaults);\n```\n\nThe recommendation result includes the selected interaction preset, behavior support preset, adaptive template, confidence, reasons, alternative templates, inferred dimensions, explicitly selected dimensions, fallback dimensions, safety notes, and a suggested next step.\n\nSkipped onboarding uses safe defaults with low confidence. Role text can be passed for context, but role alone does not determine a template.\n\n### Onboarding recommendation\n\nRecommend first settings from intent and product questions, not role stereotypes. Ask simple questions such as:\n\n- What kind of guidance do you prefer?\n- Do you prefer summaries or details?\n- Do you prefer simple controls or advanced controls?\n- What helps you start?\n- What action size feels easiest to trust?\n- What should happen when something is missed?\n- Do you want private progress, self-review, or shared review?\n- What makes progress meaningful?\n\n```ts\nimport {\n  getPreferencePresetDimensions,\n  getBehaviorSupportPresetDimensions,\n  recommendAdaptiveExperience,\n} from \"@lssm-tech/lib.personalization\";\n\nconst recommendation = recommendAdaptiveExperience({\n  interaction: {\n    primaryIntent: \"reviewing\",\n    detailPreference: \"evidence\",\n    controlPreference: \"advanced\",\n    role: \"Manager\", // recorded for context, not used for scoring\n  },\n  behaviorSupport: {\n    startSupport: \"guided\",\n    actionSize: \"small\",\n    recoveryPreference: \"repair\",\n  },\n});\n\nconst preferences = getPreferencePresetDimensions(\n  recommendation.selectedInteractionPreset\n);\nconst behaviorSupport = getBehaviorSupportPresetDimensions(\n  recommendation.selectedBehaviorSupportPreset\n);\n\nconsole.log(recommendation.reasons);\nconsole.log(recommendation.alternativeInteractionPresets);\nconsole.log(recommendation.alternativeBehaviorSupportPresets);\n```\n\nThe recommendation returns selected interaction and behavior support presets, confidence, human-readable reasons, alternatives, and editable dimension lists. Role text may be recorded as context, but it does not score presets because a job title should not decide the experience.\n\n### Explanation templates and risk levels\n\nApplications should explain adaptive changes in product language:\n\n- observed pattern\n- suggested change\n- scope\n- reversibility\n- confidence when useful\n- no shame or moral judgment\n\n```ts\nimport {\n  ADAPTIVE_EXPLANATION_TEMPLATES,\n  getAdaptiveSuggestionRisk,\n  shouldRequireAdaptiveConfirmation,\n} from \"@lssm-tech/lib.personalization/adaptive-explanations\";\n\nconst explanation = ADAPTIVE_EXPLANATION_TEMPLATES.find(\n  (item) => item.id === \"smaller-first-steps\"\n);\n\nconst risk = getAdaptiveSuggestionRisk({\n  target: \"behaviorSupport\",\n  dimension: \"accountability\",\n  impact: \"medium\",\n});\n\nconst needsConfirmation = shouldRequireAdaptiveConfirmation({\n  target: \"preference\",\n  dimension: \"control\",\n  impact: \"low\",\n});\n```\n\nRisk levels:\n\n- `low`: safe surface-level interaction changes such as view mode, density, or brief hints.\n- `medium`: workflow structure or behavior support changes such as action scale, reflection, or recovery defaults.\n- `high`: changes affecting control, accountability, challenge, social exposure, data depth, or user trust.\n\nNever silently increase social accountability, external accountability, challenge, pressure, data exposure, control level, social visibility, or commitment strength.\n\nGood explanation copy:\n\n- \"You often complete smaller actions.\"\n- \"This workflow seems to work better with brief reflection.\"\n- \"You can change this anytime.\"\n- \"This only applies to this surface.\"\n- \"This suggestion is based on repeated behavior.\"\n\nBad explanation copy:\n\n- \"You procrastinate.\"\n- \"You failed.\"\n- \"You lack discipline.\"\n- \"You need more accountability.\"\n- \"The system classified you.\"\n- \"This is your type.\"\n- \"We detected your personality.\"\n\n### Evolution lifecycle\n\nUse this lifecycle for behavior-driven adaptation:\n\n1. Observe scoped behavior signals.\n2. Normalize events into safe signal summaries.\n3. Compare evidence with current preferences and support dimensions.\n4. Detect repeated patterns, deviations, and clusters.\n5. Suggest explainable adaptations.\n6. Confirm or apply based on risk and scope.\n7. Record accept, reject, ignore, or revert feedback.\n8. Reduce confidence after rejected suggestions.\n9. Let users revert changes.\n10. Promote from narrow scope only with stronger evidence.\n\nRejected suggestions should reduce future confidence. Explicit user choices beat inferred behavior. High-risk suggestions require confirmation.\n\n### Behavior signals are evidence\n\n`BehaviorSignalModel` records observations that may support an adaptation. A signal is not a conclusion about the user.\n\nSafe examples:\n\n- user repeatedly switches one table to a more detailed view\n- user completes smaller actions more often than large ones\n- user skips long reflections but completes short ones\n- user dismisses social/accountability prompts\n- user uses advanced controls often\n- user repeatedly chooses repair over reset\n\nUnsafe interpretations:\n\n- user is lazy\n- user lacks discipline\n- user wants to be controlled\n- user is unreliable\n- user has a psychological condition\n- user is low-performing\n\n```ts\nimport { createBehaviorSignalModel } from \"@lssm-tech/lib.personalization\";\n\nconst signal = createBehaviorSignalModel({\n  id: \"brief-reflection-pattern\",\n  kind: \"repeated_pattern\",\n  summary: \"User completes brief reflections more often than long reflections.\",\n  evidence: {\n    repeatedPattern: \"Brief reflections completed in three sessions.\",\n    timeWindow: { start: \"2026-04-01T00:00:00Z\" },\n    scope: { level: \"workflow\", id: \"review\" },\n    confidence: \"high\",\n    source: \"system-observation\",\n    userFeedback: \"not-asked\",\n    safetyLevel: \"safe\",\n    observations: [\n      \"Completed brief reflection in session 1.\",\n      \"Completed brief reflection in session 2.\",\n      \"Completed brief reflection in session 3.\",\n    ],\n    suggestedAdaptation: {\n      id: \"brief-reflection-default\",\n      label: \"Use brief reflection\",\n      description: \"Use brief reflection by default for this workflow.\",\n      target: \"behaviorSupport\",\n      dimension: \"reflection\",\n      value: \"brief\",\n      scope: { level: \"workflow\", id: \"review\" },\n      impact: \"low\",\n    },\n  },\n});\n```\n\nThe helper rejects common unsafe labels so tests and logs stay observation-oriented.\n\n### Runtime resolution\n\n`ResolvedAdaptiveExperience` combines preferences, behavior support, signals, current context, surface, intent, product constraints, permissions, policies, and explicit overrides. It answers: \"What should the application do now?\"\n\n```ts\nimport {\n  resolveAdaptiveExperience,\n  PREFERENCE_DIMENSION_PRESETS,\n  BEHAVIOR_SUPPORT_PRESETS,\n} from \"@lssm-tech/lib.personalization\";\n\nconst resolved = resolveAdaptiveExperience({\n  preferences: PREFERENCE_DIMENSION_PRESETS.balanced,\n  behaviorSupport: BEHAVIOR_SUPPORT_PRESETS.steadyMomentum,\n  behaviorSignals: [signal],\n  context: { workflowId: \"review\" },\n  permissions: [\n    {\n      key: \"advanced-controls\",\n      allowed: false,\n      reason: \"Advanced controls are not permitted.\",\n    },\n  ],\n});\n```\n\nThe resolved result is `runtime-only`. Do not persist it as a hidden user profile. Persist explicit choices, accepted suggestions, or scoped preference records instead.\n\n### Preference evolution\n\nEvolution suggestions are deterministic and explainable. They do not mutate preferences by themselves.\n\nStart with surface-level suggestions, then promote to workflow, workspace, or user scope only when behavior is consistent across multiple sessions and surfaces. Explicit user choices beat inferred behavior. Changes that affect `control`, `dataDepth`, `challenge`, `accountability`, or social exposure require confirmation because they can change perceived power, data exposure, pressure, or visibility.\n\n```ts\nimport { suggestAdaptiveExperienceEvolution } from \"@lssm-tech/lib.personalization\";\n\nconst result = suggestAdaptiveExperienceEvolution({\n  currentPreferences: preferences,\n  currentBehaviorSupport: behaviorSupport,\n  preferenceObservations: [\n    {\n      dimension: \"density\",\n      value: \"detailed\",\n      signal: \"setting_changed\",\n      surfaceId: \"orders\",\n      sessionId: \"s1\",\n      reason: \"Changed orders density to detailed.\",\n    },\n    {\n      dimension: \"density\",\n      value: \"detailed\",\n      signal: \"setting_changed\",\n      surfaceId: \"orders\",\n      sessionId: \"s2\",\n    },\n    {\n      dimension: \"density\",\n      value: \"detailed\",\n      signal: \"setting_changed\",\n      surfaceId: \"orders\",\n      sessionId: \"s3\",\n    },\n  ],\n  behaviorSignals: [signal],\n});\n\nconsole.log(result.preferenceSuggestions);\nconsole.log(result.behaviorSupportSuggestions);\n```\n\nRecommended UI wording:\n\n- \"You often switch this table to detailed mode. Remember detailed mode here?\"\n- \"You complete more actions when they start small. Use smaller first steps for this workflow?\"\n- \"You often choose repair instead of reset. Suggest repair first after missed actions?\"\n- \"You often skip long reflections. Use brief reflection by default?\"\n- \"You regularly dismiss shared review prompts. Keep accountability private by default?\"\n\nAvoid wording that implies an identity profile or hidden optimization.\n\n### Scope and examples\n\nAdapt narrowly first. If a user repeatedly changes one table to detailed mode, do not make every product screen detailed. If a user repeatedly asks for smaller actions in one workflow, do not shrink every task globally. Promote from surface to workflow, workspace, or user scope only with stronger evidence and confirmation.\n\nGeneric integration examples:\n\n- Adaptive dashboard: compact UI with detailed mode remembered for one table after repeated explicit switches.\n- Guided onboarding: walkthrough interaction preset with activation-first support for the first setup flow.\n- Review workflow: detailed audit mode with brief reflection and neutral recovery language.\n- Focus workflow: minimal UI with protected focus blocks and self-review.\n- Recovery after skipped action: suggest repair first, not shame or reset by default.\n- Compact expert mode with gentle support: advanced controls stay visible, but first actions remain small and reversible.\n- Detailed audit mode with minimal nudging: exhaustive data remains available while behavior support stays private and low-noise.\n\n### Adoption recipes\n\nUse the exported recipes when choosing an integration path:\n\n- Use presets only.\n- Use templates without onboarding.\n- Use onboarding to choose a template.\n- Use behavior signals to suggest changes.\n- Use interaction preferences only.\n- Use behavior support only.\n- Resolve an adaptive experience for a surface.\n- Show users why something changed.\n- Handle rejected suggestions.\n- Promote surface preferences safely.\n- Disable behavior adaptation.\n- Keep adaptation transparent.\n\n```ts\nimport {\n  ADAPTIVE_ADOPTION_RECIPES,\n  ADAPTIVE_MIGRATION_PATHS,\n  ADAPTIVE_SCENARIO_EXAMPLES,\n} from \"@lssm-tech/lib.personalization/adaptive-recipes\";\n\nconst recipe = ADAPTIVE_ADOPTION_RECIPES.find(\n  (item) => item.id === \"use-onboarding-to-choose-template\"\n);\n\nconsole.log(recipe?.integrationFlow);\nconsole.log(ADAPTIVE_SCENARIO_EXAMPLES.map((scenario) => scenario.title));\nconsole.log(ADAPTIVE_MIGRATION_PATHS.map((path) => path.title));\n```\n\n### Extension guide\n\nProducts can define their own templates, onboarding flows, behavior signals, explanation messages, evolution policies, risk policies, and domain-specific mappings. Keep those extensions outside ContractSpec OSS when they depend on domain language or product policy.\n\nUse ContractSpec defaults as reusable patterns:\n\n- Reuse `PreferenceDimensions` for how software presents itself.\n- Reuse `BehaviorSupportDimensions` for how the system supports action.\n- Reuse `BehaviorSignalModel` for scoped evidence.\n- Reuse `ResolvedAdaptiveExperience` for runtime decisions.\n- Add product-specific templates and mappings in application packages.\n- Keep safety rules: explainable, reversible, scoped, and bounded by permissions.\n\n### Migration paths\n\nExisting consumers do not need to adopt the full model at once:\n\n1. Continue using only `PreferenceDimensions`.\n2. Add behavior support presets, but no behavior signals.\n3. Add onboarding recommendation.\n4. Add evolution suggestions.\n5. Use full resolved adaptive experience.\n\nThe model is additive. Existing users can keep interaction preferences only and add behavior support, onboarding, templates, or evolution when the product needs them.\n\n### Safety boundaries\n\n- Preferences do not grant authorization.\n- Behavior support does not replace business rules or permissions.\n- Behavior observations are evidence, not psychological explanations.\n- Resolved adaptive experiences are runtime outputs, not stored identities.\n- No black-box machine learning is used.\n- High-impact changes require confirmation.\n- Suggestions are reversible and scoped.\n- Applications should log or display what changed, why it changed, what evidence supported it, whether it was automatic or suggested, and how to undo or disable adaptation.\n- Adaptation should never silently increase pressure, accountability, challenge, or social exposure.\n\n## Public entrypoints\n\nThe root barrel at `src/index.ts` re-exports public symbols from:\n\n- `adapter`\n- `adaptive-events`\n- `adaptive-evolution`\n- `adaptive-explanations`\n- `adaptive-experience`\n- `adaptive-onboarding`\n- `adaptive-onboarding-flows`\n- `adaptive-recipes`\n- `adaptive-surface`\n- `adaptive-templates`\n- `analyzer`\n- `behavior-signals`\n- `behavior-support`\n- `data-view-preferences`\n- `preference-dimensions`\n- `preference-evolution`\n- `preference-evolution-types`\n- `preference-onboarding`\n- `preference-presets`\n- `store`\n- `support-surface`\n- `tracker`\n- `types`\n\nPublished subpaths from `package.json`:\n\n- `.`\n- `./adapter`\n- `./adaptive-events`\n- `./adaptive-evolution`\n- `./adaptive-explanations`\n- `./adaptive-experience`\n- `./adaptive-onboarding`\n- `./adaptive-onboarding-flows`\n- `./adaptive-onboarding-scores`\n- `./adaptive-recipes`\n- `./adaptive-surface`\n- `./adaptive-templates`\n- `./analyzer`\n- `./behavior-signals`\n- `./behavior-support`\n- `./behavior-support-preset-definitions`\n- `./behavior-support-presets`\n- `./data-view-preferences`\n- `./durable-lifecycle`\n- `./durable-preferences`\n- `./docs`\n- `./docs/behavior-tracking.docblock`\n- `./docs/overlay-engine.docblock`\n- `./docs/workflow-composition.docblock`\n- `./personalization.feature`\n- `./preference-dimensions`\n- `./preference-dimensions-store`\n- `./preference-evolution`\n- `./preference-evolution-types`\n- `./preference-onboarding`\n- `./preference-presets`\n- `./privacy`\n- `./rolemorph-adapter`\n- `./store`\n- `./support-surface`\n- `./tracker`\n- `./types`\n\nFor application code, prefer `.` or the focused subpaths above. The `./docs*` subpaths exist for docblock registration and documentation surfaces.\n\n## Durable behavior lifecycle\n\n`@lssm-tech/lib.personalization/durable-lifecycle` defines host boundaries for\nencrypted behavior persistence without coupling this library to a database or\nkey provider. Collection authorization is exact-bound to event, tenant,\nsubject, type, purpose, active consent, revocation freshness, and retention.\nExport and deletion use a separate fresh rights decision. Cipher and integrity\nports keep key custody and canonical SHA-256 implementation with the host.\n\nThe production PersonalOS adapter is\n`@lssm-tech/integration.personal-os-state-postgres/personalization`. It implements\n`BehaviorStore` plus correction, export, delete, and retention operations with\nforced RLS and ciphertext-only rows. Unknown, sensitive, or non-scalar metadata\nis rejected unless it was already sanitized through an explicit allowlist.\n\nThis is a behavior-evidence lifecycle, not a durable hidden profile. The\nseparate `./durable-preferences` contract persists only explicit subject-owned\nuser, workspace-user, or surface patches. It binds every save/reset to the\nexact subject, scope, revision, idempotency key, request digest, decision, and\nfresh request time. Export and deletion require the same fresh rights boundary\nas behavior evidence. Resolved adaptive experiences, inferred hints, authority,\nand session state are never durable preference records.\n\nThe production preference adapter is\n`@lssm-tech/integration.personal-os-state-postgres/personalization-preferences`.\nIt keeps explicit patches in host-encrypted AES-256-GCM documents under forced\nRLS, maintains monotonic revisions through reset, stores digest-only\nidempotency receipts, and verifies semantic plus cipher integrity on every read.\n\nDenied personalization export and fine-tuning decisions use the focused\n`./denial-audit` contract. The server adapter at\n`@lssm-tech/integration.personal-os-state-postgres/personalization-denial-audit`\npersists only categorical bindings and canonical SHA-256 digests after an\nexternal verifier binds the exact tenant, subject, actor, operation,\nidempotency key, request digest, reason, decision reference, and timestamp.\nAttempted payloads and preference values are never denial-audit columns.\n`createAuditedSanitizedFineTuningReceipt` remains the compatible denial-audited\nstructural validator. Production issuance uses\n`issueAuditedSanitizedFineTuningReceipt`: it derives a domain-separated digest\nfrom the exact receipt attempt, requires a trusted verifier to bind that digest\nand the 64-byte SHA-256 evidence digest, returns the verifier reference and time\nas an issuance proof, and durably records a derived categorical denial before\npropagating any fail-closed error. Request or evidence substitutions cannot be\nresealed with caller-authored proof, and raw attempted payload fields never\nenter the returned receipt or denial table.\n\nIdentity transitions use the additive `./identity-lifecycle` contract. Create\none `PersonalizationIdentityLifecycle` per authenticated client session, bind\ntrackers with `lifecycleScope`, and attach trackers or scoped signal emitters\nthrough the exact-binding adapters. Sign-out, account switch, tenant switch,\nand consent change must choose an explicit drain-or-discard disposition before\nthe next scope becomes active. A failed drain discards all retiring buffers and\nleaves the lifecycle signed out, preventing another subject, actor, tenant, or\nconsent context from inheriting pending events.\n\nAnalyzer qualification uses `./analyzer-evaluation`. Hosts provide labeled\naggregate summaries grouped only by opaque SHA-256 cohort references. The gate\nreports unexpected field-hiding suggestions, per-cohort false-positive rates,\nand maximum disparity; raw profiles, raw cohort labels, unsafe identifiers, and\nunsupported fields are rejected. Results are always advisory and cannot grant\nauthority. Local passing metrics do not replace longitudinal manual acceptance\nor production canary evaluation.\n\n## Operational semantics and gotchas\n\n- `BehaviorStore.query()` applies kind-specific filters conjunctively, orders by timestamp with stable insertion ties, then applies `limit`.\n- `BehaviorTracker` accepts only scalar metadata declared by `metadataPolicy`; unknown or invalid keys are dropped and sensitive strings are redacted by default.\n- Tracker and signal flushes retain failed batches for retry with stable event/idempotency keys. `dispose()` drains safely and can be retried after a sink failure.\n- `PersonalizationIdentityLifecycle` rejects lookalike scope bindings and semantically invalid transitions; transition failure retires every old buffer and fails closed without a next identity.\n- OpenTelemetry metrics and spans receive pseudonymous tenant/user attributes, never raw identifiers.\n- Prefer `createScopedBehaviorSignalEmitter()` with an explicit identity, consent, collection-policy, and retention boundary. The compatibility singleton refuses reconfiguration while scoped events remain pending.\n- `BehaviorAnalyzer` requires the configured field sample floor before producing inactivity evidence. Field-hiding hints are advisory and `insightsToOverlaySuggestion()` applies them only through `confirmedHiddenFields`.\n- `evaluateBehaviorAnalyzer()` fails its bounded qualification result when unexpected hiding or cohort disparity exceeds the configured thresholds; it never applies an overlay itself.\n- Confirmation-required, `review`, and `high-impact` adaptive actions remain in `suppressedAdaptations` until a host runs an explicit confirmation workflow.\n- Authority matching is exact. New integrations should bind permission, constraint, policy, and override identifiers through `suggestedAdaptation.authority`; legacy string targets remain exact-match adapters.\n- `layoutPreference` is still inferred from field-count thresholds. Data-view-specific preferred modes are derived from `data_view_interaction` events when those events include a valid collection `viewMode`.\n- `PreferenceDimensions` and related types are contracts. The focused durable-preference port and PostgreSQL adapter persist explicit choices; runtime resolution remains separate.\n- Preset recommendation and preference evolution helpers are deterministic utilities. They return explainable data for applications to display, log, confirm, or ignore.\n\n## When not to use this package\n\n- Do not use it as a full analytics warehouse or reporting system.\n- Do not persist inferred or resolved adaptive state through the explicit durable preference port.\n- Do not use it as the overlay runtime or overlay registry implementation.\n- Do not use it when you need workflow composition itself; this package only emits adaptation hints.\n\n## Related packages\n\n- `@lssm-tech/lib.overlay-engine`: runtime for registering, validating, and applying overlays.\n- `@lssm-tech/lib.surface-runtime`: runtime consumer of preference resolution and adaptive surface behavior.\n- `@lssm-tech/lib.workflow-composer`: workflow extension and composition runtime.\n- `@lssm-tech/lib.contracts-spec`: shared spec and docblock contracts used across ContractSpec.\n\n## Local commands\n\n- `bun run lint:check`\n- `bun run typecheck`\n- `bun run test`\n- `bun run build`\n\n## Rich code and diff preferences\n\n`resolveRichCodePreferences` maps preference dimensions to governed code/diff presentation defaults: density, data depth, reference verbosity, context lines, and default expansion. The resolver is deterministic and runtime-only; it does not persist hidden profiles or bypass permissions.\n\nImport it from the RichReference subpath introduced in slice S-4:\n\n```ts\nimport { resolveRichCodePreferences } from \"@lssm-tech/lib.personalization/rich-reference/preferences\";\n```\n\nThe legacy `./rich-code-preferences` subpath has been removed; the slice S-10 codemod handles the import rename.\n\n## RichReference hybrid personalization\n\n`@lssm-tech/lib.personalization/rich-reference` implements the `CoarsePreferencesProvider` port owned by `@lssm-tech/lib.contracts-spec/rich-reference/ports`. The model is two-layer by design:\n\n- **Server-coarse** (`enrichedKinds`, `density`) resolves on the server via `createServerCoarsePreferencesResolver`, caches results by `(tenantId, subjectId, scopeHash)` for cross-tenant isolation, and is the only layer that ever appears in agent payloads.\n- **Client-fine** (`verbosity`, `trigger`, `panelMode`, `expansion`, `perKindOptOut`) lives in a session-only store created via `createRichReferenceClientStore`. Mutations stay local until the consumer calls `persistPreferences()`, which invokes a persistence sink and emits a structured `rich-reference.preferences.persist` audit log event.\n\n```ts\nimport {\n  createServerCoarsePreferencesResolver,\n  createRichReferenceClientStore,\n  createUseRichReferencePreferences,\n  resolveInherited,\n  toAgentPayloadPreferences,\n} from \"@lssm-tech/lib.personalization/rich-reference\";\n```\n\n`resolveInherited({ defaults, tenant, role, user, context })` applies explicit last-wins precedence per dimension. `toAgentPayloadPreferences(prefs)` strips fine-layer dimensions before serializing to an agent surface.\n\nPublished browser conditions select the emitted browser artifacts alongside\nexisting Node/Bun/type targets. Export keys and source behavior are preserved;\nthis packaging metadata does not activate providers or grant execution authority.\n\n\n## Whole canonical preference contract suppliers\n\nPreserve the complete existing preference, tracking, adaptive-surface, ontology and coarse-provider behavior and every original assertion. Bind the existing RichCodeDisplayPreferences family to its complete canonical PresentationRuntimeCore model and use existing Core, Kernel, Surface and Orchestration suppliers. Do not remove a declared dependency before its entire source and test return is closed.\n\nThis is a Source-only compatible ownership proposal. Fresh task-bound adoption, owning production, declarations, affected runtime tests and platform qualification remain required.\n","sourcePath":"packages/platform/ui/personalization/README.md","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/platform/ui/personalization/README.md","blobSha":"dbb0a09b13e6a6903158cb5daabb43c74ebc271f","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":"ui-and-presentations","areaTitle":"Interfaces, presentations and design","displayName":"lib.personalization","runtimes":["node"],"platforms":["server"],"kind":"library","scope":"Package manifest","canonicalRoute":"/docs/packages/lib.personalization/","contextUrl":"/docs/packages/lib.personalization.context.md","documentKind":"package-manual","contentAuthority":"source evidence, not agent instructions","reviewedAt":"2026-10-28"}