@lernapps/tooling 0.0.1 → 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.
- package/LICENSE +22 -0
- package/README.md +67 -2
- package/archetypes/shared/a11y.ts +38 -0
- package/archetypes/shared/hooks/pre-commit +22 -0
- package/archetypes/shared/hooks/pre-push +4 -0
- package/archetypes/shared/i18n.ts +25 -0
- package/archetypes/shared/install-hooks.ts +63 -0
- package/archetypes/shared/playwright.ts +54 -0
- package/archetypes/shared/preset.ts +81 -0
- package/archetypes/shared/storage.ts +167 -0
- package/archetypes/shared/tsconfig.json +27 -0
- package/check/validation-report.v1.schema.json +116 -0
- package/dist/a11y.mjs +30 -0
- package/dist/check/rules/accessible.mjs +18 -0
- package/dist/check/rules/app-content-guide.mjs +69 -0
- package/dist/check/rules/dependency-licence.mjs +82 -0
- package/dist/check/rules/entry-fitness-matches.mjs +22 -0
- package/dist/check/rules/entry-links-resolve.mjs +44 -0
- package/dist/check/rules/explainer-readable-without-js.mjs +66 -0
- package/dist/check/rules/links-resolve.mjs +10 -0
- package/dist/check/rules/lockfile-matches.mjs +57 -0
- package/dist/check/rules/no-request-before-click.mjs +17 -0
- package/dist/check/rules/no-tracking.mjs +17 -0
- package/dist/check/rules/own-data-only.mjs +66 -0
- package/dist/check/rules/pages-reachable.mjs +25 -0
- package/dist/check/rules/usable-at-360px.mjs +19 -0
- package/dist/check-cv4I6CCH.mjs +28 -0
- package/dist/cli.mjs +3118 -0
- package/dist/i18n.mjs +11 -0
- package/dist/lint.mjs +528 -0
- package/dist/plan-DWKayEnY.mjs +75 -0
- package/dist/playwright.mjs +47 -0
- package/dist/preset.mjs +60 -0
- package/dist/skills/lernapps-app/SKILL.md +49 -0
- package/dist/skills/lernapps-cli/SKILL.md +156 -0
- package/dist/skills/lernapps-cli/references/platform-rules.md +258 -0
- package/dist/skills/lernapps-commit/SKILL.md +39 -0
- package/dist/skills/lernapps-content-growth/SKILL.md +33 -0
- package/dist/skills/lernapps-content-questions/SKILL.md +133 -0
- package/dist/skills/lernapps-content-questions/references/question-types.md +69 -0
- package/dist/skills/lernapps-content-research/SKILL.md +50 -0
- package/dist/skills/lernapps-content-research/references/sources.md +16 -0
- package/dist/skills/lernapps-exercise-patterns/SKILL.md +74 -0
- package/dist/skills/lernapps-exercise-patterns/references/biology-geography.md +13 -0
- package/dist/skills/lernapps-exercise-patterns/references/chemistry.md +16 -0
- package/dist/skills/lernapps-exercise-patterns/references/computer-science.md +13 -0
- package/dist/skills/lernapps-exercise-patterns/references/figures.md +10 -0
- package/dist/skills/lernapps-exercise-patterns/references/history.md +13 -0
- package/dist/skills/lernapps-exercise-patterns/references/mathematics.md +19 -0
- package/dist/skills/lernapps-exercise-patterns/references/page-structures.md +8 -0
- package/dist/skills/lernapps-exercise-patterns/references/physics.md +18 -0
- package/dist/skills/lernapps-exercise-patterns/references/success.md +28 -0
- package/dist/skills/lernapps-explainer/SKILL.md +33 -0
- package/dist/skills/lernapps-explainer/references/blocks.md +83 -0
- package/dist/skills/lernapps-explainer/references/components.md +66 -0
- package/dist/skills/lernapps-explainer/references/exercises.md +115 -0
- package/dist/skills/lernapps-explainer/references/rules.md +285 -0
- package/dist/skills/lernapps-explainer/references/runtime.md +79 -0
- package/dist/skills/lernapps-explainer/references/structure.md +24 -0
- package/dist/skills/lernapps-explainer-design/SKILL.md +57 -0
- package/dist/skills/lernapps-explainer-design/references/rules.md +75 -0
- package/dist/skills/lernapps-explainer-self-assessment/SKILL.md +93 -0
- package/dist/skills/lernapps-github/SKILL.md +102 -0
- package/dist/skills/lernapps-interactive/SKILL.md +141 -0
- package/dist/skills/lernapps-interactive/references/frame.md +30 -0
- package/dist/skills/lernapps-interactive-design/SKILL.md +58 -0
- package/dist/skills/lernapps-listing/SKILL.md +44 -0
- package/dist/skills/lernapps-listing/references/keeping-updated.md +33 -0
- package/dist/skills/lernapps-quiz/SKILL.md +100 -0
- package/dist/skills/lernapps-quiz-design/SKILL.md +48 -0
- package/dist/status-CXoQBgfU.mjs +76 -0
- package/dist/storage.mjs +113 -0
- package/generator/app/.agents/skills/app-content/SKILL.md +63 -0
- package/generator/app/.github/ISSUE_TEMPLATE/inhaltsfehler.yml +25 -0
- package/generator/app/.github/workflows/pages.yml +61 -0
- package/generator/app/LICENSE +21 -0
- package/generator/app/renovate.json +4 -0
- package/generator/architecture.ts +212 -0
- package/generator/create.ts +462 -0
- package/generator/init.ts +186 -0
- package/generator/update.ts +429 -0
- package/guidance/AGENTS.md +26 -0
- package/guidance/increment-template.md +194 -0
- package/guidance/plan-front-matter.v1.schema.json +36 -0
- package/guidance/plan-template.md +233 -0
- package/guidance/subagent-brief.md +25 -0
- package/guidance/workflow-rules.md +109 -0
- package/package.json +133 -4
- package/review/verdict.v1.schema.json +134 -0
- package/skills/archetypes/lernapps-explainer/SKILL.md +33 -0
- package/skills/archetypes/lernapps-explainer/references/blocks.md +83 -0
- package/skills/archetypes/lernapps-explainer/references/components.md +66 -0
- package/skills/archetypes/lernapps-explainer/references/exercises.md +115 -0
- package/skills/archetypes/lernapps-explainer/references/rules.md +285 -0
- package/skills/archetypes/lernapps-explainer/references/runtime.md +79 -0
- package/skills/archetypes/lernapps-explainer/references/structure.md +24 -0
- package/skills/archetypes/lernapps-explainer-design/SKILL.md +57 -0
- package/skills/archetypes/lernapps-explainer-design/references/rules.md +75 -0
- package/skills/archetypes/lernapps-explainer-self-assessment/SKILL.md +93 -0
- package/skills/archetypes/lernapps-interactive/SKILL.md +141 -0
- package/skills/archetypes/lernapps-interactive/references/frame.md +30 -0
- package/skills/archetypes/lernapps-interactive-design/SKILL.md +58 -0
- package/skills/archetypes/lernapps-quiz/SKILL.md +100 -0
- package/skills/archetypes/lernapps-quiz-design/SKILL.md +48 -0
- package/skills/content/lernapps-content-questions/SKILL.md +133 -0
- package/skills/content/lernapps-content-questions/references/question-types.md +69 -0
- package/skills/content/lernapps-content-research/SKILL.md +50 -0
- package/skills/content/lernapps-content-research/references/sources.md +16 -0
- package/skills/content/lernapps-exercise-patterns/SKILL.md +74 -0
- package/skills/content/lernapps-exercise-patterns/references/biology-geography.md +13 -0
- package/skills/content/lernapps-exercise-patterns/references/chemistry.md +16 -0
- package/skills/content/lernapps-exercise-patterns/references/computer-science.md +13 -0
- package/skills/content/lernapps-exercise-patterns/references/figures.md +10 -0
- package/skills/content/lernapps-exercise-patterns/references/history.md +13 -0
- package/skills/content/lernapps-exercise-patterns/references/mathematics.md +19 -0
- package/skills/content/lernapps-exercise-patterns/references/page-structures.md +8 -0
- package/skills/content/lernapps-exercise-patterns/references/physics.md +18 -0
- package/skills/content/lernapps-exercise-patterns/references/success.md +28 -0
- package/skills/process/lernapps-app/SKILL.md +49 -0
- package/skills/process/lernapps-commit/SKILL.md +39 -0
- package/skills/process/lernapps-content-growth/SKILL.md +33 -0
- package/skills/process/lernapps-github/SKILL.md +102 -0
- package/skills/process/lernapps-listing/SKILL.md +44 -0
- package/skills/process/lernapps-listing/references/keeping-updated.md +33 -0
- package/skills/tooling/lernapps-cli/SKILL.md +156 -0
- 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.
|