@qlm/learnlog-mcp 0.0.0-stage → 0.2.0

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.
Files changed (74) hide show
  1. package/CHANGELOG.md +44 -0
  2. package/LICENSE +201 -0
  3. package/NOTICE +43 -0
  4. package/README.md +121 -2
  5. package/data/SOURCE_CORRECTION.md +9 -0
  6. package/data/THIRD_PARTY_DATA.md +148 -0
  7. package/data/examples/chain-tpc-clinical-v2-tampered.json +97 -0
  8. package/data/examples/chain-tpc-clinical-v2.json +95 -0
  9. package/data/examples/evidence-record-clean.json +173 -0
  10. package/data/examples/evidence-record-tampered.json +173 -0
  11. package/data/labpath-worlds.json +107 -0
  12. package/data/preprint/README.md +10 -0
  13. package/data/preprint/assistments_episodes.json +37 -0
  14. package/data/preprint/cross_source_episodes.json +63 -0
  15. package/data/provenance/oatutor.json +84 -0
  16. package/data/provenance/source-audit.json +69 -0
  17. package/data/provenance/tutormoments.json +91 -0
  18. package/data/samples/explicit-assistance-SYNTHETIC.jsonl +5 -0
  19. package/data/samples/oatutor-real-participants.csv +13 -0
  20. package/data/samples/sandpiper-SYNTHETIC.csv +9 -0
  21. package/data/samples/tutormoments-real-transcripts.jsonl +2 -0
  22. package/dist/bin.js +6 -0
  23. package/dist/episodes.js +488 -0
  24. package/dist/files.js +39 -0
  25. package/dist/package.js +14 -0
  26. package/dist/py.js +419 -0
  27. package/dist/respond.js +47 -0
  28. package/dist/sealed.js +31 -0
  29. package/dist/server.js +115 -0
  30. package/dist/stages.js +35 -0
  31. package/dist/tools/formats.js +35 -0
  32. package/dist/tools/inventory.js +179 -0
  33. package/dist/tools/learning-graph.js +111 -0
  34. package/dist/tools/misconceptions.js +54 -0
  35. package/dist/tools/preprint.js +241 -0
  36. package/dist/tools/qlm-datasets.js +56 -0
  37. package/dist/tools/transform.js +61 -0
  38. package/dist/tools/validate.js +47 -0
  39. package/dist/tools/verify-credential.js +155 -0
  40. package/dist/tools/verify-evidence.js +51 -0
  41. package/dist/tools/worlds.js +24 -0
  42. package/dist/transformer.js +92 -0
  43. package/dist/zip.js +71 -0
  44. package/package.json +66 -4
  45. package/skills/learnlog-assistments/SKILL.md +38 -0
  46. package/skills/learnlog-export-to-action/SKILL.md +31 -0
  47. package/skills/learnlog-learning-commons/SKILL.md +33 -0
  48. package/skills/learnlog-nto-sandpiper/SKILL.md +31 -0
  49. package/vendor/PROVENANCE.json +259 -0
  50. package/vendor/qlm-measure/checks.d.ts +24 -0
  51. package/vendor/qlm-measure/checks.js +42 -0
  52. package/vendor/qlm-measure/cli.d.ts +17 -0
  53. package/vendor/qlm-measure/cli.js +461 -0
  54. package/vendor/qlm-measure/rules.d.ts +10 -0
  55. package/vendor/qlm-measure/rules.js +46 -0
  56. package/vendor/qlm-measure/schemes/index.d.ts +133 -0
  57. package/vendor/qlm-measure/schemes/index.js +339 -0
  58. package/vendor/qlm-measure/schemes/node.d.ts +8 -0
  59. package/vendor/qlm-measure/schemes/node.js +15 -0
  60. package/vendor/qlm-measure/schemes/products.d.ts +38 -0
  61. package/vendor/qlm-measure/schemes/products.js +725 -0
  62. package/vendor/qlm-measure/verifier/hash.d.ts +27 -0
  63. package/vendor/qlm-measure/verifier/hash.js +163 -0
  64. package/vendor/qlm-measure/verifier/verify-record.d.ts +22 -0
  65. package/vendor/qlm-measure/verifier/verify-record.js +123 -0
  66. package/vendor/qlm-measure/verifier-v03.d.ts +24 -0
  67. package/vendor/qlm-measure/verifier-v03.js +205 -0
  68. package/vendor/transformer/LICENSE.txt +29 -0
  69. package/vendor/transformer/cross-source-analysis-data.d.mts +3 -0
  70. package/vendor/transformer/cross-source-analysis-data.mjs +238 -0
  71. package/vendor/transformer/engine.d.mts +61 -0
  72. package/vendor/transformer/engine.mjs +445 -0
  73. package/vendor/transformer/profiles.mjs +309 -0
  74. package/vendor/transformer/research-semantics.mjs +1453 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,44 @@
