@lssm/example.learning-journey-registry 0.0.0-canary-20251216035145 → 0.0.0-canary-20251216062412

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2,16 +2,17 @@ $ bun build:bundle && bun build:types
2
2
  $ tsdown
3
3
  ℹ tsdown v0.17.4 powered by rolldown v1.0.0-beta.53
4
4
  ℹ config file: /home/runner/work/contractspec/contractspec/packages/examples/learning-journey-registry/tsdown.config.js
5
- ℹ entry: src/api-types.ts, src/api.ts, src/example.ts, src/index.ts, src/progress-store.ts, src/tracks.ts, src/docs/index.ts, src/docs/learning-journey-registry.docblock.ts, src/presentations/index.ts, src/ui/LearningMiniApp.tsx, src/ui/index.ts
5
+ ℹ entry: src/api-types.ts, src/api.ts, src/example.ts, src/index.ts, src/learning-journey-registry.feature.ts, src/progress-store.ts, src/tracks.ts, src/docs/index.ts, src/docs/learning-journey-registry.docblock.ts, src/presentations/index.ts, src/ui/LearningMiniApp.tsx, src/ui/index.ts
6
6
  ℹ target: esnext
7
7
  ℹ tsconfig: tsconfig.json
8
8
  ℹ Build start
9
9
  ℹ dist/api.js  3.28 kB │ gzip: 1.37 kB
10
10
  ℹ dist/ui/LearningMiniApp.js  1.88 kB │ gzip: 0.70 kB
11
11
  ℹ dist/tracks.js  1.30 kB │ gzip: 0.50 kB
12
+ ℹ dist/index.js  1.23 kB │ gzip: 0.42 kB
12
13
  ℹ dist/docs/learning-journey-registry.docblock.js  1.21 kB │ gzip: 0.63 kB
13
- ℹ dist/index.js  1.10 kB │ gzip: 0.38 kB
14
14
  ℹ dist/presentations/index.js  0.99 kB │ gzip: 0.39 kB
15
+ ℹ dist/learning-journey-registry.feature.js  0.86 kB │ gzip: 0.36 kB
15
16
  ℹ dist/example.js  0.52 kB │ gzip: 0.32 kB
16
17
  ℹ dist/progress-store.js  0.43 kB │ gzip: 0.29 kB
17
18
  ℹ dist/ui/index.js  0.19 kB │ gzip: 0.11 kB
@@ -20,6 +21,7 @@ $ tsdown
20
21
  ℹ dist/libs/contracts/src/docs/accessibility_wcag_compliance_specs.docblock.js 16.53 kB │ gzip: 7.16 kB
21
22
  ℹ dist/libs/contracts/src/docs/tech/schema/README.docblock.js 10.99 kB │ gzip: 4.29 kB
22
23
  ℹ dist/libs/contracts/src/docs/tech/lifecycle-stage-system.docblock.js  9.67 kB │ gzip: 3.78 kB
24
+ ℹ dist/libs/contracts/src/docs/tech/llm/llm-integration.docblock.js  9.12 kB │ gzip: 3.42 kB
23
25
  ℹ dist/libs/contracts/src/docs/tech/PHASE_1_QUICKSTART.docblock.js  8.76 kB │ gzip: 2.68 kB
24
26
  ℹ dist/libs/contracts/src/docs/tech/PHASE_3_AUTO_EVOLUTION.docblock.js  5.93 kB │ gzip: 2.61 kB
25
27
  ℹ dist/libs/contracts/src/docs/tech/templates/runtime.docblock.js  5.63 kB │ gzip: 2.58 kB
@@ -40,12 +42,12 @@ $ tsdown
40
42
  ℹ dist/libs/contracts/src/docs/tech/studio/learning-events.docblock.js  1.79 kB │ gzip: 0.88 kB
41
43
  ℹ dist/libs/contracts/src/docs/tech/contracts/openapi-export.docblock.js  1.72 kB │ gzip: 0.90 kB
