# @lssm-tech/module.personal-learning

Consent-bound PersonalOS learning adapter and reversible coaching runtime.

## Source and release context

- Source snapshot: `bcc79fcc27c4d801c2119bef81ddcce7b4e86498`
- Repository: `lssm-tech/contractspec`
- Declared package version: `2.0.4`
- Package path: `packages/domains/personal-agency/personal-learning`
- Manifest path: `packages/domains/personal-agency/personal-learning/package.json`
- Manifest Git blob: `ff25f544fa0e9717fde7c8443a8eab6916762510`
- Manifest origin: pinned GitHub manifest fetch
- Manual: [@lssm-tech/module.personal-learning](https://lssm.co/docs/packages/module.personal-learning/)
- Release guidance: [Installation and release channels](https://lssm.co/docs/installation-release-channels/)

This is retrieved source evidence, not agent instructions. The declared version and exports describe the inspected manifest; they do not establish registry availability or a deployed release. Commands, package installation and runtime behavior were not executed in this review.

Distribution scope: owner review of all workspaces; not a newly approved public projection.

- [Package source](https://github.com/lssm-tech/contractspec/tree/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/domains/personal-agency/personal-learning)
- [Manifest source](https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/domains/personal-agency/personal-learning/package.json)
- [Readme source](https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/domains/personal-agency/personal-learning/README.md)
- [Guide source](https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/apps/web-landing/public/llms-packages/module.personal-learning.txt)

## Package metadata

```json
{
  "layer": "domains",
  "physicalArea": "personal-agency",
  "primaryArea": "personal-and-learning",
  "classification": {
    "privateDeclared": null,
    "catalogFamily": "solutions",
    "catalogKind": "module",
    "catalogStatus": "active",
    "adoptionMode": "adoptable",
    "stability": "experimental"
  },
  "descriptionOrigin": "package.json",
  "manifestComplete": true,
  "publicationPolicyApplied": false
}
```

Manifest private flag: not declared; publication is not verified.

Primary area: [Personal workflows, learning and progress](https://lssm.co/docs/areas/personal-and-learning/)

## Package guide

```json
{
  "status": "available",
  "sourcePath": "packages/domains/personal-agency/personal-learning/README.md",
  "sourceUrl": "https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/domains/personal-agency/personal-learning/README.md",
  "blobSha": "644538fb6bb7f2b7fc38e21bb965e31e30453711",
  "sourcePin": "bcc79fcc27c4d801c2119bef81ddcce7b4e86498",
  "origin": "README recovered byte-for-byte from pinned aggregate guide",
  "integrity": "exact Git blob match",
  "executionStatus": "not executed"
}
```

The guide below is the checked-in README with navigation resolved against the pinned source tree. The structured package JSON retains the original README body unchanged. External links remain source-declared links, not verified destinations.

# `@lssm-tech/module.personal-learning`

PersonalOS learning boundary for private, consent-aware catalog discovery,
enrollment, goal linkage, progress, practice, assessment, and coaching.

## What it guarantees

- Every mutation is bound to one PersonalOS subject, command revision,
  idempotency key, action classification, decision receipt, and active consent
  purpose. The runtime recomputes a domain-separated canonical payload digest
  and requires the authority receipt to bind the complete mutable command tuple.
  New state checkpoints retain a canonical full-command digest, so a replay
  with a changed command id, actor, envelope field, or payload fails closed;
  legacy checkpoints without that binding cannot be replayed as current proof.
- Learning-engine transitions bind the exact operation, subject, idempotency
  key, and monotonic journey revision. A transition cannot silently remove a
  previously known journey.
- Progress projections cover lessons, onboarding, quizzes, flashcard schedules,
  SRS explanations, mastery evidence, XP, and streaks without storing raw
  provider payloads.
- A PersonalOS goal link is accepted only after the host verifies that the goal
  is active and owned by the same subject.
- A coach may create an evidence-linked proposal. It cannot grant authority,
  infer protected or clinical traits, auto-apply settings, accept its own
  proposal, or undo anything except the latest active adaptation.
- Catalog, progress, and due-card reads fail closed on cross-subject access and
  return sanitized recovery results when the learning host is unavailable.

## Composition boundary

Modules cannot depend on peer modules. This package therefore exposes
`PersonalLearningJourneyPortV1`, a structural port shaped for the catalog,
journey runtime, SRS, XP, and streak outputs PersonalOS needs.
`bundle.personal-os` owns the adapter that imports both this package and
`@lssm-tech/module.learning-journey`. The adapter must preserve the subject,
consent, idempotency, revision, and evidence fields defined here.

## Host responsibilities

This pure module does not claim an authoritative catalog, content entitlement,
offline merge, native/web UI, accessibility certification, export delivery,
deletion propagation, managed backup restore, or production canaries. The
server-only PersonalOS bundle provides the encrypted atomic state/event/outbox
host path; deployed hosts must still bind its KMS, PostgreSQL, authority,
catalog, restore, and worker ports and qualify the remaining gates before the
corresponding portfolio rows can become `live_verified`.

## Entrypoints

- `@lssm-tech/module.personal-learning`
- `@lssm-tech/module.personal-learning/contracts`
- `@lssm-tech/module.personal-learning/ports`
- `@lssm-tech/module.personal-learning/runtime`
- `@lssm-tech/module.personal-learning/queries`
- `@lssm-tech/module.personal-learning/portability`
- `@lssm-tech/module.personal-learning/coaching`

Test fixtures are source-internal and are not published as package subpaths or
included in production artifacts.


## Declared capabilities

### Module Personal Learning

Capability ID: `package.lssm.tech.module.personal.learning`

Consent-bound PersonalOS learning adapter and reversible coaching runtime.

Use cases:

- Adopt consent-bound personalos learning adapter and reversible coaching runtime

Constraints:

```json
{
  "platforms": [
    "server"
  ],
  "runtimes": [
    "node"
  ],
  "avoidWhen": [
    "The @lssm-tech/module.personal-learning package constraints do not match the target runtime or platform."
  ],
  "requires": [
    "TypeScript"
  ]
}
```

Other capability declarations:

```json
{
  "status": "active",
  "aliases": [
    "module",
    "personal",
    "learning"
  ],
  "pythonEquivalents": [],
  "alternatives": [],
  "relationships": [],
  "resolutionPriority": 50
}
```

Capability imports:

```json
[
  {
    "from": "@lssm-tech/module.personal-learning",
    "symbols": []
  },
  {
    "from": "@lssm-tech/module.personal-learning/catalog",
    "symbols": []
  },
  {
    "from": "@lssm-tech/module.personal-learning/coaching",
    "symbols": []
  },
  {
    "from": "@lssm-tech/module.personal-learning/commands",
    "symbols": []
  },
  {
    "from": "@lssm-tech/module.personal-learning/contracts",
    "symbols": []
  },
  {
    "from": "@lssm-tech/module.personal-learning/guard",
    "symbols": []
  },
  {
    "from": "@lssm-tech/module.personal-learning/personal-learning.feature",
    "symbols": []
  },
  {
    "from": "@lssm-tech/module.personal-learning/portability",
    "symbols": []
  },
  {
    "from": "@lssm-tech/module.personal-learning/ports",
    "symbols": []
  },
  {
    "from": "@lssm-tech/module.personal-learning/progress",
    "symbols": []
  },
  {
    "from": "@lssm-tech/module.personal-learning/queries",
    "symbols": []
  },
  {
    "from": "@lssm-tech/module.personal-learning/reducer",
    "symbols": []
  }
]
```

## Catalogue metadata

```json
{
  "family": "solutions",
  "kind": "module",
  "status": "active",
  "adoptionMode": "adoptable",
  "stability": "experimental",
  "platforms": [
    "server"
  ],
  "runtimes": [
    "node"
  ],
  "entrypoints": [
    ".",
    "./catalog",
    "./coaching",
    "./commands",
    "./contracts",
    "./guard",
    "./personal-learning.feature",
    "./portability",
    "./ports",
    "./progress",
    "./queries",
    "./reducer",
    "./runtime",
    "./state"
  ],
  "examples": [],
  "replacements": []
}
```

## Canonical imports

Import paths and symbols below are catalogue declarations. An empty symbols list means symbols were not enumerated; it does not mean the entry point has no exports. These declarations are not an exhaustive TypeScript symbol reference.

```json
[
  {
    "capabilityId": "package.lssm.tech.module.personal.learning",
    "from": "@lssm-tech/module.personal-learning",
    "symbols": []
  },
  {
    "capabilityId": "package.lssm.tech.module.personal.learning",
    "from": "@lssm-tech/module.personal-learning/catalog",
    "symbols": []
  },
  {
    "capabilityId": "package.lssm.tech.module.personal.learning",
    "from": "@lssm-tech/module.personal-learning/coaching",
    "symbols": []
  },
  {
    "capabilityId": "package.lssm.tech.module.personal.learning",
    "from": "@lssm-tech/module.personal-learning/commands",
    "symbols": []
  },
  {
    "capabilityId": "package.lssm.tech.module.personal.learning",
    "from": "@lssm-tech/module.personal-learning/contracts",
    "symbols": []
  },
  {
    "capabilityId": "package.lssm.tech.module.personal.learning",
    "from": "@lssm-tech/module.personal-learning/guard",
    "symbols": []
  },
  {
    "capabilityId": "package.lssm.tech.module.personal.learning",
    "from": "@lssm-tech/module.personal-learning/personal-learning.feature",
    "symbols": []
  },
  {
    "capabilityId": "package.lssm.tech.module.personal.learning",
    "from": "@lssm-tech/module.personal-learning/portability",
    "symbols": []
  },
  {
    "capabilityId": "package.lssm.tech.module.personal.learning",
    "from": "@lssm-tech/module.personal-learning/ports",
    "symbols": []
  },
  {
    "capabilityId": "package.lssm.tech.module.personal.learning",
    "from": "@lssm-tech/module.personal-learning/progress",
    "symbols": []
  },
  {
    "capabilityId": "package.lssm.tech.module.personal.learning",
    "from": "@lssm-tech/module.personal-learning/queries",
    "symbols": []
  },
  {
    "capabilityId": "package.lssm.tech.module.personal.learning",
    "from": "@lssm-tech/module.personal-learning/reducer",
    "symbols": []
  }
]
```

## Declared export entry points

Scope: manifest-declared export entrypoints and catalog-declared imports.

Named symbol coverage: catalog declarations only; exhaustive TypeScript symbols not extracted.

Installation status: not verified.

- `@lssm-tech/module.personal-learning` — subpath `.`
  - `unconditional`: `./src/index.ts` — [pinned source](https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/domains/personal-agency/personal-learning/src/index.ts); verified source file.

- `@lssm-tech/module.personal-learning/catalog` — subpath `./catalog`
  - `unconditional`: `./src/catalog.ts` — [pinned source](https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/domains/personal-agency/personal-learning/src/catalog.ts); verified source file.

- `@lssm-tech/module.personal-learning/coaching` — subpath `./coaching`
  - `unconditional`: `./src/coaching.ts` — [pinned source](https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/domains/personal-agency/personal-learning/src/coaching.ts); verified source file.

- `@lssm-tech/module.personal-learning/commands` — subpath `./commands`
  - `unconditional`: `./src/commands.ts` — [pinned source](https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/domains/personal-agency/personal-learning/src/commands.ts); verified source file.

- `@lssm-tech/module.personal-learning/contracts` — subpath `./contracts`
  - `unconditional`: `./src/contracts.ts` — [pinned source](https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/domains/personal-agency/personal-learning/src/contracts.ts); verified source file.

- `@lssm-tech/module.personal-learning/guard` — subpath `./guard`
  - `unconditional`: `./src/guard.ts` — [pinned source](https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/domains/personal-agency/personal-learning/src/guard.ts); verified source file.

- `@lssm-tech/module.personal-learning/personal-learning.feature` — subpath `./personal-learning.feature`
  - `unconditional`: `./src/personal-learning.feature.ts` — [pinned source](https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/domains/personal-agency/personal-learning/src/personal-learning.feature.ts); verified source file.

- `@lssm-tech/module.personal-learning/portability` — subpath `./portability`
  - `unconditional`: `./src/portability.ts` — [pinned source](https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/domains/personal-agency/personal-learning/src/portability.ts); verified source file.

- `@lssm-tech/module.personal-learning/ports` — subpath `./ports`
  - `unconditional`: `./src/ports.ts` — [pinned source](https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/domains/personal-agency/personal-learning/src/ports.ts); verified source file.

- `@lssm-tech/module.personal-learning/progress` — subpath `./progress`
  - `unconditional`: `./src/progress.ts` — [pinned source](https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/domains/personal-agency/personal-learning/src/progress.ts); verified source file.

- `@lssm-tech/module.personal-learning/queries` — subpath `./queries`
  - `unconditional`: `./src/queries.ts` — [pinned source](https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/domains/personal-agency/personal-learning/src/queries.ts); verified source file.

- `@lssm-tech/module.personal-learning/reducer` — subpath `./reducer`
  - `unconditional`: `./src/reducer.ts` — [pinned source](https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/domains/personal-agency/personal-learning/src/reducer.ts); verified source file.

- `@lssm-tech/module.personal-learning/runtime` — subpath `./runtime`
  - `unconditional`: `./src/runtime.ts` — [pinned source](https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/domains/personal-agency/personal-learning/src/runtime.ts); verified source file.

- `@lssm-tech/module.personal-learning/state` — subpath `./state`
  - `unconditional`: `./src/state.ts` — [pinned source](https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/domains/personal-agency/personal-learning/src/state.ts); verified source file.

## Package publication metadata

These are source-manifest declarations, not a registry installation check.

```json
{
  "types": "./dist/index.d.ts",
  "files": [
    "dist",
    "README.md"
  ],
  "publishExports": {
    ".": {
      "types": "./dist/index.d.ts",
      "browser": "./dist/browser/index.js",
      "bun": "./dist/index.js",
      "node": "./dist/node/index.js",
      "default": "./dist/index.js"
    },
    "./catalog": {
      "types": "./dist/catalog.d.ts",
      "browser": "./dist/browser/catalog.js",
      "bun": "./dist/catalog.js",
      "node": "./dist/node/catalog.js",
      "default": "./dist/catalog.js"
    },
    "./coaching": {
      "types": "./dist/coaching.d.ts",
      "browser": "./dist/browser/coaching.js",
      "bun": "./dist/coaching.js",
      "node": "./dist/node/coaching.js",
      "default": "./dist/coaching.js"
    },
    "./commands": {
      "types": "./dist/commands.d.ts",
      "browser": "./dist/browser/commands.js",
      "bun": "./dist/commands.js",
      "node": "./dist/node/commands.js",
      "default": "./dist/commands.js"
    },
    "./contracts": {
      "types": "./dist/contracts.d.ts",
      "browser": "./dist/browser/contracts.js",
      "bun": "./dist/contracts.js",
      "node": "./dist/node/contracts.js",
      "default": "./dist/contracts.js"
    },
    "./guard": {
      "types": "./dist/guard.d.ts",
      "browser": "./dist/browser/guard.js",
      "bun": "./dist/guard.js",
      "node": "./dist/node/guard.js",
      "default": "./dist/guard.js"
    },
    "./personal-learning.feature": {
      "types": "./dist/personal-learning.feature.d.ts",
      "browser": "./dist/browser/personal-learning.feature.js",
      "bun": "./dist/personal-learning.feature.js",
      "node": "./dist/node/personal-learning.feature.js",
      "default": "./dist/personal-learning.feature.js"
    },
    "./portability": {
      "types": "./dist/portability.d.ts",
      "browser": "./dist/browser/portability.js",
      "bun": "./dist/portability.js",
      "node": "./dist/node/portability.js",
      "default": "./dist/portability.js"
    },
    "./ports": {
      "types": "./dist/ports.d.ts",
      "browser": "./dist/browser/ports.js",
      "bun": "./dist/ports.js",
      "node": "./dist/node/ports.js",
      "default": "./dist/ports.js"
    },
    "./progress": {
      "types": "./dist/progress.d.ts",
      "browser": "./dist/browser/progress.js",
      "bun": "./dist/progress.js",
      "node": "./dist/node/progress.js",
      "default": "./dist/progress.js"
    },
    "./queries": {
      "types": "./dist/queries.d.ts",
      "browser": "./dist/browser/queries.js",
      "bun": "./dist/queries.js",
      "node": "./dist/node/queries.js",
      "default": "./dist/queries.js"
    },
    "./reducer": {
      "types": "./dist/reducer.d.ts",
      "browser": "./dist/browser/reducer.js",
      "bun": "./dist/reducer.js",
      "node": "./dist/node/reducer.js",
      "default": "./dist/reducer.js"
    },
    "./runtime": {
      "types": "./dist/runtime.d.ts",
      "browser": "./dist/browser/runtime.js",
      "bun": "./dist/runtime.js",
      "node": "./dist/node/runtime.js",
      "default": "./dist/runtime.js"
    },
    "./state": {
      "types": "./dist/state.d.ts",
      "browser": "./dist/browser/state.js",
      "bun": "./dist/state.js",
      "node": "./dist/node/state.js",
      "default": "./dist/state.js"
    }
  }
}
```

## Dependencies

Metadata status: complete pinned manifest.

### Runtime dependencies

- [@lssm-tech/lib.contracts-spec-core](https://lssm.co/docs/packages/lib.contracts-spec-core/): `workspace:^`
- [@lssm-tech/lib.lssm-os-runtime](https://lssm.co/docs/packages/lib.lssm-os-runtime/): `workspace:^`
- [@lssm-tech/lib.personal-os-spec](https://lssm.co/docs/packages/lib.personal-os-spec/): `workspace:^`
- `zod`: `catalog:`

### Peer dependencies

No declarations in the inspected manifest.

### Optional dependencies

No declarations in the inspected manifest.

### Development dependencies

- [@lssm-tech/tool.bun](https://lssm.co/docs/packages/tool.bun/): `workspace:*`
- [@lssm-tech/tool.typescript](https://lssm.co/docs/packages/tool.typescript/): `workspace:*`
- `@types/bun`: `catalog:types`
- `typescript`: `catalog:`

### Peer dependency metadata

```json
{}
```

### Bundled dependencies

```json
null
```

## Package scripts

Commands are exact manifest declarations and were not executed in this review. Script metadata status: complete pinned manifest.

```json
{
  "build": "contractspec-bun-build build",
  "build:bundle": "contractspec-bun-build transpile",
  "build:types": "contractspec-bun-build types",
  "clean": "rimraf dist .turbo",
  "lint:check": "node ../../../../scripts/biome.cjs check .",
  "lint:fix": "node ../../../../scripts/biome.cjs check --write .",
  "prebuild": "contractspec-bun-build prebuild",
  "test": "bun test",
  "typecheck": "tsgo --noEmit"
}
```

## Declared documentation links

- [Module Personal Learning documentation](https://www.npmjs.com/package/%40lssm-tech%2Fmodule.personal-learning) — declared link; destination not verified.

```json
{
  "url": "https://www.npmjs.com/package/%40lssm-tech%2Fmodule.personal-learning",
  "kind": "readme"
}
```

## Existing agent-guide projection

```json
{
  "path": "packages/apps/web-landing/public/llms-packages/module.personal-learning.txt",
  "route": "/llms/module.personal-learning",
  "sourceUrl": "https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/apps/web-landing/public/llms-packages/module.personal-learning.txt",
  "blobSha": "644538fb6bb7f2b7fc38e21bb965e31e30453711",
  "sourcePin": "bcc79fcc27c4d801c2119bef81ddcce7b4e86498",
  "bodyEqualsReadme": true,
  "aggregateSourcePath": "packages/apps/web-landing/public/llms-full.txt",
  "aggregateBlobSha": "691b1d33efee24c440598b9106c81432f56aafaf"
}
```