1
+ # Changelog
2
+
3
+ ## 0.2.0 (not yet published)
4
+
5
+ Misconceptions and LabPath worlds by default:
6
+
7
+ - `qlm_misconceptions` gives each misconception's LabPath worlds with their names and public pages. `qlm_learning_graph` names every world in its answer the same way. A world gets a link only if it is in `data/labpath-worlds.json`, which `scripts/refresh-worlds.mjs` builds from the live world pages (100 of 100 checked on Oct 24, 2026).
8
+ - `assistance_inventory` on an ASSISTments file adds `assistments_requests_by_skill`: help requests on main problems, by the file's own skill labels (counts only, 15 most requested).
9
+ - An answer about some of the preprint's files lists only the cautions that apply to them.
10
+ - Four Claude skills ship in `skills/`, each ending on misconceptions and LabPath worlds.
11
+
12
+ Published as `@qlm/learnlog-mcp`, under QLM's npm account (it was `@quantumkumar/learnlog-mcp` before release).
13
+
14
+ A fourth format, `sandpiper`: the utterances CSV that Sandpiper, the National Tutoring Observatory's open-source annotation app, exports for a per-utterance run. `learnlog_formats` lists it stage by stage, and `learnlog_transform` and `assistance_inventory` accept it.
15
+
16
+ - One record per session, entries in `sequence_id` order. Each utterance is a dialogue turn; role and text are kept as the export has them, and start/end times stay unparsed strings.
17
+ - Annotation codes are kept as an annotator's inferred assertions. The inventory reports turns by role and counts codes by annotator and field, never as help. Every stage is not recorded.
18
+ - The bundled sample is SYNTHETIC, built from Sandpiper's documented example rows (MIT). There is no public NTO dataset in this package.
19
+ - Re-vendored the transformer from qlm-measure commit 68404b53d0584c9817346b83ee499a38b692adcd. Documents made by the previous engine still validate (tested with saved outputs), because existing formats keep their profile version, `qlm:assistance-context:0.1.0`; Sandpiper records bind `0.2.0`.
20
+ - Answers keep a member named `__proto__` as data instead of dropping it, since exported role and annotator names can be any text.
21
+
22
+ Two new read-only tools, which read QLM's public LabPath datasets (CC BY 4.0) from `https://play.quantumlearningmachines.com/api/labpath/dataset-export` with GET only, a timeout, no redirects and one request per dataset per session:
23
+
24
+ - `qlm_misconceptions`: searches the misconception dataset by words, domain, grade band or id. Evaluation-tier trigger patterns and diagnostic questions are never returned.
25
+ - `qlm_learning_graph`: what comes before or after a LabPath activity, from a mode id or a standard code, with teacher-facing reasons, linked misconception ids and aligned standards.
26
+
27
+ Every answer now fits what an assistant can take in at once (30,000 characters of JSON, under Claude Code's 10,000-token warning). Before this, two answers were far too large and Claude Code rejected them:
28
+
29
+ - `learnlog_transform` with `include_document` returns the whole document only when the answer fits. Otherwise it reports the document's size in `document_omitted`. A 91 KB tutoring export made a 1 MB document.
30
+ - `qlm_learning_graph` shows 10 links per direction by default (was 25), each edge's first 8 concepts (with `concepts_total`), full standards only for the asked-about activity and standard codes for linked ones (`linked_mode_standards`). If a limit still wouldn't fit, it is lowered and `limit_lowered` says so. The most it accepts is 50 (was 200).
31
+ - Any answer that still wouldn't fit is refused with its size and what to ask for instead.
32
+
33
+ ## 0.1.0 (not yet published)
34
+
35
+ First release. Six read-only tools over stdio:
36
+
37
+ - `learnlog_formats`: the transformer's source formats and what each records at each of the six assistance stages.
38
+ - `learnlog_transform`: a local export, or a bundled public sample, into Learnlog records.
39
+ - `learnlog_validate`: replays a Learnlog file's hash chains and lists the unknowns each record keeps.
40
+ - `assistance_inventory`: what a dataset records about help, stage by stage, with counts and limits. Recomputes the Learnlog preprint's inventory and episode counts from your own copies of its three released datasets.
41
+ - `verify_evidence`: qlm-measure's verifier on a local evidence record or product hash chain.
42
+ - `verify_credential`: one request to app.qlmdev.com to verify a QLM credential.
43
+
44
+ Wraps, unchanged, the QLM transformer engine and the qlm-measure 0.9.0 verifier from qlm-measure commit 24419687cddf238030a918834fbb9ef079f2fc57. The preprint's counting rules are ported from its Python scripts and tested against them on the same files.
package/LICENSE ADDED
@@ -0,0 +1,201 @@
1
+
2
+ Apache License
3
+ Version 2.0, January 2004
4
+ http://www.apache.org/licenses/
5
+
6
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
7
+
8
+ 1. Definitions.
9
+
10
+ "License" shall mean the terms and conditions for use, reproduction,
11
+ and distribution as defined by Sections 1 through 9 of this document.
12
+
13
+ "Licensor" shall mean the copyright owner or entity authorized by
14
+ the copyright owner that is granting the License.
15
+
16
+ "Legal Entity" shall mean the union of the acting entity and all
17
+ other entities that control, are controlled by, or are under common
18
+ control with that entity. For the purposes of this definition,
19
+ "control" means (i) the power, direct or indirect, to cause the
20
+ direction or management of such entity, whether by contract or
21
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
22
+ outstanding shares, or (iii) beneficial ownership of such entity.
23
+
24
+ "You" (or "Your") shall mean an individual or Legal Entity
25
+ exercising permissions granted by this License.
26
+
27
+ "Source" form shall mean the preferred form for making modifications,
28
+ including but not limited to software source code, documentation
29
+ source, and configuration files.
30
+
31
+ "Object" form shall mean any form resulting from mechanical
32
+ transformation or translation of a Source form, including but
33
+ not limited to compiled object code, generated documentation,
34
+ and conversions to other media types.
35
+
36
+ "Work" shall mean the work of authorship, whether in Source or
37
+ Object form, made available under the License, as indicated by a
38
+ copyright notice that is included in or attached to the work
39
+ (an example is provided in the Appendix below).
40
+
41
+ "Derivative Works" shall mean any work, whether in Source or Object
42
+ form, that is based on (or derived from) the Work and for which the
43
+ editorial revisions, annotations, elaborations, or other modifications
44
+ represent, as a whole, an original work of authorship. For the purposes
45
+ of this License, Derivative Works shall not include works that remain
46
+ separable from, or merely link (or bind by name) to the interfaces of,
47
+ the Work and Derivative Works thereof.
48
+
49
+ "Contribution" shall mean any work of authorship, including
50
+ the original version of the Work and any modifications or additions
51
+ to that Work or Derivative Works thereof, that is intentionally
52
+ submitted to the Licensor for inclusion in the Work by the copyright owner
53
+ or by an individual or Legal Entity authorized to submit on behalf of
54
+ the copyright owner. For the purposes of this definition, "submitted"
55
+ means any form of electronic, verbal, or written communication sent
56
+ to the Licensor or its representatives, including but not limited to
57
+ communication on electronic mailing lists, source code control systems,
58
+ and issue tracking systems that are managed by, or on behalf of, the
59
+ Licensor for the purpose of discussing and improving the Work, but
60
+ excluding communication that is conspicuously marked or otherwise
61
+ designated in writing by the copyright owner as "Not a Contribution."
62
+
63
+ "Contributor" shall mean Licensor and any individual or Legal Entity
64
+ on behalf of whom a Contribution has been received by the Licensor and
65
+ subsequently incorporated within the Work.
66
+
67
+ 2. Grant of Copyright License. Subject to the terms and conditions of
68
+ this License, each Contributor hereby grants to You a perpetual,
69
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
70
+ copyright license to reproduce, prepare Derivative Works of,
71
+ publicly display, publicly perform, sublicense, and distribute the
72
+ Work and such Derivative Works in Source or Object form.
73
+
74
+ 3. Grant of Patent License. Subject to the terms and conditions of
75
+ this License, each Contributor hereby grants to You a perpetual,
76
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
77
+ (except as stated in this section) patent license to make, have made,
78
+ use, offer to sell, sell, import, and otherwise transfer the Work,
79
+ where such license applies only to those patent claims licensable
80
+ by such Contributor that are necessarily infringed by their
81
+ Contribution(s) alone or by combination of their Contribution(s)
82
+ with the Work to which such Contribution(s) was submitted. If You
83
+ institute patent litigation against any entity (including a
84
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
85
+ or a Contribution incorporated within the Work constitutes direct
86
+ or contributory patent infringement, then any patent licenses
87
+ granted to You under this License for that Work shall terminate
88
+ as of the date such litigation is filed.
89
+
90
+ 4. Redistribution. You may reproduce and distribute copies of the
91
+ Work or Derivative Works thereof in any medium, with or without
92
+ modifications, and in Source or Object form, provided that You
93
+ meet the following conditions:
94
+
95
+ (a) You must give any other recipients of the Work or
96
+ Derivative Works a copy of this License; and
97
+
98
+ (b) You must cause any modified files to carry prominent notices
99
+ stating that You changed the files; and
100
+
101
+ (c) You must retain, in the Source form of any Derivative Works
102
+ that You distribute, all copyright, patent, trademark, and
103
+ attribution notices from the Source form of the Work,
104
+ excluding those notices that do not pertain to any part of
105
+ the Derivative Works; and
106
+
107
+ (d) If the Work includes a "NOTICE" text file as part of its
108
+ distribution, then any Derivative Works that You distribute must
109
+ include a readable copy of the attribution notices contained
110
+ within such NOTICE file, excluding any notices that do not
111
+ pertain to any part of the Derivative Works, in at least one
112
+ of the following places: within a NOTICE text file distributed
113
+ as part of the Derivative Works; within the Source form or
114
+ documentation, if provided along with the Derivative Works; or,
115
+ within a display generated by the Derivative Works, if and
116
+ wherever such third-party notices normally appear. The contents
117
+ of the NOTICE file are for informational purposes only and
118
+ do not modify the License. You may add Your own attribution
119
+ notices within Derivative Works that You distribute, alongside
120
+ or as an addendum to the NOTICE text from the Work, provided
121
+ that such additional attribution notices cannot be construed
122
+ as modifying the License.
123
+
124
+ You may add Your own copyright statement to Your modifications and
125
+ may provide additional or different license terms and conditions
126
+ for use, reproduction, or distribution of Your modifications, or
127
+ for any such Derivative Works as a whole, provided Your use,
128
+ reproduction, and distribution of the Work otherwise complies with
129
+ the conditions stated in this License.
130
+
131
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
132
+ any Contribution intentionally submitted for inclusion in the Work
133
+ by You to the Licensor shall be under the terms and conditions of
134
+ this License, without any additional terms or conditions.
135
+ Notwithstanding the above, nothing herein shall supersede or modify
136
+ the terms of any separate license agreement you may have executed
137
+ with Licensor regarding such Contributions.
138
+
139
+ 6. Trademarks. This License does not grant permission to use the trade
140
+ names, trademarks, service marks, or product names of the Licensor,
141
+ except as required for reasonable and customary use in describing the
142
+ origin of the Work and reproducing the content of the NOTICE file.
143
+
144
+ 7. Disclaimer of Warranty. Unless required by applicable law or
145
+ agreed to in writing, Licensor provides the Work (and each
146
+ Contributor provides its Contributions) on an "AS IS" BASIS,
147
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
148
+ implied, including, without limitation, any warranties or conditions
149
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
150
+ PARTICULAR PURPOSE. You are solely responsible for determining the
151
+ appropriateness of using or redistributing the Work and assume any
152
+ risks associated with Your exercise of permissions under this License.
153
+
154
+ 8. Limitation of Liability. In no event and under no legal theory,
155
+ whether in tort (including negligence), contract, or otherwise,
156
+ unless required by applicable law (such as deliberate and grossly
157
+ negligent acts) or agreed to in writing, shall any Contributor be
158
+ liable to You for damages, including any direct, indirect, special,
159
+ incidental, or consequential damages of any character arising as a
160
+ result of this License or out of the use or inability to use the
161
+ Work (including but not limited to damages for loss of goodwill,
162
+ work stoppage, computer failure or malfunction, or any and all
163
+ other commercial damages or losses), even if such Contributor
164
+ has been advised of the possibility of such damages.
165
+
166
+ 9. Accepting Warranty or Additional Liability. While redistributing
167
+ the Work or Derivative Works thereof, You may choose to offer,
168
+ and charge a fee for, acceptance of support, warranty, indemnity,
169
+ or other liability obligations and/or rights consistent with this
170
+ License. However, in accepting such obligations, You may act only
171
+ on Your own behalf and on Your sole responsibility, not on behalf
172
+ of any other Contributor, and only if You agree to indemnify,
173
+ defend, and hold each Contributor harmless for any liability
174
+ incurred by, or claims asserted against, such Contributor by reason
175
+ of your accepting any such warranty or additional liability.
176
+
177
+ END OF TERMS AND CONDITIONS
178
+
179
+ APPENDIX: How to apply the Apache License to your work.
180
+
181
+ To apply the Apache License to your work, attach the following
182
+ boilerplate notice, with the fields enclosed by brackets "[]"
183
+ replaced with your own identifying information. (Don't include
184
+ the brackets!) The text should be enclosed in the appropriate
185
+ comment syntax for the file format. Please also get specific
186
+ permission from your organization's legal counsel before applying
187
+ the license to work owned by your organization.
188
+
189
+ Copyright 2026 Quantum Learning Machines
190
+
191
+ Licensed under the Apache License, Version 2.0 (the "License");
192
+ you may not use this file except in compliance with the License.
193
+ You may obtain a copy of the License at
194
+
195
+ http://www.apache.org/licenses/LICENSE-2.0
196
+
197
+ Unless required by applicable law or agreed to in writing, software
198
+ distributed under the License is distributed on an "AS IS" BASIS,
199
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200
+ See the License for the specific language governing permissions and
201
+ limitations under the License.
package/NOTICE ADDED
@@ -0,0 +1,43 @@
1
+ Learnlog MCP (@qlm/learnlog-mcp)
2
+ Copyright 2026 Quantum Learning Machines
3
+
4
+ This product includes software developed at Quantum Learning Machines
5
+ (https://quantumlearningmachines.com). It is licensed under the Apache
6
+ License, Version 2.0 (see LICENSE).
7
+
8
+ It includes, unchanged, files from the qlm-measure repository
9
+ (https://github.com/quantumlearningmachines/qlm-measure). vendor/PROVENANCE.json
10
+ names each file, its source path, the commit and its SHA-256.
11
+
12
+ - vendor/qlm-measure/: the qlm-measure 0.9.0 verifier build. Apache-2.0.
13
+ - vendor/transformer/: the QLM transformer engine. MIT; its license is in
14
+ vendor/transformer/LICENSE.txt and is kept with those files.
15
+ - data/samples/tutormoments-real-transcripts.jsonl and the TutorMoments
16
+ sample embedded in vendor/transformer/profiles.mjs: excerpts of
17
+ TutorMoments-Preview, Albert Zhang and colleagues, Ai2 and collaborators
18
+ (2026), https://huggingface.co/datasets/allenai/tutormoments-preview,
19
+ revision 3bb0c104d65e29facffca7ba864ef10fa22d0e78. CC BY 4.0.
20
+ - data/samples/oatutor-real-participants.csv and the OATutor sample embedded
21
+ in vendor/transformer/profiles.mjs: an excerpt of Pardos and Bhandari
22
+ (2023), https://doi.org/10.6084/m9.figshare.23935269.v1. CC BY 4.0.
23
+ - data/samples/explicit-assistance-SYNTHETIC.jsonl and data/examples/: QLM's
24
+ synthetic fixtures and test vectors. No learner data.
25
+ - data/samples/sandpiper-SYNTHETIC.csv and the Sandpiper sample embedded in
26
+ vendor/transformer/profiles.mjs: a SYNTHETIC fixture arranging example rows
27
+ from the documentation of Sandpiper,
28
+ https://github.com/National-Tutoring-Observatory/sandpiper, commit
29
+ 28e0d25c069ce07c759d802184d4ab914e9cfe8b. MIT, Copyright (c) 2025 National
30
+ Tutoring Observatory; the license text is in data/THIRD_PARTY_DATA.md. No
31
+ NTO data and no learner data.
32
+ - data/preprint/ and vendor/transformer/cross-source-analysis-data.mjs:
33
+ aggregate counts published with the Learnlog preprint. No learner rows.
34
+
35
+ qlm_misconceptions and qlm_learning_graph read, at run time and without
36
+ bundling them, the LabPath misconception, learning-graph and standards
37
+ datasets: QLM LabPath Dataset v1.0, Quantum Learning Machines, 2026, CC BY 4.0,
38
+ https://play.quantumlearningmachines.com/api/labpath/dataset-export, archived
39
+ as https://doi.org/10.5281/zenodo.21800324.
40
+
41
+ The selection, attribution and limits of each excerpt are in
42
+ data/THIRD_PARTY_DATA.md and data/provenance/. No source author endorses this
43
+ software.
package/README.md CHANGED
@@ -1,3 +1,122 @@
1
- # Temporary Holding Version
1
+ # Learnlog MCP
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ Ask your AI assistant what learning records actually show about help, and get an answer you can check.
4
+
5
+ Learnlog MCP is a server for the Model Context Protocol (MCP), the standard way assistants like Claude call outside tools. It reads learning records in [Learnlog](https://datatracker.ietf.org/doc/draft-srivastava-learnlog/), a draft format for recording assistance, and answers questions about them. It also searches QLM's public misconception dataset and LabPath's learning graph. Every answer says what it can't show.
6
+
7
+ Learnlog keeps six kinds of help apart, from the Internet-Draft draft-srivastava-learnlog-03, Section 2.2:
8
+
9
+ | Stage | What it records |
10
+ | --- | --- |
11
+ | requested | someone asked for help |
12
+ | offered | a system or person started help on its own, like steps after a wrong answer |
13
+ | generated | a system produced help content |
14
+ | transmitted | help was sent somewhere |
15
+ | displayed | help was shown on a screen |
16
+ | accepted | the learner took the action the product calls accepting help |
17
+
18
+ Each stage is its own observation. A request doesn't mean help was shown, and a display doesn't mean it was read. A stage that wasn't captured is "not recorded", never "none".
19
+
20
+ ## Install
21
+
22
+ You need Node.js 22.12 or later.
23
+
24
+ ```
25
+ npx -y @qlm/learnlog-mcp
26
+ ```
27
+
28
+ ### Claude Desktop
29
+
30
+ Add this to `claude_desktop_config.json` (Settings, Developer, Edit Config), then restart Claude Desktop:
31
+
32
+ ```json
33
+ {
34
+ "mcpServers": {
35
+ "learnlog": {
36
+ "command": "npx",
37
+ "args": ["-y", "@qlm/learnlog-mcp"]
38
+ }
39
+ }
40
+ }
41
+ ```
42
+
43
+ Any MCP client that can start a command over stdio works the same way.
44
+
45
+ ## Tools
46
+
47
+ All eight are read-only. Paths are full paths on your computer (or start with `~/`).
48
+
49
+ **`learnlog_formats`** lists the exports the transformer converts and what each one records at each stage.
50
+ > "Which exports can Learnlog MCP convert, and what does each one record about help?"
51
+
52
+ There are four formats: `tutormoments` (TutorMoments transcripts), `oatutor` (OATutor participant summaries), `explicit-assistance-events` (an explicit help-lifecycle contract) and `sandpiper` (the utterances CSV that Sandpiper, the National Tutoring Observatory's annotation app, exports for a per-utterance run). For Sandpiper, each utterance is a dialogue turn, and each annotation code is kept as an annotator's inferred assertion. No code counts as help, so every stage is not recorded. The lifecycle and Sandpiper samples are SYNTHETIC; the Sandpiper one is built from Sandpiper's documented examples, not NTO data.
53
+
54
+ **`learnlog_transform`** turns an export into Learnlog records, keeping source and capture details. Use your own file, or `use_sample: true` for a bundled public sample.
55
+ > "Turn the TutorMoments sample into Learnlog and tell me what it keeps and what it leaves unknown."
56
+
57
+ **`learnlog_validate`** replays a Learnlog file's hash chains, checks its profile bindings, and lists the unknowns each record keeps.
58
+ > "Is ~/exports/session.learnlog.json a valid Learnlog file? What doesn't it record?"
59
+
60
+ **`assistance_inventory`** says which stages a dataset records, with counts by source and what can't be concluded.
61
+ > "What does this tutoring dataset actually record about help?"
62
+
63
+ It can also recompute the inventory and episode counts in the Learnlog preprint, *Preserving assistance meaning in cross-source learning analytics*, from your own copies of its three released datasets. When your files are the exact releases the preprint used, it checks every number against the published ones. With no input, it returns the published figures and says they weren't recomputed.
64
+
65
+ | Argument | Dataset | Where to get it |
66
+ | --- | --- | --- |
67
+ | `zenodo_zip` | JetBrains Academy next-step hint study, Zenodo 17551130 v1 | [zenodo.org/records/17551130](https://zenodo.org/records/17551130) |
68
+ | `idetrace_json` | TutorTrace / IDETrace deployment 8 (needs `allow_idetrace_research: true`) | [the pinned repository commit](https://github.com/divadbaroon/TutorTrace_dataset_and_benchmark/tree/bc7990370da18a611a122255ebc3e475bd8a3fc6) |
69
+ | `assistments_csv` | ASSISTments 2012-13 School Data with Affect | [ASSISTments datasets](https://sites.google.com/site/assistmentsdata/datasets/2012-13-school-data-with-affect) |
70
+
71
+ These datasets aren't bundled. Their learner records stay with their owners, and only counts come back. The ASSISTments file is about 3 GB. Reading it took about 70 seconds in testing, so a client with a short tool timeout may give up first.
72
+
73
+ **`verify_evidence`** replays a local evidence record or product hash chain with qlm-measure's own verifier and returns pass, or each named check that failed.
74
+ > "Can I trust this evidence record? ~/Downloads/record.json"
75
+
76
+ **`verify_credential`** checks a QLM credential with QLM's verify service. Give its ID (`urn:uuid:...`) or a link that contains one.
77
+ > "Is this credential real and current? urn:uuid:<the ID on the badge>"
78
+
79
+ It returns whether the credential verified, each check with its result, the issuer, the achievement, the date and the AI-help summary by stage. The service's report has no personal data, and the tool shows only the fields it knows.
80
+
81
+ **`qlm_misconceptions`** searches QLM's public misconception dataset by words, domain, grade band or id. Each result gives the student's belief, the scientific reality, a counterexample, a teacher intervention, the research source, severity, grade bands and the LabPath worlds that work on it, each with its name and public page.
82
+ > "Which misconception might explain students passing force problems only with hints, and what should the teacher try?"
83
+
84
+ Evaluation-tier records never include their trigger patterns or diagnostic question; they're kept back for benchmark integrity. Held-out records aren't in the dataset at all.
85
+
86
+ **`qlm_learning_graph`** says what comes before or after a LabPath activity, from a mode id or a standard code. It returns each link's kind (prerequisite, labpath-sequence, reinforcement, transfer, extension), the teacher-facing reason, its first 8 concepts, the misconception ids it carries, the full standards for the activity you asked about, and the standard codes of each linked activity. It shows 10 links per direction unless you ask for more, and names every world in the answer with its public page.
87
+ > "What should students do before the forces activity, and which standards does it cover?"
88
+
89
+ The graph is LabPath's designed sequence, not evidence that a student needs a step. The standards are LabPath's own mapping to NGSS-style codes.
90
+
91
+ Both read [QLM's LabPath dataset export](https://play.quantumlearningmachines.com/api/labpath/dataset-export?dataset=misconceptions), CC BY 4.0, once per session. The archived v1.0 is [QLM LabPath Dataset v1.0 on Zenodo](https://doi.org/10.5281/zenodo.21800324).
92
+
93
+ ## Skills
94
+
95
+ The package ships four Claude skills in `skills/`. Each walks an assistant through one workflow and ends the same way: the likely QLM misconceptions, one way to check for each, its teacher move, and the LabPath worlds that work on it, with their links.
96
+
97
+ - **`learnlog-export-to-action`**: any supported export to Learnlog, what it records about help stage by stage, and what it can't show.
98
+ - **`learnlog-assistments`**: your own copy of ASSISTments 2012-13 School Data with Affect, counted stage by stage and by the file's skill labels. Counts only.
99
+ - **`learnlog-nto-sandpiper`**: a National Tutoring Observatory Sandpiper run export. Turns stay observed; every code stays inferred, with who coded it.
100
+ - **`learnlog-learning-commons`**: with the Learning Commons Knowledge Graph MCP beside this one, a standard's official statement, learning components and earlier standards.
101
+
102
+ In Claude Code, copy a skill's folder into `.claude/skills/`.
103
+
104
+ ## What it never does
105
+
106
+ - It never writes, changes or uploads anything. It doesn't change records, scores or credentials.
107
+ - Five tools read local files only and make no network calls.
108
+ - `verify_credential` makes one request, to `https://app.qlmdev.com/v1/verify`, sending only the credential ID. It follows no redirects.
109
+ - `qlm_misconceptions` and `qlm_learning_graph` make GET requests to `https://play.quantumlearningmachines.com/api/labpath/dataset-export` only, one per dataset per session, and send nothing about you or your files. They follow no redirects.
110
+ - It never shows sealed content, such as answer keys or sealed case variants.
111
+ - It never turns "not recorded" into "none" or zero.
112
+ - It doesn't estimate learning or say whether help worked.
113
+
114
+ ## Where the code comes from
115
+
116
+ The transformer engine and the qlm-measure 0.9.0 verifier are copied unchanged from [qlm-measure](https://github.com/quantumlearningmachines/qlm-measure). `vendor/PROVENANCE.json` lists every copied file with its source path, commit and SHA-256. The preprint's counting rules are ported from its published Python scripts, and the tests run both on the same files and require identical output.
117
+
118
+ ## License
119
+
120
+ Apache-2.0. See `LICENSE` and `NOTICE`. The vendored transformer files keep their MIT license (`vendor/transformer/LICENSE.txt`). The TutorMoments and OATutor sample excerpts are CC BY 4.0; their attribution and limits are in `data/THIRD_PARTY_DATA.md`. The SYNTHETIC Sandpiper sample uses Sandpiper's documentation examples, MIT, Copyright (c) 2025 National Tutoring Observatory; the notice is in `data/THIRD_PARTY_DATA.md`. The LabPath misconception, learning-graph and standards data are CC BY 4.0 from Quantum Learning Machines; they're read from QLM's service, not bundled. Cite them as: QLM LabPath Dataset v1.0, Quantum Learning Machines, 2026, https://doi.org/10.5281/zenodo.21800324.
121
+
122
+ Made by Kumar Srivastava at [Quantum Learning Machines](https://quantumlearningmachines.com).
@@ -0,0 +1,9 @@
1
+ # Sample authenticity correction — 17 October 2026
2
+
3
+ The first public demo used six authored synthetic rows with generic headers under Khan Academy, IXL, DreamBox Math and ALEKS. Its MATHia example used documented Progress Report headers with invented values. These fixtures did not establish vendor export compatibility. Internal transformation tests did not validate vendor authenticity.
4
+
5
+ This release removes all five branded examples and their downloadable synthetic fixtures. It uses two explicitly named public research sources: TutorMoments human tutoring transcripts and OATutor participant summaries. Their original inputs have different, preserved structures. Public samples are exact-byte excerpts with pinned source locations, full-file and excerpt hashes, selection rules and license attribution.
6
+
7
+ TutorMoments source turns contain actual released student/tutor dialogue, including requests for help and tutor questions. They are machine-produced transcripts of real sessions, not native clickstream logs or independently verified recordings. No generated enrichment is promoted to an observed event. OATutor condition assignment is retained as assignment, not hint delivery. Import times are identified as import times; relative source offsets are not converted into invented dates.
8
+
9
+ This is a source-adapter demonstration. It does not establish integration with the original five vendors, comparable outcome scales, learning effectiveness, independent learner performance or valid causal pooling.
@@ -0,0 +1,148 @@
1
+ # Published research data and attribution
2
+
3
+ The application's MIT code license does not relicense these data. Both supplied
4
+ research excerpts are distributed under the publishers' **CC BY 4.0** grants.
5
+ The Sandpiper fixture is synthetic and carries Sandpiper's MIT notice. The original
6
+ publisher-deidentified data, citations, source restrictions and selection rules
7
+ are documented in each `dist/provenance/*.json` file. No original recording,
8
+ private export or personal identity mapping is included.
9
+
10
+ ## TutorMoments-Preview
11
+
12
+ Albert Zhang and colleagues, *When Help is Unhelpful: Evaluating AI Tutors for
13
+ Productive Struggle* (2026 preview release). Ai2 and collaborators.
14
+
15
+ - Dataset: https://huggingface.co/datasets/allenai/tutormoments-preview
16
+ - Pinned revision: `3bb0c104d65e29facffca7ba864ef10fa22d0e78`
17
+ - Paper: https://tutormoments.allen.ai/static/paper/tutormoments-preview.pdf
18
+ - License: https://creativecommons.org/licenses/by/4.0/
19
+ - Supplied excerpt: complete `transcripts.jsonl` source lines 366 and 435,
20
+ unchanged, with 149 and 161 turns respectively.
21
+
22
+ These are transcripts of real human tutoring sessions, machine-transcribed by
23
+ SUT (Gemini 2.5 Pro). The provider is anonymized. Publisher-generated surrogate
24
+ names/IDs are retained in the source excerpt. Absolute dates were removed by
25
+ the publisher. Relative offsets, transcript inaccuracies and source text are
26
+ not independently checked against a recording. The selected sessions contain
27
+ mathematics practice, explicit requests for help and tutor prompts; this is a
28
+ purposive demonstration subset, not a representative sample or quality rating.
29
+
30
+ Only released `turns[]` are mapped to observed transcript turns. Model-generated
31
+ `enrichments`, replay conversations and pedagogical labels are not promoted to
32
+ observed events. The Learnlog adapter omits known source ID fields from its
33
+ selected source-field payload and uses scoped pseudonyms; it is not a general
34
+ anonymizer for free text.
35
+
36
+ The companion scaffolding view uses exact original `ground_truth.jsonl` lines
37
+ 157 and 190 and 14 complete original lines from `annotations.jsonl`, at the same
38
+ pinned revision and CC BY 4.0 license. The 60 included derived scaffolding rows'
39
+ situation/action/result strings match the raw human annotation release
40
+ verbatim. Their categorical need and action-direction labels are the source
41
+ publisher's LLM-assisted classifications, not new QLM classifications or
42
+ validated facts about assistance effectiveness. Sixty rows repeat labels for
43
+ ten distinct, sometimes overlapping intervals; each interval is counted once.
44
+ One raw human moment omitted by the publisher's derived release is not silently
45
+ added to the derived-label denominator. Source commentary can discuss context
46
+ beyond its marked interval, so the interval is not an exact assistance-event
47
+ boundary. `dist/provenance/scaffolding-evidence.json` records the source hashes,
48
+ line locators, labels, commentary and selection limits.
49
+
50
+ ## OATutor help-condition study participant data
51
+
52
+ Zachary Pardos and Shreya Bhandari (2023), *ChatGPT-generated help produces
53
+ learning gains equivalent to human tutors on mathematics skills*, Figshare
54
+ dataset. The associated research article was published in PLOS ONE in 2024.
55
+
56
+ - Paper: https://doi.org/10.1371/journal.pone.0304013
57
+ - Archived dataset: https://doi.org/10.6084/m9.figshare.23935269.v1
58
+ - Original file: https://ndownloader.figshare.com/files/41974569
59
+ - License: https://creativecommons.org/licenses/by/4.0/
60
+ - Supplied excerpt: original CSV header and first 12 participant records,
61
+ unchanged, with original column names and CRLF newlines.
62
+
63
+ This is a participant-level results table, not an event log. `condition` records
64
+ assigned ChatGPT, human-tutor or no-hint support; it does not establish actual
65
+ hint opening or receipt. The raw “Human tutor” condition refers to
66
+ human-authored hints, while “ChatGPT” refers to pre-generated solution hints;
67
+ these are not recordings of live tutor conversations. The paper reports correctness feedback and optional
68
+ bottom-out answers in the no-hint condition too; this label does not mean no
69
+ assistance. No timestamp, inquiry, hint text or event sequence is
70
+ supplied by that table. No learning effect is estimated by the demonstration.
71
+
72
+ ## Sandpiper documentation examples: SYNTHETIC fixture (MIT)
73
+
74
+ `dist/samples/sandpiper-SYNTHETIC.csv` is a SYNTHETIC fixture, not research
75
+ data. It arranges eight example utterances and one example annotation from the
76
+ documentation of Sandpiper, the National Tutoring Observatory's open-source
77
+ annotation app (<https://github.com/National-Tutoring-Observatory/sandpiper>,
78
+ commit `28e0d25c069ce07c759d802184d4ab914e9cfe8b`), in the layout of
79
+ Sandpiper's PER_UTTERANCE utterances CSV (`app/functions/outputRunDataToCSV`).
80
+ QLM did the arranging. There is no public National Tutoring Observatory dataset
81
+ here: no real learner, session or Sandpiper export is included. The adapter
82
+ keeps each utterance as an observed dialogue turn and each annotation code as an
83
+ inferred assertion by its annotator; no code is counted as help. The engine
84
+ offers this adapter to callers such as the Learnlog MCP; the demo page does not
85
+ list it.
86
+
87
+ > MIT License
88
+ >
89
+ > Copyright (c) 2025 National Tutoring Observatory
90
+ >
91
+ > Permission is hereby granted, free of charge, to any person obtaining a copy
92
+ > of this software and associated documentation files (the "Software"), to deal
93
+ > in the Software without restriction, including without limitation the rights
94
+ > to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
95
+ > copies of the Software, and to permit persons to whom the Software is
96
+ > furnished to do so, subject to the following conditions:
97
+ >
98
+ > The above copyright notice and this permission notice shall be included in all
99
+ > copies or substantial portions of the Software.
100
+ >
101
+ > THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
102
+ > IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
103
+ > FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
104
+ > AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
105
+ > LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
106
+ > OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
107
+ > SOFTWARE.
108
+
109
+ ## Separate cross-source request analysis: aggregate facts only
110
+
111
+ The cross-source panel adds **1,050** released Get Hint/Retry observations from
112
+ the JetBrains Academy plugin supplement to **59** `CHAT_QUERY` observations in
113
+ the selected TutorTrace / IDETrace deployment-8 file. These are source-native
114
+ request-record occurrences, not verified distinct human requests, pedagogical
115
+ quality labels or a complete assistance census. No raw learner rows, dialogue,
116
+ prompts, source-code payloads, event timestamps or linkable learner IDs from
117
+ these two additional releases are bundled with the website or its download.
118
+
119
+ JetBrains Academy supplement: Anastasiia Birillo, Aleksei Rostovskii, Yaroslav
120
+ Golubev and Hieke Keuning (2025), *Supplementary materials for the paper
121
+ “Understanding Student Interaction with AI-Powered Next-Step Hints: Strategies
122
+ and Challenges”*, v1, https://doi.org/10.5281/zenodo.17551130, CC BY 4.0. QLM
123
+ authored the transformations; no source-author endorsement is implied.
124
+
125
+ TutorTrace repository: `divadbaroon/TutorTrace_dataset_and_benchmark`, commit
126
+ `bc7990370da18a611a122255ebc3e475bd8a3fc6`, selected
127
+ `dataset/raw_telemetry/deployment_8.json`:
128
+ https://github.com/divadbaroon/TutorTrace_dataset_and_benchmark/tree/bc7990370da18a611a122255ebc3e475bd8a3fc6.
129
+ Its pinned `croissant.json` declares CC BY 4.0 with an anonymous creator. The
130
+ pinned datasheet is empty, GitHub reports no repository license, and published
131
+ population descriptions differ. No verified learner count, broad license-scope
132
+ claim or permission to redistribute the raw payload is inferred. The prepared
133
+ analysis distributes aggregate factual counts only. Source retrieval for
134
+ research reproduction requires the companion pipeline's explicit opt-in.
135
+
136
+ The generated `dist/examples/cross-source-analysis.json` retains source hashes,
137
+ release scopes, mappings, exclusions and metadata caveats. Candidate mappings
138
+ are agent-authored and agent-audited; independent human mapping review remains
139
+ pending. Raw source inputs and cached third-party code are excluded from the
140
+ prepared analysis archive.
141
+
142
+ ## Original five branded examples
143
+
144
+ The original Khan Academy, MATHia, IXL, DreamBox Math and ALEKS synthetic
145
+ examples have been removed. They did not establish authentic vendor export
146
+ compatibility. See `SOURCE_CORRECTION.md`. No replacement dataset is relabeled
147
+ as one of those vendors. ASSISTments, DataShop and other investigated sources
148
+ are not bundled without established redistribution rights.