42
44
  ℹ dist/libs/contracts/src/docs/tech/studio/project-access-teams.docblock.js  1.58 kB │ gzip: 0.78 kB
43
- ℹ dist/libs/contracts/src/docs/index.js  1.50 kB │ gzip: 0.51 kB
45
+ ℹ dist/libs/contracts/src/docs/index.js  1.54 kB │ gzip: 0.52 kB
44
46
  ℹ dist/libs/contracts/src/docs/tech/studio/workspace-ops.docblock.js  1.49 kB │ gzip: 0.73 kB
45
47
  ℹ dist/libs/contracts/src/docs/tech/mcp-endpoints.docblock.js  1.24 kB │ gzip: 0.68 kB
46
48
  ℹ dist/libs/contracts/src/docs/presentations.js  1.23 kB │ gzip: 0.59 kB
47
49
  ℹ dist/libs/contracts/src/docs/tech/studio/sandbox-unlogged.docblock.js  0.90 kB │ gzip: 0.56 kB
48
50
  ℹ dist/libs/contracts/src/docs/registry.js  0.74 kB │ gzip: 0.42 kB
49
- ℹ 40 files, total: 126.00 kB
50
- ✔ Build complete in 55ms
51
+ ℹ 42 files, total: 136.15 kB
52
+ ✔ Build complete in 57ms
51
53
  $ tsc --noEmit
package/CHANGELOG.md CHANGED
@@ -1,17 +1,17 @@
1
1
  # @lssm/example.learning-journey-registry
2
2
 
3
- ## 0.0.0-canary-20251216035145
3
+ ## 0.0.0-canary-20251216062412
4
4
 
5
5
  ### Patch Changes
6
6
 
