@lernapps/tooling 0.0.0-stage → 0.1.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 (126) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +67 -2
  3. package/archetypes/shared/a11y.ts +38 -0
  4. package/archetypes/shared/hooks/pre-commit +22 -0
  5. package/archetypes/shared/hooks/pre-push +4 -0
  6. package/archetypes/shared/i18n.ts +25 -0
  7. package/archetypes/shared/install-hooks.ts +63 -0
  8. package/archetypes/shared/playwright.ts +54 -0
  9. package/archetypes/shared/preset.ts +81 -0
  10. package/archetypes/shared/storage.ts +167 -0
  11. package/archetypes/shared/tsconfig.json +27 -0
  12. package/check/validation-report.v1.schema.json +116 -0
  13. package/dist/a11y.mjs +30 -0
  14. package/dist/check/rules/accessible.mjs +18 -0
  15. package/dist/check/rules/app-content-guide.mjs +69 -0
  16. package/dist/check/rules/dependency-licence.mjs +82 -0
  17. package/dist/check/rules/entry-fitness-matches.mjs +22 -0
  18. package/dist/check/rules/entry-links-resolve.mjs +44 -0
  19. package/dist/check/rules/explainer-readable-without-js.mjs +66 -0
  20. package/dist/check/rules/links-resolve.mjs +10 -0
  21. package/dist/check/rules/lockfile-matches.mjs +57 -0
  22. package/dist/check/rules/no-request-before-click.mjs +17 -0
  23. package/dist/check/rules/no-tracking.mjs +17 -0
  24. package/dist/check/rules/own-data-only.mjs +66 -0
  25. package/dist/check/rules/pages-reachable.mjs +25 -0
  26. package/dist/check/rules/usable-at-360px.mjs +19 -0
  27. package/dist/check-cv4I6CCH.mjs +28 -0
  28. package/dist/cli.mjs +3118 -0
  29. package/dist/i18n.mjs +11 -0
  30. package/dist/lint.mjs +528 -0
  31. package/dist/plan-DWKayEnY.mjs +75 -0
  32. package/dist/playwright.mjs +47 -0
  33. package/dist/preset.mjs +60 -0
  34. package/dist/skills/lernapps-app/SKILL.md +49 -0
  35. package/dist/skills/lernapps-cli/SKILL.md +156 -0
  36. package/dist/skills/lernapps-cli/references/platform-rules.md +258 -0
  37. package/dist/skills/lernapps-commit/SKILL.md +39 -0
  38. package/dist/skills/lernapps-content-growth/SKILL.md +33 -0
  39. package/dist/skills/lernapps-content-questions/SKILL.md +133 -0
  40. package/dist/skills/lernapps-content-questions/references/question-types.md +69 -0
  41. package/dist/skills/lernapps-content-research/SKILL.md +50 -0
  42. package/dist/skills/lernapps-content-research/references/sources.md +16 -0
  43. package/dist/skills/lernapps-exercise-patterns/SKILL.md +74 -0
  44. package/dist/skills/lernapps-exercise-patterns/references/biology-geography.md +13 -0
  45. package/dist/skills/lernapps-exercise-patterns/references/chemistry.md +16 -0
  46. package/dist/skills/lernapps-exercise-patterns/references/computer-science.md +13 -0
  47. package/dist/skills/lernapps-exercise-patterns/references/figures.md +10 -0
  48. package/dist/skills/lernapps-exercise-patterns/references/history.md +13 -0
  49. package/dist/skills/lernapps-exercise-patterns/references/mathematics.md +19 -0
  50. package/dist/skills/lernapps-exercise-patterns/references/page-structures.md +8 -0
  51. package/dist/skills/lernapps-exercise-patterns/references/physics.md +18 -0
  52. package/dist/skills/lernapps-exercise-patterns/references/success.md +28 -0
  53. package/dist/skills/lernapps-explainer/SKILL.md +33 -0
  54. package/dist/skills/lernapps-explainer/references/blocks.md +83 -0
  55. package/dist/skills/lernapps-explainer/references/components.md +66 -0
  56. package/dist/skills/lernapps-explainer/references/exercises.md +115 -0
  57. package/dist/skills/lernapps-explainer/references/rules.md +285 -0
  58. package/dist/skills/lernapps-explainer/references/runtime.md +79 -0
  59. package/dist/skills/lernapps-explainer/references/structure.md +24 -0
  60. package/dist/skills/lernapps-explainer-design/SKILL.md +57 -0
  61. package/dist/skills/lernapps-explainer-design/references/rules.md +75 -0
  62. package/dist/skills/lernapps-explainer-self-assessment/SKILL.md +93 -0
  63. package/dist/skills/lernapps-github/SKILL.md +102 -0
  64. package/dist/skills/lernapps-interactive/SKILL.md +141 -0
  65. package/dist/skills/lernapps-interactive/references/frame.md +30 -0
  66. package/dist/skills/lernapps-interactive-design/SKILL.md +58 -0
  67. package/dist/skills/lernapps-listing/SKILL.md +44 -0
  68. package/dist/skills/lernapps-listing/references/keeping-updated.md +33 -0
  69. package/dist/skills/lernapps-quiz/SKILL.md +100 -0
  70. package/dist/skills/lernapps-quiz-design/SKILL.md +48 -0
  71. package/dist/status-CXoQBgfU.mjs +76 -0
  72. package/dist/storage.mjs +113 -0
  73. package/generator/app/.agents/skills/app-content/SKILL.md +63 -0
  74. package/generator/app/.github/ISSUE_TEMPLATE/inhaltsfehler.yml +25 -0
  75. package/generator/app/.github/workflows/pages.yml +61 -0
  76. package/generator/app/LICENSE +21 -0
  77. package/generator/app/renovate.json +4 -0
  78. package/generator/architecture.ts +212 -0
  79. package/generator/create.ts +462 -0
  80. package/generator/init.ts +186 -0
  81. package/generator/update.ts +429 -0
  82. package/guidance/AGENTS.md +26 -0
  83. package/guidance/increment-template.md +194 -0
  84. package/guidance/plan-front-matter.v1.schema.json +36 -0
  85. package/guidance/plan-template.md +233 -0
  86. package/guidance/subagent-brief.md +25 -0
  87. package/guidance/workflow-rules.md +109 -0
  88. package/package.json +135 -4
  89. package/review/verdict.v1.schema.json +134 -0
  90. package/skills/archetypes/lernapps-explainer/SKILL.md +33 -0
  91. package/skills/archetypes/lernapps-explainer/references/blocks.md +83 -0
  92. package/skills/archetypes/lernapps-explainer/references/components.md +66 -0
  93. package/skills/archetypes/lernapps-explainer/references/exercises.md +115 -0
  94. package/skills/archetypes/lernapps-explainer/references/rules.md +285 -0
  95. package/skills/archetypes/lernapps-explainer/references/runtime.md +79 -0
  96. package/skills/archetypes/lernapps-explainer/references/structure.md +24 -0
  97. package/skills/archetypes/lernapps-explainer-design/SKILL.md +57 -0
  98. package/skills/archetypes/lernapps-explainer-design/references/rules.md +75 -0
  99. package/skills/archetypes/lernapps-explainer-self-assessment/SKILL.md +93 -0
  100. package/skills/archetypes/lernapps-interactive/SKILL.md +141 -0
  101. package/skills/archetypes/lernapps-interactive/references/frame.md +30 -0
  102. package/skills/archetypes/lernapps-interactive-design/SKILL.md +58 -0
  103. package/skills/archetypes/lernapps-quiz/SKILL.md +100 -0
  104. package/skills/archetypes/lernapps-quiz-design/SKILL.md +48 -0
  105. package/skills/content/lernapps-content-questions/SKILL.md +133 -0
  106. package/skills/content/lernapps-content-questions/references/question-types.md +69 -0
  107. package/skills/content/lernapps-content-research/SKILL.md +50 -0
  108. package/skills/content/lernapps-content-research/references/sources.md +16 -0
  109. package/skills/content/lernapps-exercise-patterns/SKILL.md +74 -0
  110. package/skills/content/lernapps-exercise-patterns/references/biology-geography.md +13 -0
  111. package/skills/content/lernapps-exercise-patterns/references/chemistry.md +16 -0
  112. package/skills/content/lernapps-exercise-patterns/references/computer-science.md +13 -0
  113. package/skills/content/lernapps-exercise-patterns/references/figures.md +10 -0
  114. package/skills/content/lernapps-exercise-patterns/references/history.md +13 -0
  115. package/skills/content/lernapps-exercise-patterns/references/mathematics.md +19 -0
  116. package/skills/content/lernapps-exercise-patterns/references/page-structures.md +8 -0
  117. package/skills/content/lernapps-exercise-patterns/references/physics.md +18 -0
  118. package/skills/content/lernapps-exercise-patterns/references/success.md +28 -0
  119. package/skills/process/lernapps-app/SKILL.md +49 -0
  120. package/skills/process/lernapps-commit/SKILL.md +39 -0
  121. package/skills/process/lernapps-content-growth/SKILL.md +33 -0
  122. package/skills/process/lernapps-github/SKILL.md +102 -0
  123. package/skills/process/lernapps-listing/SKILL.md +44 -0
  124. package/skills/process/lernapps-listing/references/keeping-updated.md +33 -0
  125. package/skills/tooling/lernapps-cli/SKILL.md +156 -0
  126. package/skills/tooling/lernapps-cli/references/platform-rules.md +258 -0