7
- - @lssm/example.learning-journey-crm-onboarding@0.0.0-canary-20251216035145
8
- - @lssm/example.learning-journey-ui-coaching@0.0.0-canary-20251216035145
9
- - @lssm/example.learning-journey-ui-gamified@0.0.0-canary-20251216035145
10
- - @lssm/example.learning-journey-ui-onboarding@0.0.0-canary-20251216035145
11
- - @lssm/example.learning-journey-ui-shared@0.0.0-canary-20251216035145
12
- - @lssm/example.learning-journey-ambient-coach@0.0.0-canary-20251216035145
13
- - @lssm/example.learning-journey-duo-drills@0.0.0-canary-20251216035145
14
- - @lssm/example.learning-journey-platform-tour@0.0.0-canary-20251216035145
15
- - @lssm/example.learning-journey-quest-challenges@0.0.0-canary-20251216035145
16
- - @lssm/example.learning-journey-studio-onboarding@0.0.0-canary-20251216035145
17
- - @lssm/module.learning-journey@0.0.0-canary-20251216035145
7
+ - @lssm/example.learning-journey-crm-onboarding@0.0.0-canary-20251216062412
8
+ - @lssm/example.learning-journey-ui-coaching@0.0.0-canary-20251216062412
9
+ - @lssm/example.learning-journey-ui-gamified@0.0.0-canary-20251216062412
10
+ - @lssm/example.learning-journey-ui-onboarding@0.0.0-canary-20251216062412
11
+ - @lssm/example.learning-journey-ui-shared@0.0.0-canary-20251216062412
12
+ - @lssm/example.learning-journey-ambient-coach@0.0.0-canary-20251216062412
13
+ - @lssm/example.learning-journey-duo-drills@0.0.0-canary-20251216062412
14
+ - @lssm/example.learning-journey-platform-tour@0.0.0-canary-20251216062412
15
+ - @lssm/example.learning-journey-quest-challenges@0.0.0-canary-20251216062412
16
+ - @lssm/example.learning-journey-studio-onboarding@0.0.0-canary-20251216062412
17
+ - @lssm/module.learning-journey@0.0.0-canary-20251216062412
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- import{crmLearningTracks as e,learningJourneyTracks as t,mapStep as n,mapTrackSpecToDto as r,onboardingTrackCatalog as i,platformLearningTracks as a,studioLearningTracks as o}from"./tracks.js";import{getProgress as s,listTracks as c,recordEvent as l}from"./api.js";import u from"./example.js";import"./docs/index.js";import{LearningTrackDetailPresentation as d,LearningTrackListPresentation as f,LearningTrackProgressWidgetPresentation as p,learningJourneyPresentations as m}from"./presentations/index.js";import{LearningMiniApp as h,getLearningTemplateIds as g,isLearningTemplate as _}from"./ui/LearningMiniApp.js";import"./ui/index.js";export{h as LearningMiniApp,d as LearningTrackDetailPresentation,f as LearningTrackListPresentation,p as LearningTrackProgressWidgetPresentation,e as crmLearningTracks,u as example,g as getLearningTemplateIds,s as getProgress,_ as isLearningTemplate,m as learningJourneyPresentations,t as learningJourneyTracks,c as listTracks,n as mapStep,r as mapTrackSpecToDto,i as onboardingTrackCatalog,a as platformLearningTracks,l as recordEvent,o as studioLearningTracks};
1
+ import{crmLearningTracks as e,learningJourneyTracks as t,mapStep as n,mapTrackSpecToDto as r,onboardingTrackCatalog as i,platformLearningTracks as a,studioLearningTracks as o}from"./tracks.js";import{getProgress as s,listTracks as c,recordEvent as l}from"./api.js";import u from"./example.js";import"./docs/index.js";import{LearningTrackDetailPresentation as d,LearningTrackListPresentation as f,LearningTrackProgressWidgetPresentation as p,learningJourneyPresentations as m}from"./presentations/index.js";import{LearningJourneyRegistryFeature as h}from"./learning-journey-registry.feature.js";import{LearningMiniApp as g,getLearningTemplateIds as _,isLearningTemplate as v}from"./ui/LearningMiniApp.js";import"./ui/index.js";export{h as LearningJourneyRegistryFeature,g as LearningMiniApp,d as LearningTrackDetailPresentation,f as LearningTrackListPresentation,p as LearningTrackProgressWidgetPresentation,e as crmLearningTracks,u as example,_ as getLearningTemplateIds,s as getProgress,v as isLearningTemplate,m as learningJourneyPresentations,t as learningJourneyTracks,c as listTracks,n as mapStep,r as mapTrackSpecToDto,i as onboardingTrackCatalog,a as platformLearningTracks,l as recordEvent,o as studioLearningTracks};
@@ -0,0 +1 @@
1
+ const e={meta:{key:`learning-journey-registry`,title:`Learning Journey Registry`,description:`Shared registry and presentations for learning journey tracks`,domain:`learning-journey`,owners:[`@learning-team`],tags:[`learning`,`journey`,`onboarding`,`registry`],stability:`experimental`},operations:[],events:[],presentations:[{name:`learning.journey.track_list`,version:1},{name:`learning.journey.track_detail`,version:1},{name:`learning.journey.progress_widget`,version:1}],opToPresentation:[],presentationsTargets:[{name:`learning.journey.track_list`,version:1,targets:[`react`,`markdown`]},{name:`learning.journey.track_detail`,version:1,targets:[`react`,`markdown`,`application/json`]},{name:`learning.journey.progress_widget`,version:1,targets:[`react`]}],capabilities:{requires:[{key:`identity`,version:1}]}};export{e as LearningJourneyRegistryFeature};
@@ -1 +1 @@
1
- import{docBlockToPresentationSpec as e,docBlockToPresentationV2 as t,docBlocksToPresentationRoutes as n}from"./presentations.js";import{DocRegistry as r,defaultDocRegistry as i,registerDocBlocks as a}from"./registry.js";import"./PUBLISHING.docblock.js";import"./accessibility_wcag_compliance_specs.docblock.js";import"./tech/PHASE_1_QUICKSTART.docblock.js";import"./tech/PHASE_2_AI_NATIVE_OPERATIONS.docblock.js";import"./tech/PHASE_3_AUTO_EVOLUTION.docblock.js";import"./tech/PHASE_4_PERSONALIZATION_ENGINE.docblock.js";import"./tech/PHASE_5_ZERO_TOUCH_OPERATIONS.docblock.js";import"./tech/lifecycle-stage-system.docblock.js";import"./tech/presentation-runtime.docblock.js";import"./tech/auth/better-auth-nextjs.docblock.js";import"./tech/schema/README.docblock.js";import"./tech/templates/runtime.docblock.js";import"./tech/workflows/overview.docblock.js";import"./tech/mcp-endpoints.docblock.js";import"./tech/vscode-extension.docblock.js";import"./tech/telemetry-ingest.docblock.js";import"./tech/contracts/openapi-export.docblock.js";import"./tech/studio/workspaces.docblock.js";import"./tech/studio/sandbox-unlogged.docblock.js";import"./tech/studio/workspace-ops.docblock.js";import"./tech/studio/project-routing.docblock.js";import"./tech/studio/platform-admin-panel.docblock.js";import"./tech/studio/learning-events.docblock.js";import"./tech/studio/learning-journeys.docblock.js";import"./tech/studio/project-access-teams.docblock.js";import"./tech/studio/team-invitations.docblock.js";
1
+ import{docBlockToPresentationSpec as e,docBlockToPresentationV2 as t,docBlocksToPresentationRoutes as n}from"./presentations.js";import{DocRegistry as r,defaultDocRegistry as i,registerDocBlocks as a}from"./registry.js";import"./PUBLISHING.docblock.js";import"./accessibility_wcag_compliance_specs.docblock.js";import"./tech/PHASE_1_QUICKSTART.docblock.js";import"./tech/PHASE_2_AI_NATIVE_OPERATIONS.docblock.js";import"./tech/PHASE_3_AUTO_EVOLUTION.docblock.js";import"./tech/PHASE_4_PERSONALIZATION_ENGINE.docblock.js";import"./tech/PHASE_5_ZERO_TOUCH_OPERATIONS.docblock.js";import"./tech/lifecycle-stage-system.docblock.js";import"./tech/presentation-runtime.docblock.js";import"./tech/auth/better-auth-nextjs.docblock.js";import"./tech/schema/README.docblock.js";import"./tech/templates/runtime.docblock.js";import"./tech/workflows/overview.docblock.js";import"./tech/mcp-endpoints.docblock.js";import"./tech/vscode-extension.docblock.js";import"./tech/telemetry-ingest.docblock.js";import"./tech/contracts/openapi-export.docblock.js";import"./tech/studio/workspaces.docblock.js";import"./tech/studio/sandbox-unlogged.docblock.js";import"./tech/studio/workspace-ops.docblock.js";import"./tech/studio/project-routing.docblock.js";import"./tech/studio/platform-admin-panel.docblock.js";import"./tech/studio/learning-events.docblock.js";import"./tech/studio/learning-journeys.docblock.js";import"./tech/studio/project-access-teams.docblock.js";import"./tech/studio/team-invitations.docblock.js";import"./tech/llm/llm-integration.docblock.js";
@@ -0,0 +1,289 @@
1
+ import{registerDocBlocks as e}from"../../registry.js";e([{id:`docs.tech.llm.overview`,title:`LLM Integration Overview`,summary:`Export specs to LLM-friendly formats, generate implementation guides, and verify implementations.`,kind:`reference`,visibility:`public`,route:`/docs/tech/llm/overview`,tags:[`llm`,`ai`,`export`,`guide`,`verify`],body:`# LLM Integration
2
+
3
+ ContractSpec provides first-class LLM integration to bridge specifications and AI coding agents.
4
+
5
+ ## Core Features
6
+
7
+ ### 1. Multi-Format Export
8
+
9
+ Export specs to markdown in formats optimized for LLM consumption:
10
+
11
+ - **Context format**: Summary for understanding (goal, context, acceptance criteria)
12
+ - **Full format**: Complete spec with all details (I/O schemas, policy, events)
13
+ - **Prompt format**: Actionable prompt with implementation instructions
14
+
15
+ ### 2. Implementation Guidance
16
+
17
+ Generate agent-specific implementation plans:
18
+
19
+ - **Claude Code**: Extended thinking mode with structured prompts
20
+ - **Cursor CLI**: Background/composer mode with .mdc rules generation
21
+ - **Generic MCP**: Standard format for any MCP-compatible agent
22
+
23
+ ### 3. Tiered Verification
24
+
25
+ Verify implementations against specs:
26
+
27
+ - **Tier 1 (Structure)**: Types, exports, imports validation
28
+ - **Tier 2 (Behavior)**: Scenario coverage, error handling, events
29
+ - **Tier 3 (AI Review)**: Semantic compliance analysis via LLM
30
+
31
+ ## Access Points
32
+
33
+ | Surface | Commands/Tools |
34
+ |---------|---------------|
35
+ | CLI | \`contractspec llm export\`, \`guide\`, \`verify\`, \`copy\` |
36
+ | MCP | \`llm.export\`, \`llm.guide\`, \`llm.verify\` tools |
37
+ | VSCode | Export to LLM, Generate Guide, Verify, Copy commands |
38
+
39
+ ## Quick Start
40
+
41
+ ### CLI Usage
42
+
43
+ \`\`\`bash
44
+ # Export spec as markdown
45
+ contractspec llm export path/to/my.spec.ts --format full
46
+
47
+ # Generate implementation guide
48
+ contractspec llm guide path/to/my.spec.ts --agent claude-code
49
+
50
+ # Verify implementation
51
+ contractspec llm verify path/to/my.spec.ts path/to/impl.ts --tier 2
52
+
53
+ # Copy spec to clipboard
54
+ contractspec llm copy path/to/my.spec.ts --format context
55
+ \`\`\`
56
+
57
+ ### MCP Usage
58
+
59
+ \`\`\`
60
+ # Export spec
61
+ llm.export { specPath: "path/to/my.spec.ts", format: "full" }
62
+
63
+ # Generate guide
64
+ llm.guide { specPath: "path/to/my.spec.ts", agent: "cursor-cli" }
65
+
66
+ # Verify implementation
67
+ llm.verify { specPath: "path/to/my.spec.ts", implementationPath: "path/to/impl.ts", tier: "2" }
68
+ \`\`\`
69
+
70
+ ### Programmatic Usage
71
+
72
+ \`\`\`typescript
73
+ import { specToFullMarkdown, specToAgentPrompt } from '@lssm/lib.contracts/llm';
74
+ import { createAgentGuideService, createVerifyService } from '@lssm/bundle.contractspec-workspace';
75
+
76
+ // Export
77
+ const markdown = specToFullMarkdown(mySpec);
78
+
79
+ // Generate guide
80
+ const guideService = createAgentGuideService({ defaultAgent: 'claude-code' });
81
+ const guide = guideService.generateGuide(mySpec);
82
+
83
+ // Verify
84
+ const verifyService = createVerifyService();
85
+ const result = await verifyService.verify(mySpec, implementationCode, {
86
+ tiers: ['structure', 'behavior']
87
+ });
88
+ \`\`\`
89
+ `},{id:`docs.tech.llm.export-formats`,title:`LLM Export Formats`,summary:`Detailed explanation of the three export formats for LLM consumption.`,kind:`reference`,visibility:`public`,route:`/docs/tech/llm/export-formats`,tags:[`llm`,`export`,`markdown`],body:`# LLM Export Formats
90
+
91
+ ContractSpec provides three export formats optimized for different LLM use cases.
92
+
93
+ ## Context Format
94
+
95
+ Best for: Understanding what a spec does, providing background to LLMs.
96
+
97
+ Includes:
98
+ - Spec name, version, type
99
+ - Goal and context
100
+ - Description
101
+ - Acceptance scenarios
102
+
103
+ Example:
104
+
105
+ \`\`\`markdown
106
+ # users.createUser (v1)
107
+
108
+ > Create a new user account with email verification.
109
+
110
+ **Type:** command | **Stability:** stable
111
+
112
+ ## Goal
113
+ Create a new user in the system and trigger email verification.
114
+
115
+ ## Context
116
+ Part of the user onboarding flow. Called after signup form submission.
117
+
118
+ ## Acceptance Criteria
119
+ ### Happy path
120
+ **Given:** Valid email and password
121
+ **When:** User submits registration
122
+ **Then:** Account is created, verification email is sent
123
+ \`\`\`
124
+
125
+ ## Full Format
126
+
127
+ Best for: Complete documentation, implementation reference.
128
+
129
+ Includes everything:
130
+ - All metadata
131
+ - JSON schemas for I/O
132
+ - Error definitions
133
+ - Policy (auth, rate limits, PII)
134
+ - Events emitted
135
+ - Examples
136
+ - Transport configuration
137
+
138
+ ## Prompt Format
139
+
140
+ Best for: Feeding directly to coding agents.
141
+
142
+ Includes:
143
+ - Task header with clear instructions
144
+ - Full spec context
145
+ - Implementation requirements
146
+ - Task-specific guidance (implement/test/refactor/review)
147
+ - Expected output format
148
+
149
+ The prompt format adapts based on task type:
150
+ - **implement**: Full implementation with tests
151
+ - **test**: Test generation for existing code
152
+ - **refactor**: Refactoring while maintaining behavior
153
+ - **review**: Code review against spec
154
+ `},{id:`docs.tech.llm.agent-adapters`,title:`Agent Adapters`,summary:`Adapters for different AI coding agents (Claude, Cursor, MCP).`,kind:`reference`,visibility:`public`,route:`/docs/tech/llm/agent-adapters`,tags:[`llm`,`agents`,`claude`,`cursor`,`mcp`],body:`# Agent Adapters
155
+
156
+ ContractSpec provides specialized adapters for different AI coding agents.
157
+
158
+ ## Claude Code Adapter
159
+
160
+ Optimized for Anthropic Claude's extended thinking and code generation.
161
+
162
+ Features:
163
+ - Structured markdown with clear sections
164
+ - Checklists for steps and verification
165
+ - Icons for file operations (📝 create, ✏️ modify)
166
+ - System prompt for ContractSpec context
167
+
168
+ Usage:
169
+ \`\`\`typescript
170
+ const guideService = createAgentGuideService({ defaultAgent: 'claude-code' });
171
+ const result = guideService.generateGuide(spec, { agent: 'claude-code' });
172
+ // result.prompt.systemPrompt - Claude system context
173
+ // result.prompt.taskPrompt - Task-specific instructions
174
+ \`\`\`
175
+
176
+ ## Cursor CLI Adapter
177
+
178
+ Optimized for Cursor's background/composer mode.
179
+
180
+ Features:
181
+ - Compact format for context efficiency
182
+ - .mdc cursor rules generation
183
+ - Integration with Cursor's file system
184
+ - Concise step lists
185
+
186
+ Generate Cursor Rules:
187
+ \`\`\`typescript
188
+ const cursorRules = guideService.generateAgentConfig(spec, 'cursor-cli');
189
+ // Save to .cursor/rules/my-spec.mdc
190
+ \`\`\`
191
+
192
+ ## Generic MCP Adapter
193
+
194
+ Works with any MCP-compatible agent (Cline, Aider, etc.).
195
+
196
+ Features:
197
+ - Standard markdown format
198
+ - Table-based metadata
199
+ - JSON resource format support
200
+ - Prompt message format
201
+
202
+ The generic adapter is the default and works across all agents.
203
+
204
+ ## Choosing an Adapter
205
+
206
+ | Agent | Best For | Key Features |
207
+ |-------|----------|--------------|
208
+ | Claude Code | Complex implementations | Extended thinking, detailed steps |
209
+ | Cursor CLI | IDE-integrated work | Cursor rules, compact format |
210
+ | Generic MCP | Any MCP agent | Universal compatibility |
211
+ `},{id:`docs.tech.llm.verification`,title:`Implementation Verification`,summary:`Tiered verification of implementations against specifications.`,kind:`reference`,visibility:`public`,route:`/docs/tech/llm/verification`,tags:[`llm`,`verify`,`validation`,`testing`],body:`# Implementation Verification
212
+
213
+ ContractSpec provides tiered verification to check if implementations comply with specs.
214
+
215
+ ## Verification Tiers
216
+
217
+ ### Tier 1: Structure (Fast)
218
+
219
+ Checks TypeScript structure against spec requirements:
220
+
221
+ | Check | What it validates |
222
+ |-------|------------------|
223
+ | Handler export | Function is properly exported |
224
+ | Contracts import | Imports from @lssm/lib.contracts |
225
+ | Schema import | Imports from @lssm/lib.schema |
226
+ | No \`any\` type | TypeScript strict compliance |
227
+ | Error handling | Error codes are referenced |
228
+ | Event emission | Event patterns exist |
229
+ | Input validation | Validation patterns used |
230
+ | Async patterns | Async/await for commands |
231
+
232
+ ### Tier 2: Behavior (Comprehensive)
233
+
234
+ Checks implementation coverage of spec behaviors:
235
+
236
+ | Check | What it validates |
237
+ |-------|------------------|
238
+ | Scenario coverage | Acceptance scenarios implemented |
239
+ | Example coverage | Example I/O values referenced |
240
+ | Error cases | All error conditions handled |
241
+ | Event conditions | Events emitted correctly |
242
+ | Idempotency | Idempotent patterns (if required) |
243
+
244
+ ### Tier 3: AI Review (Deep)
245
+
246
+ Uses LLM for semantic analysis:
247
+
248
+ - Does the implementation fulfill the spec's intent?
249
+ - Are edge cases properly handled?
250
+ - Is the code quality acceptable?
251
+ - Are there any subtle violations?
252
+
253
+ Requires AI API key configuration.
254
+
255
+ ## Running Verification
256
+
257
+ \`\`\`typescript
258
+ const verifyService = createVerifyService({
259
+ aiApiKey: process.env.ANTHROPIC_API_KEY, // Optional, for Tier 3
260
+ aiProvider: 'anthropic',
261
+ });
262
+
263
+ const result = await verifyService.verify(spec, implementationCode, {
264
+ tiers: ['structure', 'behavior'],
265
+ failFast: false,
266
+ includeSuggestions: true,
267
+ });
268
+
269
+ console.log(result.passed); // true/false
270
+ console.log(result.score); // 0-100
271
+ console.log(result.summary); // Human-readable summary
272
+ \`\`\`
273
+
274
+ ## Verification Report
275
+
276
+ The report includes:
277
+
278
+ - **passed**: Overall compliance
279
+ - **score**: 0-100 score
280
+ - **issues**: Array of problems found
281
+ - **suggestions**: Recommended fixes
282
+ - **coverage**: Metrics on scenario/error/field coverage
283
+
284
+ Each issue has:
285
+ - **severity**: error, warning, or info
286
+ - **category**: type, export, import, scenario, error_handling, semantic
287
+ - **message**: Description of the issue
288
+ - **suggestion**: How to fix it
289
+ `}]);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lssm/example.learning-journey-registry",
3
- "version": "0.0.0-canary-20251216035145",
3
+ "version": "0.0.0-canary-20251216062412",
4
4
  "description": "Registry that aggregates learning journey example tracks.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -12,6 +12,7 @@
12
12
  "./docs": "./src/docs/index.ts",
13
13
  "./docs/learning-journey-registry.docblock": "./src/docs/learning-journey-registry.docblock.ts",
14
14
  "./example": "./src/example.ts",
15
+ "./learning-journey-registry.feature": "./src/learning-journey-registry.feature.ts",
15
16
  "./presentations": "./src/presentations/index.ts",
16
17
  "./progress-store": "./src/progress-store.ts",
17
18
  "./tracks": "./src/tracks.ts",
@@ -63,6 +64,7 @@
63
64
  "./docs": "./dist/docs/index.js",
64
65
  "./docs/learning-journey-registry.docblock": "./dist/docs/learning-journey-registry.docblock.js",
65
66
  "./example": "./dist/example.js",
67
+ "./learning-journey-registry.feature": "./dist/learning-journey-registry.feature.js",
66
68
  "./presentations": "./dist/presentations/index.js",
67
69
  "./progress-store": "./dist/progress-store.js",
68
70
  "./tracks": "./dist/tracks.js",
package/src/index.ts CHANGED
@@ -3,5 +3,6 @@ import './docs';
3
3
  export * from './tracks';
4
4
  export * from './api';
5
5
  export * from './presentations';
6
+ export * from './learning-journey-registry.feature';
6
7
  export * from './ui';