@@ -0,0 +1,194 @@
1
+ ---
2
+ # Read by the hooks, the review, the evals. Schema: @lernapps/tooling/guidance/plan-front-matter.v1.schema.json
3
+ # Keep all four keys.
4
+ # Archetype as in the app's first plan; set it when you start. Never changes.
5
+ archetype: null
6
+ # Current phase. Allowed values: explore, plan, code, commit. Change the value line below, never this comment.
7
+ phase: explore
8
+ # prePushFailures: failed pre-push runs of this increment, written by the hook. Never change it.
9
+ prePushFailures: 0
10
+ # failedChecks: failed rules and runs, written by lernapps check and the hooks. Never change it.
11
+ failedChecks: {}
12
+ ---
13
+
14
+ # Increment: <what it adds>
15
+
16
+ <!--
17
+ For you, the assistant. One increment of a published app: new competencies, chapters, pages, rounds, questions, or
18
+ a correction.
19
+ 1. Path: `.vibe/plans/<NN>-<short name>.md`, NN = highest + 1. Never change an earlier plan. App with only
20
+ `.vibe/plan.md`: that is plan 01; start this one as 02 (the update in Code moves it).
21
+ 2. The first version's decisions stand: archetype, content method, content guide
22
+ `.agents/skills/app-content/SKILL.md`. Change the guide only for a new pattern, figure type or source rule; say
23
+ so at the checkpoints.
24
+ 3. Read this plan before each step. One phase at a time, tasks in order.
25
+ 4. Task done → tick `[x]` at once and move it to "Completed" of its phase. New task found → add it.
26
+ 5. Each phase names its skills. Load a skill when its task comes, not before. Read it in full, from its file.
27
+ 6. Checkpoint: stop, ask, wait for the creator's answer.
28
+ Only a checkpoint waits. A phase's last box → set the next phase and go on in the same message.
29
+ 7. At most 2 questions per message, one topic each.
30
+ 8. Work on the branch `increment/<NN>-<short name>`. Until Commit everything is local: push nothing.
31
+ 9. Plan in the creator's language. Keep headings and front matter keys. Delete a comment once its part is filled.
32
+ 10. Begin each reply to the creator with the phase in `phase:`, and at a checkpoint the word checkpoint:
33
+ "**Plan · Checkpoint**", "**Code**". The creator always knows where you are.
34
+ -->
35
+
36
+ *Started <date>. Explore, Plan, Code, Commit.*
37
+
38
+ ## Goal
39
+
40
+ <!-- 1–2 sentences: what learners can do after this increment. -->
41
+
42
+ ## Key decisions
43
+
44
+ <!-- One line each: decision and reason. Your own choice without the creator: mark "(guess)". -->
45
+
46
+ ## Notes
47
+
48
+ <!-- Curriculum orientation, new competencies by chapter, didactic approach, scope, sources and licences, open
49
+ questions. -->
50
+
51
+ ## Explore
52
+
53
+ <!--
54
+ - All content questions belong here; Plan maps the answers onto the app. Ask; write no code.
55
+ - Skip what earlier answers or the app already tell. Never tick a topic you assumed.
56
+ - Skills: the content guide `app-content`, `lernapps-content-research`, `lernapps-<archetype>-design`.
57
+ -->
58
+
59
+ ### Tasks
60
+
61
+ - [ ] Set `archetype` as in the app's first plan in `.vibe/plans/`.
62
+ - [ ] Skills are in `.agents/skills/`; if missing, install them as the first task of the plan template says.
63
+ - [ ] Read the README of the archetype's template (link in skill `lernapps-app`): what the app can do now. Tell the
64
+ creator what is new, if it matters for this increment.
65
+ - [ ] Load the content guide `.agents/skills/app-content/SKILL.md`. Read the plans in `.vibe/plans/`: what the app
66
+ teaches, how its content is made, what is open.
67
+ - [ ] Interview: one topic per question, the creator's words under "Answers". No answer → ask once more, then
68
+ "(guess)". Topics: which competencies, chapters or rounds, for which school years; hurdles and examples;
69
+ amount; any change of look and feel or terms.
70
+ - [ ] Load skill `lernapps-content-research`. Research what the guide's curriculum and sources do not cover. Under
71
+ "Notes": curriculum orientation, new competencies by chapter as "Ich kann …", verified sources.
72
+ - [ ] Under "Notes": the didactic approach per competency and the scope (in, out, data range).
73
+ - [ ] A kind of content the guide does not cover (a new page structure, screen, component or kind of exercise) →
74
+ load skills `lernapps-<archetype>-design` and `lernapps-exercise-patterns`. Else skip this task.
75
+ - [ ] **Checkpoint:** research. Show in plain words: curriculum orientation, new competencies by chapter, didactic
76
+ approach, scope, every "(guess)", sources and how you checked them, what is unchecked. Stop and wait.
77
+ Changes → change, ask again.
78
+ - [ ] Set `phase: plan`: change the value line (`grep '^phase:'` prints `phase: plan`).
79
+
80
+ ### Answers
81
+
82
+ <!-- The creator's answers, in their words, one bullet each. -->
83
+
84
+ ### Completed
85
+
86
+ ## Plan
87
+
88
+ <!--
89
+ - Map the new content onto the app with the guide's patterns. Confirmable in one read.
90
+ - After the yes, work on your own: at most 3 creator turns until the end.
91
+ - Skills: `lernapps-content-growth`; for something the guide does not cover, the skills loaded in Explore.
92
+ -->
93
+
94
+ ### Tasks
95
+
96
+ - [ ] `grep '^phase:'` prints `phase: plan`; else set it.
97
+ - [ ] Load skill `lernapps-content-growth`. Write the Code tasks as slices, one per competency, in the guide's
98
+ order. Mark the slices sub-agents can write in parallel.
99
+ - [ ] Write "Content method": the guide's patterns, figures and components per slice. Anything new: map it as skill
100
+ `lernapps-<archetype>-design` says, choose its pattern with skill `lernapps-exercise-patterns` (both loaded
101
+ in Explore), and say why the guide's patterns do not fit.
102
+ - [ ] Each new component or interactive exercise: a sketch (static SVG or image, or the steps). Words alone are not
103
+ enough.
104
+ - [ ] Show the creator, short: goal, new competencies by chapter, slices; in plain words what learners see and do,
105
+ what is new. At most 2 questions.
106
+ - [ ] **Checkpoint:** confirm the plan and the content method. Stop and wait for an explicit yes. Changes → change,
107
+ ask again.
108
+ - [ ] Set `phase: code`: change the value line (`grep '^phase:'` prints `phase: code`).
109
+
110
+ ### Content method
111
+
112
+ <!-- One line each: the guide's patterns, figures and components used, and where; anything new, what it does and
113
+ cannot. Something new goes into the guide in the slice that adds it. -->
114
+
115
+ ### Completed
116
+
117
+ ## Code
118
+
119
+ <!--
120
+ - Build locally on the branch. Commit after each slice; the hooks check. A check fails → skill `lernapps-cli`. Fix from the message; never
121
+ bypass a hook.
122
+ - Undecidable → choose, mark "(guess)", go on.
123
+ - Creator asks for a change → first say your reading in one sentence; never narrow it silently.
124
+ - Skills: `lernapps-cli`, `lernapps-<archetype>`, `lernapps-content-questions`, the content guide.
125
+ -->
126
+
127
+ ### Tasks
128
+
129
+ - [ ] `grep '^phase:'` prints `phase: code`; else set it.
130
+ - [ ] `git switch -c increment/<NN>-<short name>` from `main`. Commit this plan on it.
131
+ - [ ] Load skill `lernapps-cli`. Update the app as it says. Commit the update alone; fix its findings before
132
+ content. The update replaces the `lernapps-*` skills: reread those you use.
133
+ - [ ] Load skill `lernapps-<archetype>` and the content guide. Questions with options and feedback: also skill
134
+ `lernapps-content-questions`.
135
+ - [ ] <the slices written in Plan; each: competency, content, exercise, the entry's topic, check, commit>
136
+ - [ ] After the first slice: show the creator a first look (`early-preview`) and go on.
137
+ Parallel slices: send each sub-agent `@lernapps/tooling/guidance/subagent-brief.md`, filled in.
138
+ - [ ] The content guide describes the app as it is now (`app-content-matches`). `grep -c "FILL IN"
139
+ .agents/skills/app-content/SKILL.md` prints 0.
140
+ - [ ] `npx lernapps check` passes.
141
+ - [ ] Every box of Explore, Plan and Code ticked.
142
+ - [ ] Set `phase: commit`: change the value line (`grep '^phase:'` prints `phase: commit`).
143
+ No checkpoint here: set it before you ask or report anything, then start Commit in the same message.
144
+
145
+ ### Completed
146
+
147
+ ## Commit
148
+
149
+ <!--
150
+ - Publish with the creator's yes. A push to `main` publishes.
151
+ - Open the pull requests (to `main`, to the catalog) without asking: they publish nothing; their preview and result
152
+ are what the creator decides on.
153
+ - Skills: `lernapps-explainer-self-assessment` (an explainer), `lernapps-github`, `lernapps-commit`,
154
+ `lernapps-listing`.
155
+ -->
156
+
157
+ ### Tasks
158
+
159
+ - [ ] `grep '^phase:'` prints `phase: commit`; else set it.
160
+ - [ ] An explainer whose pages or exercises changed: load skill `lernapps-explainer-self-assessment`
161
+ (missing → `npx lernapps skills --archetype explainer`). Update the
162
+ self-assessment as it says (add one, if the app has none and the skill says so). Commit; the hooks check.
163
+ - [ ] Load skill `lernapps-github`. Push the branch, open the preview pull request, see its checks to green as it
164
+ says.
165
+ - [ ] **Checkpoint:** publish. Show what the increment adds and the preview link; ask whether it may go online. Wait
166
+ for the yes.
167
+ - [ ] Load skill `lernapps-commit`. Publish as skill `lernapps-github` says: the pull request squash-merged into
168
+ `main` with the message from this plan, the run of `Pages` watched to the end.
169
+ - [ ] Open the address the job `deploy` printed; confirm the new content. Never a derived address.
170
+ - [ ] App listed and its entry changes (topics, school years, summary) → load skill `lernapps-listing` and write the
171
+ changed entry. Else skip the checkpoint "list".
172
+ - [ ] Fill the retrospective.
173
+ - [ ] Commit this plan on `main` and push it. A push of only `.vibe/` publishes nothing.
174
+ - [ ] **Checkpoint:** list. Open the pull request to the catalog without asking first: the pull request is the
175
+ review. See it to "bestanden" as the skill says, then show the creator the pull request and its result.
176
+ - [ ] Plan changed since its last push → commit it on `main`, push again.
177
+
178
+ ### Completed
179
+
180
+ ## Retrospective
181
+
182
+ <!-- At the end of Commit. Facts, short, no names. Read by review and evals. -->
183
+
184
+ ### Phases reached
185
+
186
+ <!-- Last phase completed, checkpoints passed. E.g. "commit; confirmed, published". -->
187
+
188
+ ### Creator turns after the plan
189
+
190
+ <!-- Number of creator messages after the confirmation, topic of each. Target: at most 3. -->
191
+
192
+ ### Where I had to guess
193
+
194
+ <!-- Each gap in plan, skills, content guide, messages or answers, and your choice. "None" if none. -->
@@ -0,0 +1,36 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "title": "Front matter of a lernapps plan file, version 1",
4
+ "description": "The YAML front matter of an app's plan files (.vibe/plans/<NN>-<short name>.md, one per piece of work). The assistant sets archetype and phase; the pre-push hook increments prePushFailures; every failed run of `lernapps check` in the repo (the hooks included) counts its failed rules in failedChecks. The review and the evals read them. One `key: value` per line; failedChecks is a flow map on its line. A breaking change gets a new version of this schema.",
5
+ "type": "object",
6
+ "properties": {
7
+ "archetype": {
8
+ "description": "The kind of app, chosen in Explore of its first plan from the creator's answers, and taken over by every later plan; null until then.",
9
+ "enum": ["explainer", "interactive", "quiz", null]
10
+ },
11
+ "phase": {
12
+ "description": "The phase the assistant works in now.",
13
+ "enum": ["explore", "plan", "code", "commit"]
14
+ },
15
+ "prePushFailures": {
16
+ "description": "Failed runs of the pre-push hook during this plan. Written by the hook, never by the assistant.",
17
+ "type": "integer",
18
+ "minimum": 0
19
+ },
20
+ "failedChecks": {
21
+ "description": "Each rule that had an error in a failed run of `lernapps check` in the repo during this plan (the git hooks included), with the number of such runs. Written by the check, never by the assistant. A plan made before this key has none.",
22
+ "type": "object",
23
+ "propertyNames": { "pattern": "^[a-z0-9]+(-[a-z0-9]+)*$" },
24
+ "additionalProperties": { "type": "integer", "minimum": 1 }
25
+ }
26
+ },
27
+ "required": ["archetype", "phase", "prePushFailures"],
28
+ "additionalProperties": false,
29
+ "if": {
30
+ "properties": { "phase": { "enum": ["plan", "code", "commit"] } },
31
+ "required": ["phase"]
32
+ },
33
+ "then": {
34
+ "properties": { "archetype": { "type": "string" } }
35
+ }
36
+ }
@@ -0,0 +1,233 @@
1
+ ---
2
+ # Read by the hooks, the review, the evals. Schema: @lernapps/tooling/guidance/plan-front-matter.v1.schema.json
3
+ # Keep all four keys.
4
+ # Archetype, null until chosen in Explore. Allowed values: explainer, interactive, quiz.
5
+ archetype: null
6
+ # Current phase. Allowed values: explore, plan, code, commit. Change the value line below, never this comment.
7
+ phase: explore
8
+ # prePushFailures: written by the pre-push hook. Never change it.
9
+ prePushFailures: 0
10
+ # failedChecks: failed rules and runs, written by lernapps check and the hooks. Never change it.
11
+ failedChecks: {}
12
+ ---
13
+
14
+ # Plan: <app name>, first version
15
+
16
+ <!--
17
+ For you, the assistant.
18
+ 1. Path: `.vibe/plans/01-<short name>.md`. Every later change gets its own plan from the increment template.
19
+ 2. Read this plan before each step. One phase at a time, tasks in order.
20
+ 3. Task done → tick `[x]` at once and move it to "Completed" of its phase. An unticked box counts as not done.
21
+ 4. New task found → add it.
22
+ 5. Each phase names its skills. Load a skill when its task comes, not before. Read it in full, from its file.
23
+ 6. Checkpoint: stop, ask, wait for the creator's answer. A message sent before the question is no yes.
24
+ Only a checkpoint waits. A phase's last box → set the next phase and go on in the same message.
25
+ 7. At most 2 questions per message, one topic each. No questions inside drafts or lists.
26
+ 8. Work on the branch `work`, locally: push nothing before Commit. Commit puts the app on GitHub and brings `work`
27
+ into `main`.
28
+ 9. Plan in the creator's language. Keep headings and front matter keys. Delete a comment once its part is filled.
29
+ 10. Begin each reply to the creator with the phase in `phase:`, and at a checkpoint the word checkpoint:
30
+ "**Plan · Checkpoint**", "**Code**". The creator always knows where you are.
31
+ -->
32
+
33
+ *Started <date>. Explore, Plan, Code, Commit.*
34
+
35
+ ## Goal
36
+
37
+ <!-- 1–2 sentences: what learners do, what they learn. -->
38
+
39
+ ## Key decisions
40
+
41
+ <!-- One line each: decision and reason. Archetype first. Your own choice without the creator: mark "(guess)". -->
42
+
43
+ ## Notes
44
+
45
+ <!-- Curriculum orientation, competencies by chapter, didactic approach, scope, sources and licences, open
46
+ questions. -->
47
+
48
+ ## Explore
49
+
50
+ <!--
51
+ - Find out what the app teaches, for whom, how much and how it looks. All content questions belong here; Plan only
52
+ maps the answers onto the archetype.
53
+ - Ask. Write no code, run no `create`.
54
+ - An answer counts only in the creator's words under "Answers". Never tick a topic you assumed.
55
+ - Skills: `lernapps-app`, `lernapps-exercise-patterns`, `lernapps-<archetype>-design`, `lernapps-content-research`.
56
+ -->
57
+
58
+ ### Tasks
59
+
60
+ - [ ] The skills of the phases are in `.agents/skills/` (`npx --yes @lernapps/tooling init <short name>` put them there
61
+ and wrote this plan; the app commits them). `.agents/skills/lernapps-app` missing → stop and tell the creator
62
+ the folder was not started with `init`.
63
+ - [ ] Load skill `lernapps-app`. Tell the creator in two sentences what a lernapps app is and where it will live: at
64
+ their own address, free, public, and once listed as a copy on lernapps.net. The technical part (GitHub) comes at the end, and you do it.
65
+ - [ ] Interview: ask the topics "Goal" and "Learners" of "Answers".
66
+ - [ ] Load skill `lernapps-exercise-patterns` and read the patterns of the subject: how will learners practise what
67
+ the goal names? The kind of practice points to the archetype, as the skill says.
68
+ - [ ] Choose the archetype as skill `lernapps-app` says, from the kind of practice: read the README of each
69
+ archetype in question, tell the creator what the chosen one can and cannot do. Write it and its reason under
70
+ "Key decisions". Set `archetype`.
71
+ - [ ] Install the archetype's skills: `npx lernapps skills --archetype <archetype>`. Load skill
72
+ `lernapps-<archetype>-design`.
73
+ - [ ] Interview: ask the other topics of "Answers" in order. Skip a topic only when an earlier answer covers it; note
74
+ which. No answer → ask once more; still none → write your assumption with "(guess)". Done when every topic
75
+ has an answer or a guess.
76
+ - [ ] Load skill `lernapps-content-research`. Research as it says. Under "Notes": curriculum orientation,
77
+ competencies by chapter as "Ich kann …", verified sources. No competencies → not done.
78
+ - [ ] Under "Notes", one line per competency: how learners get there (derive, not only read off; e.g. a tree diagram
79
+ shows how a probability comes about), which misconception the feedback catches.
80
+ - [ ] Under "Notes", the scope: what is in, what is out and why, the data range (e.g. "all main-group elements",
81
+ never a silent "1–20"), the languages.
82
+ - [ ] Fetch https://lernapps.net/apps/schemas/entry.v1.schema.json and read each property's description. Ask what
83
+ helps teachers and parents find the app. Fill "Entry draft". Search words: one or two words each, as people
84
+ type them.
85
+ - [ ] **Checkpoint:** research. Show in plain words: curriculum orientation, competencies by chapter, didactic
86
+ approach, scope, every "(guess)", sources and how you checked them, what is unchecked, archetype and reason.
87
+ Stop and wait. Changes → change, ask again.
88
+ - [ ] Set `phase: plan`: change the value line (`grep '^phase:'` prints `phase: plan`).
89
+
90
+ ### Answers
91
+
92
+ <!-- The interview: per topic the creator's answer, in their words. Keep the topics. -->
93
+
94
+ - Goal: what learners do in the app, what they learn.
95
+ - Learners: subject, school year, prior knowledge. Land and Schulform only if the creator names a school or class,
96
+ at most once; none → KMK-Bildungsstandards.
97
+ - Model and focus: an app of the catalog (read https://lernapps.net/apps/llms.txt) as model; what matters most
98
+ (exercises, visualisations, game feel).
99
+ - Hurdles: misconceptions and mistakes of the learners; the creator's examples and experiments.
100
+ - Content: who writes it (creator, you, from sources); own material (worksheets, tests); how it is made (sources,
101
+ research, a data format).
102
+ - Amount: how much content per level or chapter in the first version (e.g. "one text per school year"); what comes
103
+ later.
104
+ - Languages: German only, or more (texts, code).
105
+ - Look and feel: calm like a worksheet, or like a game (colours, praise, effects); dark mode.
106
+ - Terms: the creator's words for the main things in the app, used everywhere.
107
+
108
+ ### Entry draft
109
+
110
+ <!-- YAML valid against the entry schema, with its property names. Only known values, never invented. -->
111
+
112
+ ```yaml
113
+ ```
114
+
115
+ ### Completed
116
+
117
+ ## Plan
118
+
119
+ <!--
120
+ - Map the confirmed content onto the archetype: structure, screens or pages, exercise patterns, data files,
121
+ components.
122
+ - No new content questions. A content gap → back to Explore; say so.
123
+ - Confirmable in one read. After the yes, work on your own: at most 3 creator turns until the listing.
124
+ - Skills: `lernapps-<archetype>-design` and `lernapps-exercise-patterns`, both loaded in Explore.
125
+ -->
126
+
127
+ ### Tasks
128
+
129
+ - [ ] `grep '^phase:'` prints `phase: plan`; else set it.
130
+ - [ ] Map the content as skill `lernapps-<archetype>-design` says; reread it if it is no longer in view.
131
+ - [ ] Choose a pattern per competency as skill `lernapps-exercise-patterns` says (loaded in Explore; reread it if it
132
+ is no longer in view). Write "Content method".
133
+ - [ ] Write the Code tasks under "Code": pages or screens, their content, what each shows. Each ends in a commit.
134
+ After the first task that shows real content: the task "Show the creator a first look (`early-preview`)".
135
+ - [ ] Each screen, component or interactive exercise: a sketch (static SVG or image, or the steps with what
136
+ learners see after each). Words alone are not enough.
137
+ - [ ] Show the creator, short: goal, competencies by chapter, entry draft, tasks, sketches; the content method in
138
+ plain words (what learners see and do, what it cannot do). At most 2 questions.
139
+ - [ ] **Checkpoint:** confirm the plan and the content method, with the sketches shown. Stop and wait for an
140
+ explicit yes. Changes → change, ask again. No `create` before the yes.
141
+ - [ ] Set `phase: code`: change the value line (`grep '^phase:'` prints `phase: code`).
142
+
143
+ ### Content method
144
+
145
+ <!-- One line each: exercise patterns and where; figures and how they are made; data files; each component, what it
146
+ checks and cannot; how a later agent adds a chapter. Becomes the content guide in Code. -->
147
+
148
+ ### Completed
149
+
150
+ ## Code
151
+
152
+ <!--
153
+ - Build the app from the archetype and the confirmed plan, locally on `work`. Work on your own.
154
+ - Commit after each task; the hooks check. A check fails → skill `lernapps-cli`. Fix from the message; never
155
+ bypass a hook.
156
+ - Undecidable → choose, mark "(guess)" under "Key decisions", go on.
157
+ - Creator asks for a change → first say your reading in one sentence ("Ich nehme alle 44 Hauptgruppenelemente
158
+ auf."); never narrow it silently. Content change → update "Notes" too.
159
+ - Skills: `lernapps-cli`, `lernapps-<archetype>`, `lernapps-content-questions`, and the app's content guide
160
+ `app-content`.
161
+ -->
162
+
163
+ ### Tasks
164
+
165
+ - [ ] `grep '^phase:'` prints `phase: code`; else set it.
166
+ - [ ] Load skill `lernapps-cli`. Create the app in this plan's folder as it says. `create` keeps this plan. Never
167
+ write the app by hand.
168
+ - [ ] Fill the content guide `.agents/skills/app-content/SKILL.md` from "Notes" and "Content method"
169
+ (`app-content-guide`). `grep -c "FILL IN" .agents/skills/app-content/SKILL.md` prints 0. Commit it before
170
+ any content.
171
+ - [ ] Load skill `lernapps-<archetype>` and the content guide. Questions with options and feedback: also skill
172
+ `lernapps-content-questions`.
173
+ - [ ] <the tasks written in Plan; after each, commit on `work`; after the first with real content, show the
174
+ creator a first look (`early-preview`) and go on>
175
+ - [ ] The content guide matches what was built (`app-content-matches`).
176
+ - [ ] `npx lernapps check` passes.
177
+ - [ ] Look at a screenshot of every screen and state (start, each mode, pause, end), desktop and 360 px. Compare
178
+ each with the confirmed sketches.
179
+ - [ ] Every box of Explore, Plan and Code ticked.
180
+ - [ ] Set `phase: commit`: change the value line (`grep '^phase:'` prints `phase: commit`).
181
+ No checkpoint here: set it before you ask or report anything, then start Commit in the same message.
182
+
183
+ ### Completed
184
+
185
+ ## Commit
186
+
187
+ <!--
188
+ - Put the app on GitHub, publish it with the creator's yes, then list it. A push to `main` publishes.
189
+ - Open the pull requests (to `main`, to the catalog) without asking: they publish nothing; their preview and result
190
+ are what the creator decides on.
191
+ - Skills: `lernapps-explainer-self-assessment` (an explainer), `lernapps-github`, `lernapps-commit`,
192
+ `lernapps-listing`.
193
+ -->
194
+
195
+ ### Tasks
196
+
197
+ - [ ] `grep '^phase:'` prints `phase: commit`; else set it.
198
+ - [ ] An explainer: load skill `lernapps-explainer-self-assessment` (missing → `npx lernapps skills --archetype
199
+ explainer`). Add the self-assessment as it says, or
200
+ write under "Key decisions" why the app has none. Commit; the hooks check.
201
+ - [ ] Load skill `lernapps-github`. Repo and Pages as it says: ask the repo name and every click only the creator can
202
+ make in one message.
203
+ - [ ] Push `work`, open the preview pull request, see its checks to green as the skill says.
204
+ - [ ] **Checkpoint:** publish. Show what the app does and the preview link from the comment "Vorschau der App"; ask
205
+ whether it may go online; put any open click into the same question. Wait for the yes.
206
+ - [ ] Load skill `lernapps-commit`. Publish as skill `lernapps-github` says: `work` into `main` as one squash commit
207
+ with the message from this plan, the run of `Pages` watched to the end.
208
+ - [ ] Open the address the job `deploy` printed; confirm the app shows. Use that address, never a derived one.
209
+ - [ ] Load skill `lernapps-listing`. Complete the entry draft (e.g. the address).
210
+ - [ ] Fill the retrospective.
211
+ - [ ] Commit this plan on `main` and push it: the listing check and the review read it there.
212
+ - [ ] **Checkpoint:** list. Open the listing pull request as the skill says, without asking first: the pull request
213
+ is the review. See it to "bestanden", then show the creator the pull request and its result; change nothing in
214
+ it without their word.
215
+ - [ ] Plan changed since its last push → commit it on `main`, push again.
216
+
217
+ ### Completed
218
+
219
+ ## Retrospective
220
+
221
+ <!-- At the end of Commit, before the listing pull request. Facts, short, no names. Read by review and evals. -->
222
+
223
+ ### Phases reached
224
+
225
+ <!-- Last phase completed, checkpoints passed. E.g. "commit; confirmed, published". -->
226
+
227
+ ### Creator turns after the plan
228
+
229
+ <!-- Number of creator messages after the confirmation, topic of each. Target: at most 3. -->
230
+
231
+ ### Where I had to guess
232
+
233
+ <!-- Each gap in plan, skills, messages or answers, and your choice. "None" if none. -->
@@ -0,0 +1,25 @@
1
+ # Sub-agent brief
2
+
3
+ Fill the brackets. Send the whole brief to each sub-agent.
4
+
5
+ ```text
6
+ Add the chapter/round "<title>" to the lernapps app in <repo>, on the branch <branch>, in your own git worktree.
7
+
8
+ Read first, in this order: .agents/skills/app-content/SKILL.md (it takes precedence), then the skills
9
+ lernapps-<archetype> and lernapps-cli; for questions with options also lernapps-content-questions.
10
+
11
+ Competencies, one slice each, in this order:
12
+ 1. "Ich kann …" (Lehrplan: <document, page, unit> | none)
13
+ - Content: <page or questions, with ids>
14
+ - Exercise: pattern "<name from the guide>", varied as <…>
15
+ - Second source: <address and exact title, verified> | none
16
+ 2. …
17
+
18
+ Change only: <the files of this chapter or round>. Do not change: the content guide, the plan, <the shared files>.
19
+ Write what the shared files need into your report instead.
20
+
21
+ Per slice: content, exercise, `npx lernapps check` green, one commit. Never bypass a hook.
22
+
23
+ Report: branch, commits, per competency the ids of its page or questions and exercises, the patterns used, what the
24
+ shared files need, what you could not verify.
25
+ ```
@@ -0,0 +1,109 @@
1
+ # Workflow rules
2
+
3
+ The plan holds the workflow. These rules say what each step must meet. They hold in every phase.
4
+
5
+ ## Plan
6
+
7
+ ### `plan-file`: Keep the plan file
8
+
9
+ ```rule
10
+ id: plan-file
11
+ scope: tooling
12
+ severity: error
13
+ ```
14
+
15
+ - Each plan in `.vibe/plans/`, with every section and front matter key of its template.
16
+ - Never change the plan of an earlier piece of work.
17
+ - Set `phase` when you enter a phase. Tick each task box when it is done.
18
+ - Never edit `prePushFailures` or `failedChecks`: the hook and the check write them.
19
+
20
+ ### `explore-before-code`: No code before the plan is confirmed
21
+
22
+ ```rule
23
+ id: explore-before-code
24
+ scope: tooling
25
+ severity: error
26
+ ```
27
+
28
+ - No code and no `lernapps create` until the creator has confirmed the plan with a yes.
29
+
30
+ ### `stop-at-checkpoints`: Stop at the creator's checkpoints
31
+
32
+ ```rule
33
+ id: stop-at-checkpoints
34
+ scope: tooling
35
+ severity: error
36
+ ```
37
+
38
+ - Checkpoints: research, confirm the plan and the content method, publish. Stop at each and wait for the answer.
39
+ - Checkpoint list: open the listing pull request first (it publishes nothing), then show it and its result and wait.
40
+ - A message sent before the checkpoint's question is no yes.
41
+ - Example: "Die App ist fertig und geprüft. Soll ich sie jetzt veröffentlichen?"
42
+
43
+ ### `few-turns-after-plan`: Work on your own after the plan
44
+
45
+ ```rule
46
+ id: few-turns-after-plan
47
+ scope: tooling
48
+ severity: hint
49
+ ```
50
+
51
+ - After the confirmation, ask only what you cannot decide.
52
+ - Else choose, mark "(guess)" under "Key decisions" and list it in the retrospective.
53
+
54
+ ### `early-preview`: Show a first look early
55
+
56
+ ```rule
57
+ id: early-preview
58
+ scope: tooling
59
+ severity: hint
60
+ ```
61
+
62
+ - In Code, as soon as the first screen or page shows real content: send the creator a short "Zwischenstand".
63
+ - Show screenshots, desktop and 360 px. On the creator's machine also the address of `npm run dev`, started in the
64
+ background.
65
+ - No checkpoint, no question: go on in the same message. The creator may stop you or ask for a change.
66
+ - Example: "Zwischenstand: So sieht die erste Seite aus. Ich baue weiter; sag Bescheid, wenn etwas nicht passt."
67
+
68
+ ### `retrospective-filled`: Fill the retrospective
69
+
70
+ ```rule
71
+ id: retrospective-filled
72
+ scope: tooling
73
+ severity: error
74
+ ```
75
+
76
+ - At the end of Commit, fill every part with facts: phases reached, creator turns after the plan, where you guessed.
77
+ No names.
78
+ - Failed checks need no entry: the check counts them in `failedChecks`.
79
+
80
+ ## Content guide
81
+
82
+ ### `app-content-guide`: Keep the app's content guide
83
+
84
+ ```rule
85
+ id: app-content-guide
86
+ scope: tooling
87
+ severity: error
88
+ ```
89
+
90
+ - Keep `.agents/skills/app-content/SKILL.md` with its fixed headings.
91
+ - After the plan is confirmed and before content: replace every placeholder ("FILL IN") with concrete instructions
92
+ for writing new content: files, ids, data files, an example of this app. Not how the app works, no general advice.
93
+ - A content decision changes (pattern, figure type, source rule) → change the guide in the same commit.
94
+ - `lernapps check` checks the file and its headings always, and that no placeholder is left once the plan is in
95
+ Commit.
96
+ - App older than the guide: `lernapps update` adds the skeleton (skill `lernapps-cli`).
97
+
98
+ ### `app-content-matches`: The content guide says what was built
99
+
100
+ ```rule
101
+ id: app-content-matches
102
+ scope: tooling
103
+ severity: error
104
+ ```
105
+
106
+ - Every pattern it names is used; no pattern is used that it does not name.
107
+ - Curriculum, competencies, chapters, pages or rounds match the content.
108
+ - Its procedure for a new chapter or round names the current files.
109
+ - An agent without your conversation can add the next chapter or round from it alone.