7
8
  export { default as example } from './example';
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Learning Journey Registry Feature Module Specification
3
+ *
4
+ * Defines the feature module for the learning journey registry.
5
+ */
6
+ import type { FeatureModuleSpec } from '@lssm/lib.contracts';
7
+
8
+ /**
9
+ * Learning Journey Registry feature module that bundles
10
+ * the shared presentations for learning journey tracks.
11
+ */
12
+ export const LearningJourneyRegistryFeature: FeatureModuleSpec = {
13
+ meta: {
14
+ key: 'learning-journey-registry',
15
+ title: 'Learning Journey Registry',
16
+ description:
17
+ 'Shared registry and presentations for learning journey tracks',
18
+ domain: 'learning-journey',
19
+ owners: ['@learning-team'],
20
+ tags: ['learning', 'journey', 'onboarding', 'registry'],
21
+ stability: 'experimental',
22
+ },
23
+
24
+ // No operations in the registry - it's presentation-only
25
+ operations: [],
26
+
27
+ // Events emitted by this feature
28
+ events: [],
29
+
30
+ // Presentations associated with this feature
31
+ presentations: [
32
+ { name: 'learning.journey.track_list', version: 1 },
33
+ { name: 'learning.journey.track_detail', version: 1 },
34
+ { name: 'learning.journey.progress_widget', version: 1 },
35
+ ],
36
+
37
+ // No op to presentation links for registry
38
+ opToPresentation: [],
39
+
40
+ // Target requirements for multi-surface rendering
41
+ presentationsTargets: [
42
+ {
43
+ name: 'learning.journey.track_list',
44
+ version: 1,
45
+ targets: ['react', 'markdown'],
46
+ },
47
+ {
48
+ name: 'learning.journey.track_detail',
49
+ version: 1,
50
+ targets: ['react', 'markdown', 'application/json'],
51
+ },
52
+ {
53
+ name: 'learning.journey.progress_widget',
54
+ version: 1,
55
+ targets: ['react'],
56
+ },
57
+ ],
58
+
59
+ // Capability requirements
60
+ capabilities: {
61
+ requires: [{ key: 'identity', version: 1 }],
62
+ },
63
+ };