@arkvenai/cli 0.5.1

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 (135) hide show
  1. package/CHANGELOG.md +105 -0
  2. package/README.md +304 -0
  3. package/dist/agents.d.ts +11 -0
  4. package/dist/agents.d.ts.map +1 -0
  5. package/dist/agents.js +76 -0
  6. package/dist/agents.js.map +1 -0
  7. package/dist/auftrag.d.ts +3 -0
  8. package/dist/auftrag.d.ts.map +1 -0
  9. package/dist/auftrag.js +45 -0
  10. package/dist/auftrag.js.map +1 -0
  11. package/dist/bauplan.d.ts +15 -0
  12. package/dist/bauplan.d.ts.map +1 -0
  13. package/dist/bauplan.js +219 -0
  14. package/dist/bauplan.js.map +1 -0
  15. package/dist/befehle.d.ts +12 -0
  16. package/dist/befehle.d.ts.map +1 -0
  17. package/dist/befehle.js +77 -0
  18. package/dist/befehle.js.map +1 -0
  19. package/dist/befund.d.ts +21 -0
  20. package/dist/befund.d.ts.map +1 -0
  21. package/dist/befund.js +107 -0
  22. package/dist/befund.js.map +1 -0
  23. package/dist/codeAblage.d.ts +31 -0
  24. package/dist/codeAblage.d.ts.map +1 -0
  25. package/dist/codeAblage.js +80 -0
  26. package/dist/codeAblage.js.map +1 -0
  27. package/dist/deklaration.d.ts +3 -0
  28. package/dist/deklaration.d.ts.map +1 -0
  29. package/dist/deklaration.js +14 -0
  30. package/dist/deklaration.js.map +1 -0
  31. package/dist/diff.d.ts +10 -0
  32. package/dist/diff.d.ts.map +1 -0
  33. package/dist/diff.js +72 -0
  34. package/dist/diff.js.map +1 -0
  35. package/dist/erkennung.d.ts +26 -0
  36. package/dist/erkennung.d.ts.map +1 -0
  37. package/dist/erkennung.js +174 -0
  38. package/dist/erkennung.js.map +1 -0
  39. package/dist/fix.d.ts +26 -0
  40. package/dist/fix.d.ts.map +1 -0
  41. package/dist/fix.js +101 -0
  42. package/dist/fix.js.map +1 -0
  43. package/dist/geteilt/bauplan/form.d.ts +100 -0
  44. package/dist/geteilt/bauplan/form.d.ts.map +1 -0
  45. package/dist/geteilt/bauplan/form.js +21 -0
  46. package/dist/geteilt/bauplan/form.js.map +1 -0
  47. package/dist/geteilt/bauplan/index.d.ts +4 -0
  48. package/dist/geteilt/bauplan/index.d.ts.map +1 -0
  49. package/dist/geteilt/bauplan/index.js +4 -0
  50. package/dist/geteilt/bauplan/index.js.map +1 -0
  51. package/dist/geteilt/bauplan/lesen.d.ts +6 -0
  52. package/dist/geteilt/bauplan/lesen.d.ts.map +1 -0
  53. package/dist/geteilt/bauplan/lesen.js +344 -0
  54. package/dist/geteilt/bauplan/lesen.js.map +1 -0
  55. package/dist/geteilt/bauplan/schreiben.d.ts +3 -0
  56. package/dist/geteilt/bauplan/schreiben.d.ts.map +1 -0
  57. package/dist/geteilt/bauplan/schreiben.js +80 -0
  58. package/dist/geteilt/bauplan/schreiben.js.map +1 -0
  59. package/dist/index.d.ts +3 -0
  60. package/dist/index.d.ts.map +1 -0
  61. package/dist/index.js +352 -0
  62. package/dist/index.js.map +1 -0
  63. package/dist/init.d.ts +28 -0
  64. package/dist/init.d.ts.map +1 -0
  65. package/dist/init.js +324 -0
  66. package/dist/init.js.map +1 -0
  67. package/dist/login.d.ts +45 -0
  68. package/dist/login.d.ts.map +1 -0
  69. package/dist/login.js +162 -0
  70. package/dist/login.js.map +1 -0
  71. package/dist/mcp.d.ts +18 -0
  72. package/dist/mcp.d.ts.map +1 -0
  73. package/dist/mcp.js +115 -0
  74. package/dist/mcp.js.map +1 -0
  75. package/dist/neu.d.ts +17 -0
  76. package/dist/neu.d.ts.map +1 -0
  77. package/dist/neu.js +118 -0
  78. package/dist/neu.js.map +1 -0
  79. package/dist/npmrc.d.ts +9 -0
  80. package/dist/npmrc.d.ts.map +1 -0
  81. package/dist/npmrc.js +49 -0
  82. package/dist/npmrc.js.map +1 -0
  83. package/dist/projekte.d.ts +23 -0
  84. package/dist/projekte.d.ts.map +1 -0
  85. package/dist/projekte.js +82 -0
  86. package/dist/projekte.js.map +1 -0
  87. package/dist/pull.d.ts +15 -0
  88. package/dist/pull.d.ts.map +1 -0
  89. package/dist/pull.js +301 -0
  90. package/dist/pull.js.map +1 -0
  91. package/dist/push/bericht.d.ts +8 -0
  92. package/dist/push/bericht.d.ts.map +1 -0
  93. package/dist/push/bericht.js +85 -0
  94. package/dist/push/bericht.js.map +1 -0
  95. package/dist/push/form.d.ts +67 -0
  96. package/dist/push/form.d.ts.map +1 -0
  97. package/dist/push/form.js +6 -0
  98. package/dist/push/form.js.map +1 -0
  99. package/dist/push/medien.d.ts +7 -0
  100. package/dist/push/medien.d.ts.map +1 -0
  101. package/dist/push/medien.js +154 -0
  102. package/dist/push/medien.js.map +1 -0
  103. package/dist/push/sammeln.d.ts +34 -0
  104. package/dist/push/sammeln.d.ts.map +1 -0
  105. package/dist/push/sammeln.js +112 -0
  106. package/dist/push/sammeln.js.map +1 -0
  107. package/dist/push/verzeichnisse.d.ts +40 -0
  108. package/dist/push/verzeichnisse.d.ts.map +1 -0
  109. package/dist/push/verzeichnisse.js +158 -0
  110. package/dist/push/verzeichnisse.js.map +1 -0
  111. package/dist/push.d.ts +8 -0
  112. package/dist/push.d.ts.map +1 -0
  113. package/dist/push.js +306 -0
  114. package/dist/push.js.map +1 -0
  115. package/dist/starter.d.ts +4 -0
  116. package/dist/starter.d.ts.map +1 -0
  117. package/dist/starter.js +587 -0
  118. package/dist/starter.js.map +1 -0
  119. package/dist/tiefpruefung.d.ts +39 -0
  120. package/dist/tiefpruefung.d.ts.map +1 -0
  121. package/dist/tiefpruefung.js +56 -0
  122. package/dist/tiefpruefung.js.map +1 -0
  123. package/dist/vertrag.d.ts +6 -0
  124. package/dist/vertrag.d.ts.map +1 -0
  125. package/dist/vertrag.js +267 -0
  126. package/dist/vertrag.js.map +1 -0
  127. package/dist/vertragSpaet.d.ts +4 -0
  128. package/dist/vertragSpaet.d.ts.map +1 -0
  129. package/dist/vertragSpaet.js +158 -0
  130. package/dist/vertragSpaet.js.map +1 -0
  131. package/dist/vorlagen.d.ts +7 -0
  132. package/dist/vorlagen.d.ts.map +1 -0
  133. package/dist/vorlagen.js +83 -0
  134. package/dist/vorlagen.js.map +1 -0
  135. package/package.json +65 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,105 @@
1
+ # Änderungen
2
+
3
+ ## 0.5.1 - 2026-08-26
4
+
5
+ ### Geändert
6
+
7
+ - **README und Paket-Beschreibung sagen jetzt zuerst, was zu tun ist.** Oben stehen die zwei
8
+ Wege als nummerierte Schritte: `login` → `pull` → ändern → `push` → `push --deploy` für eine
9
+ App, die es in Arkven schon gibt, und `login` → `init` → `push` → `push --deploy` für ein
10
+ Projekt vom eigenen Rechner. Die Befehlsteile darunter erklären die Schalter, nicht mehr den
11
+ Einstieg.
12
+ - **`arkven help` zeigt denselben Rundlauf** vor der Befehlsliste.
13
+ - Zwei veraltete Aussagen sind aus der README verschwunden: „angekündigt und noch nicht
14
+ enthalten: `mcp`" (`arkven mcp` gibt es seit 0.5.0) und „die Gates der Plattform laufen hier
15
+ nicht mit" (`check --tief` und `push` fahren sie).
16
+
17
+ ## 0.5.0 — 2026-08-25
18
+
19
+ ### Neu
20
+
21
+ - **`arkven pull` braucht keinen vorherigen `push` mehr.** Kennt der Ordner noch kein Projekt,
22
+ zeigt `pull` die Projekte deiner Teams und fragt, welches gemeint ist. `--projekt=<kennung>`
23
+ beantwortet die Frage vorweg. Ohne Terminal wird nicht geraten: die Liste wird ausgegeben und
24
+ der Schalter genannt.
25
+
26
+ Vorher las `pull` die Kennung aus `arkven.json`, und dorthin schrieb sie nur `push`. Wer seine
27
+ App **in** Arkven gebaut hat, haette also erst pushen muessen, um ziehen zu duerfen, und ein
28
+ `push` aus einem leeren Ordner ersetzt die lebende App durch nichts. Der Rueckweg braucht
29
+ keinen Hinweg.
30
+
31
+ - **Das Layout kommt aus dem Projekt.** Nach der Auswahl traegt `pull` die `arkven.json` des
32
+ Projekts nach und legt die darin genannten Ordner an, bevor er ablegt. Ein leeres Verzeichnis
33
+ bekommt damit den Baum, den ein spaeterer `push` wieder erwartet, statt eines flachen.
34
+
35
+ ### Behoben
36
+
37
+ - **Die Deklaration landete im falschen Ordner.** `push` holt `arkven.json`,
38
+ `arkven/bauplan.json`, `arkven/auftrag.md` und `arkven/mails/*.md` aus der Projektwurzel;
39
+ `pull` legte sie in den Frontend-Ordner. In einem echten Projekt (487 Dateien) lagen dadurch
40
+ ein Bauplan und vier Mail-Vorlagen doppelt, mit verschiedenem Inhalt, und der naechste `push`
41
+ haette die gezogene Fassung an dieser Stelle nicht wieder eingesammelt. Jetzt gilt beidseitig
42
+ dieselbe Grenze.
43
+
44
+ ### Bekannt und noch offen
45
+
46
+ - **Der Selbstabgleich am Ende von `npm run veroeffentlichen` misst die zweite Tuer nicht.** Er
47
+ ruft das Packument ohne Ausweis ab; GitHub Packages antwortet darauf nicht, und der Lauf liest
48
+ das als „keine Fassung da". Nach einem erfolgreichen Upload meldet er deshalb trotzdem einen
49
+ Fehlschlag.
50
+
51
+ - **Dokumente kommen nicht mit.** `pull` meldet dazu „dieser Zugang deckt den Bereich Dokumente
52
+ nicht ab". Der Server lehnt in Wahrheit ab, weil der Aufruf ohne Team-Angabe geht. Der Rest des
53
+ Laufs ist davon unberuehrt und vollstaendig geschrieben.
54
+ - **Bauplan und Mail-Vorlagen haben zwei Quellen** (Deklaration und Code-Stand). Sie kollidieren
55
+ jetzt sichtbar in der Vorschau, statt still auseinanderzulaufen; der Code-Stand gewinnt.
56
+
57
+ ## 0.4.0 — 2026-08-03
58
+
59
+ Diese Fassung entstand beim ersten echten Live-Gang eines mitgebrachten Projekts. Jeder Punkt unten
60
+ ist ein gemessener Fehlschlag, kein Wunsch.
61
+
62
+ ### Neu
63
+
64
+ - **Bilder, Videos und Schriften reisen mit.** Vorher liess `push` sie weg (Binaerdateien und alles
65
+ ueber 1 MB) und sagte das auch — und die App ging mit kaputten Bildern live. Sie gehen jetzt einen
66
+ eigenen Weg, einzeln, und nur was sich geaendert hat.
67
+ - **`arkven pull`** — der Rueckweg. Holt Bauplan und Auftrag aus Arkven ins Projekt. Zeigt erst, was
68
+ sich aendern wuerde, dann schreibt es.
69
+ - **`arkven check --tief`** — die ECHTEN Gates der Plattform laufen mit, dieselbe Pruefung wie beim
70
+ Ausrollen. Nicht nachgebaut: der Baum geht an Arkven, dort laeuft `verifyBackend`.
71
+ - **`push` faehrt sie ebenfalls.** Ein blockierender Punkt haelt die Uebertragung an, BEVOR eine
72
+ Datei reist.
73
+ - **Bauplan und Auftrag im Repo** (`arkven/bauplan.json`, `arkven/auftrag.md`). Sie reisen mit und
74
+ erscheinen im Cockpit; `check` prueft sie lokal, bevor sie reisen.
75
+ - **Eigene Mail-Vorlagen** (`arkven/mails/<key>.md`) — nur die geaenderten. Der Plattform-Standard
76
+ bleibt in Arkven.
77
+ - **`braucht`** in `arkven.json`: welche Dienste das Projekt benoetigt. Ergaenzt die Messung am Code,
78
+ ersetzt sie nicht.
79
+ - **Die Anker werden geprueft** — `arkven/anker-fehlt`, `anker-doppelt`, `anker-unbekannt`. Sie
80
+ beantworten „warum steht im Cockpit 0 von 9", bevor jemand fragen muss: mit Screen-Name, Adresse
81
+ und der exakten Kennung, die ins Wurzelelement gehoert. Die Kennungen kommen aus Arkven, sie werden
82
+ nicht nachgerechnet.
83
+ - **`arkven fix` setzt sie auch.** Anker halten nichts auf, deshalb fielen sie vorher aus dem
84
+ Agenten-Auftrag heraus — `fix` konnte genau das nicht beheben, wofuer die Regeln geschrieben
85
+ wurden. Sie stehen jetzt im Auftrag, getrennt von den blockierenden Punkten, samt dem Fallstrick:
86
+ gibt die Komponente ein Fragment zurueck, braucht der Traeger `display: contents`.
87
+ - **`arkven/mail-unbekannt`** — ein Tippfehler im Dateinamen erzeugte bisher eine Vorlage, die
88
+ niemand je verschickt. Sie lag im Repo, sah gepflegt aus, und die echte blieb auf dem
89
+ Plattform-Standard. Der Vorschlag rechnet echte Aehnlichkeit; ab zwei Zeichen Unterschied wird die
90
+ Liste genannt statt geraten.
91
+ - **`--sarif`** — dieselben Befunde in der Form, die GitHub Code-Scanning, VS Code und CI schon
92
+ lesen. Damit erscheint ein Befund an der Zeile im Pull-Request. `ungeprueft` wird dabei NICHT zu
93
+ einem kleinen Mangel verkleinert, sondern steht als `kind: open` da: gelaufen, kein Urteil.
94
+
95
+ ### Behoben
96
+
97
+ - `push --deploy` tat nichts, wenn es nichts zu uebertragen gab — genau der haeufigste Fall nach
98
+ einem gescheiterten Deploy.
99
+ - Das Ausrollen scheiterte mit 401, obwohl die Uebertragung mit demselben Token gelang.
100
+
101
+ ### Hinweis
102
+
103
+ Der Bauplan bestimmt, was im Cockpit als „gebaut" gilt. Damit ein Screen zaehlt, traegt sein
104
+ Wurzelelement `data-arkven-screen="scr-N"`. Ohne diesen Anker bleibt er offen, auch wenn er laengst
105
+ funktioniert.
package/README.md ADDED
@@ -0,0 +1,304 @@
1
+ # @arkvenai/cli
2
+
3
+ Dein Arkven-Projekt auf diesem Rechner: anmelden, holen, ändern, zurückstellen, online stellen.
4
+
5
+ ```bash
6
+ npm install -g @arkvenai/cli
7
+ arkven login
8
+ ```
9
+
10
+ Ohne Installation läuft jeder Befehl auch als `npx @arkvenai/cli <befehl>`.
11
+
12
+ ---
13
+
14
+ ## Weg 1: eine App, die es in Arkven schon gibt
15
+
16
+ Der Normalfall. Du hast im Cockpit gebaut und willst lokal weiterarbeiten.
17
+
18
+ ```bash
19
+ arkven login # 1. einmal pro Rechner
20
+ mkdir meine-app && cd meine-app
21
+ arkven pull # 2. zeigt deine Projekte, du wählst die Nummer
22
+ # 3. Änderungen machen: Editor, Agent, wie du willst
23
+ arkven push # 4. Vorschau ansehen und bestätigen
24
+ arkven push --deploy # 5. online stellen
25
+ ```
26
+
27
+ **Schritt 2 sieht so aus:**
28
+
29
+ ```
30
+ $ arkven pull
31
+
32
+ Dieser Ordner kennt noch kein Projekt. Deine Projekte:
33
+
34
+ 1 Mein Laden live zuletzt 25.08.2026
35
+ sess_cf86fd83-6f68-45fa-8c9d-0399a3eb6caf
36
+ 2 Touren-Planer zuletzt 20.08.2026
37
+ sess_9rxa9vk
38
+
39
+ Welches Projekt? [1-2] >
40
+ ```
41
+
42
+ Danach steht die Kennung in `arkven.json`, und jeder weitere `pull` und `push` in diesem Ordner
43
+ meint dieses Projekt. Ohne Rückfrage: `arkven pull --projekt=<kennung>`.
44
+
45
+ Von da an ist der Rundlauf immer derselbe: **ändern, `arkven push`, `arkven push --deploy`.**
46
+
47
+ ---
48
+
49
+ ## Weg 2: ein Projekt, das auf deinem Rechner entstanden ist
50
+
51
+ ```bash
52
+ arkven login # 1. einmal pro Rechner
53
+ cd mein-projekt
54
+ arkven init # 2. schreibt arkven.json
55
+ arkven push --name="Mein Tool" # 3. legt das Projekt in Arkven an
56
+ arkven push --deploy # 4. online stellen
57
+ ```
58
+
59
+ Ab dem zweiten Mal genügen `arkven push` und `arkven push --deploy`: Name und Kennung stehen dann in
60
+ `arkven.json`.
61
+
62
+ Ganz von vorn: `arkven new meine-app` legt ein Projekt an, das die Anforderungen des Containers
63
+ schon erfüllt.
64
+
65
+ ---
66
+
67
+ ## Die Befehle
68
+
69
+ | Befehl | Was er tut |
70
+ |---|---|
71
+ | `arkven login` | Meldet diesen Rechner an deinem Arkven-Konto an |
72
+ | `arkven pull` | Holt ein Projekt aus Arkven in diesen Ordner |
73
+ | `arkven push` | Stellt deinen Stand zurück nach Arkven |
74
+ | `arkven push --deploy` | Rollt danach aus und zeigt den Lauf mit |
75
+ | `arkven init` | Erkennt, was dein Projekt mitbringt, und schreibt `arkven.json` |
76
+ | `arkven new <name>` | Legt ein neues Projekt an, das den Container-Vertrag schon erfüllt |
77
+ | `arkven check` | Prüft dein Projekt, so oft du willst |
78
+ | `arkven fix` | Übergibt die Befunde dem lokalen Claude Code und misst danach erneut |
79
+ | `arkven mcp` | Meldet `check`, `auftrag` und `pull` als MCP-Werkzeuge an |
80
+
81
+ `arkven help` zeigt dieselbe Übersicht mit allen Schaltern.
82
+
83
+ ---
84
+
85
+ ## `arkven login`
86
+
87
+ ```bash
88
+ arkven login # Standard: https://app.arkven.de
89
+ arkven login --server=<adresse> # eigene Installation
90
+ arkven login --einfuegen # wenn dieser Rechner den Server nicht erreicht
91
+ ```
92
+
93
+ Der Browser bestätigt, das Token landet im Benutzerverzeichnis (`~/.arkven/zugang.json`), nie im
94
+ Projekt. Die Standard-Adresse ist `app.arkven.de` und nicht `arkven.de`: unter der bloßen Domain
95
+ liegt die Marketing-Seite, die Anwendung samt API liegt unter `app.`.
96
+
97
+ `login` richtet auch den Paketbezug ein, danach funktioniert `npm install @arkvenai/base` in diesem
98
+ Projekt.
99
+
100
+ ## `arkven pull`
101
+
102
+ ```bash
103
+ arkven pull # zeigt deine Projekte und fragt, welches
104
+ arkven pull --projekt=<kennung> # ohne Rückfrage, für Skripte
105
+ arkven pull --yes # bestätigt die Vorschau ungesehen
106
+ arkven pull --nur-deklaration # ohne Code: Bauplan, Auftrag, Nachweis, Mail-Vorlagen
107
+ ```
108
+
109
+ Ein leeres Verzeichnis genügt. Du musst vorher **nicht** gepusht haben. Sitzt niemand am Terminal,
110
+ wird nicht geraten, sondern die Liste ausgegeben und `--projekt=` genannt.
111
+
112
+ Wo Server und Oberfläche liegen, sagt das Projekt selbst: `pull` trägt seine `arkven.json` nach,
113
+ bevor er ablegt, und legt die genannten Ordner an. Damit bekommst du den Baum, den ein späterer
114
+ `push` wieder erwartet.
115
+
116
+ **Es wird nie etwas gelöscht.** Dateien, die nur bei dir liegen, bleiben unberührt. Was
117
+ überschrieben würde, steht einzeln in der Vorschau, bevor irgendetwas passiert.
118
+
119
+ ## `arkven push`
120
+
121
+ ```bash
122
+ arkven push # zeigt die Vorschau und fragt
123
+ arkven push --deploy # danach ausrollen und den Lauf mitlesen
124
+ arkven push --yes # bestätigt sie ungesehen (CI, Agenten)
125
+ arkven push --name="Mein Tool" # der Anzeigename beim ersten Mal
126
+ ```
127
+
128
+ Die Reihenfolge ist die Aussage:
129
+
130
+ 1. **Geprüft wird zuerst.** Was den Container-Vertrag nicht hält, wird benannt und nicht
131
+ übertragen. Die Gates der Plattform laufen dabei mit, dieselbe Prüfung wie beim Ausrollen.
132
+ 2. **Gesammelt wird nur Quelltext.** Versteckte Einträge bleiben liegen, also auch `.env` und
133
+ `.git`: Zugangsdaten verlassen deinen Rechner nicht. Erzeugte Ordner (`node_modules`, `dist`,
134
+ `build`, `coverage`) ebenfalls nicht. Was ausgelassen wurde, sagt der Lauf mit Zahl.
135
+ 3. **Vorschau vor dem Schreiben.**
136
+
137
+ ```
138
+ Vorschau für „Rechnungstool" (sess_a8jan2i)
139
+
140
+ 14 neu (in deinem Verzeichnis, in Arkven noch nicht)
141
+ 3 aktualisiert (du hast sie geändert, Arkven nicht)
142
+ 84 unberuehrt (in Arkven ändert sich daran nichts)
143
+ ```
144
+
145
+ **Bei einem Konflikt bricht `push` ab und nennt die Dateien.** Es gibt bewusst kein `--force`, und
146
+ auch `--yes` löst keinen Konflikt auf: eine automatische Wahl würde eine der beiden Fassungen still
147
+ verlieren, und das sähe aus wie ein gelungener Push.
148
+
149
+ Ein Push löscht nichts, was nur Arkven kennt: der erzeugte Server bleibt stehen. Ein abgebrochener
150
+ Lauf (Strg-C, Netz weg) hinterlässt kein halbes Projekt, angelegt wird erst nach vollständiger
151
+ Übertragung.
152
+
153
+ `--deploy` ruft dieselbe Route wie die Oberfläche und mit derselben Rollenprüfung. Scheitert der
154
+ Lauf, steht die **erste** Fehlerzeile oben, und dein Code bleibt übertragen.
155
+
156
+ ### Der Name wird nicht geraten
157
+
158
+ Beim ersten Push heißt das Projekt so, wie `--name` es sagt; ohne die Angabe gilt der `name` aus
159
+ der `package.json` der Projektwurzel, danach der Name der Wurzel selbst. Sagt keiner davon etwas
160
+ über das Projekt (`server`, `app`, `src` …), wird gefragt. Gibt es kein Terminal, bricht der Lauf ab
161
+ und nennt `--name` als Weg. Aus einem Ordnernamen wurde schon einmal ein Projekt namens „server".
162
+
163
+ ### Zwei Teile: Server und Frontend in getrennten Ordnern
164
+
165
+ Arkven hält ein Projekt an **zwei** Orten, und sie haben verschiedene Aufgaben: aus dem
166
+ Frontend-Teil entstehen Vorschau und Frontend-Bau, der Server-Teil geht in den Container. Liegen
167
+ beide bei dir in eigenen Ordnern, sagt das `arkven.json`:
168
+
169
+ ```jsonc
170
+ {
171
+ "verzeichnisse": {
172
+ "server": "server", // geht in den Container
173
+ "frontend": "web" // wird die Vorschau
174
+ }
175
+ }
176
+ ```
177
+
178
+ Beide Angaben sind optional und relativ zur Projektwurzel. Ohne sie ist die Projektwurzel der eine
179
+ Baum. Mit der Angabe gilt:
180
+
181
+ - **Beide Bäume werden gesammelt**, jeder mit Pfaden relativ zu seinem Verzeichnis: aus
182
+ `web/src/App.tsx` wird `/src/App.tsx` in der App, aus `server/src/index.ts` wird `src/index.ts`
183
+ im Server-Quelltext. Der Bericht sagt vor dem Schreiben, welche Datei wohin geht.
184
+ - **Geprüft wird der Server-Teil**, nicht die Wurzel.
185
+ - **`arkven.json` reist mit dem Frontend-Teil.** Der Bau liest deine `mitgebracht`-Angaben dort;
186
+ ohne diesen Schritt käme deine eigene `tailwind.config.js` unter das Scaffold.
187
+ - **Was außerhalb beider Ordner liegt, kommt nicht mit** und wird beim Namen genannt. Braucht ein
188
+ Teil einen gemeinsamen `shared/`-Ordner, muss er innerhalb seines Verzeichnisses liegen.
189
+
190
+ Ein Verzeichnis, das es nicht gibt, bricht den Lauf ab, statt still auf „ein Baum" zurückzufallen:
191
+ genau dieser stille Rückfall hat am 2026-08-01 einen Express-Server in die Frontend-Vorschau
192
+ gelegt. Das Ergebnis war eine leere Seite und die Frage „wo ist mein Frontend?".
193
+
194
+ ## `arkven init`
195
+
196
+ `init` liest, was da ist (`package.json`, Lockfile, eigener Server, `drizzle/`-Historie,
197
+ Build-Setup) und schreibt **eine** Datei: `arkven.json`.
198
+
199
+ ```jsonc
200
+ {
201
+ "$schema": "https://app.arkven.de/schema/arkven.json",
202
+ "mitgebracht": {
203
+ "server": true, // Arkven ergänzt, es scaffoldet nicht
204
+ "frontendBuild": false, // tailwind/postcss/vite bleiben deine
205
+ "schema": true // deine Migrationen gewinnen
206
+ }
207
+ }
208
+ ```
209
+
210
+ **Was nicht sicher erkennbar ist, wird gefragt**, mit Vorschlag, nie geraten. Gibt es kein Terminal
211
+ (Skript, CI, Pipe), bleibt das Feld aus der Datei heraus und der Lauf sagt, welches und warum. Ein
212
+ geratenes `server: true` hieße später: Arkven ergänzt einen Server, den es nie gab.
213
+
214
+ **Was fehlt, kommt als Diff zum Bestätigen**, nie als stille Schreibaktion: eine
215
+ `schemaGate.ts`-Vorlage, `tsx`/`drizzle-kit` in den `dependencies`, `.gitignore`-Einträge.
216
+ `arkven init --apply` übernimmt die Datei-Vorschläge gesammelt. Alles, was Pakete aus dem Netz holt,
217
+ bleibt ein Befehl für dich.
218
+
219
+ Die Datei gehört dir. Steht ein Feld schon drin, bleibt es stehen, auch wenn die Messung etwas
220
+ anderes sagt; der Unterschied wird benannt statt überschrieben. Ein zweiter Lauf ändert nichts, was
221
+ der erste richtig gemacht hat, und formatiert deine `package.json` nicht um.
222
+
223
+ ## `arkven new`
224
+
225
+ ```bash
226
+ arkven new meine-app
227
+ cd meine-app && npm install
228
+ ```
229
+
230
+ Legt 15 Dateien an und misst danach selbst nach: **9 gehalten, 0 blockierend**, bevor die erste
231
+ eigene Zeile geschrieben ist.
232
+
233
+ | Was | Wo | Wogegen es hilft |
234
+ |---|---|---|
235
+ | Einstieg mit Härtungs-Prüfung beim Start | `src/index.ts` | Fällt ein Pflicht-Header beim Umbau heraus, bricht der Start ab, statt still ungehärtet zu laufen |
236
+ | Wächter gegen die laufende Datenbank | `src/schemaGate.ts` | Eine Migration kann mit Rückgabewert 0 enden, ohne dass das Schema steht |
237
+ | Eine Egress-Naht mit Host-Allowlist | `src/lib/egress.ts` | „Mit wem redet diese App?" hat genau eine Antwort |
238
+ | Härtung ohne Importe | `src/http/sicherheitsHeader.ts` | Läge sie im Einstieg, entstünde ein Import-Zyklus über die Middleware |
239
+ | Migration **und** Journal | `drizzle/` | Ohne Journal legt der Container das Schema neu an, statt zu migrieren |
240
+ | `tsx` und `drizzle-kit` in `dependencies` | `package.json` | Der Container installiert nur `dependencies` |
241
+
242
+ `arkven.json` entsteht dabei über dieselbe Erkennung wie bei `init`, nicht über eine zweite Regel.
243
+
244
+ **Es wird nie etwas überschrieben.** Liegt im Zielverzeichnis schon etwas, bricht der Lauf ab und
245
+ nennt beide Auswege (anderer Name oder `arkven init`). Ein leeres Verzeichnis darf er benutzen.
246
+
247
+ ## `arkven check`
248
+
249
+ ```bash
250
+ arkven check # lokal, in Sekunden
251
+ arkven check --tief # die Gates der Plattform laufen mit (braucht Anmeldung)
252
+ arkven check --json # stabile Regel-Kennungen, für Agenten
253
+ arkven check --sarif # SARIF 2.1.0 für GitHub Code-Scanning, VS Code und CI
254
+ ```
255
+
256
+ Jeder Befund nennt Datei, Regel und Ausweg. Geprüft wird:
257
+
258
+ | Regel | Was gilt |
259
+ |---|---|
260
+ | `arkven/ein-paket` | Das Verzeichnis ist ein Paket, kein Verbund aus mehreren |
261
+ | `arkven/einstieg` | `src/index.ts` ist der Einstiegspunkt |
262
+ | `arkven/port-aus-umgebung` | Der Port kommt aus `process.env.PORT` |
263
+ | `arkven/datenbank-aus-umgebung` | Die Verbindung kommt aus `process.env.DATABASE_URL` |
264
+ | `arkven/keine-workspaces` | Eine `package.json`, keine Workspace-Verweise |
265
+ | `arkven/importe-aufloesbar` | Jeder Import zeigt auf ein Paket, das im Container existiert |
266
+ | `arkven/laufzeit-tsx` · `arkven/laufzeit-drizzle-kit` | Beide stehen in `dependencies`, nicht in `devDependencies` |
267
+ | `arkven/schema-waechter` | `src/schemaGate.ts` prüft das Schema gegen die laufende Datenbank |
268
+
269
+ Dazu zwei Hinweise, die nicht blockieren: ein fehlendes Migrations-Journal
270
+ (`arkven/migrations-journal`) und fehlender Baustein-Bezug (`arkven/paketbezug`).
271
+
272
+ **Monorepos:** Zeigst du auf ein Verzeichnis mit mehreren Paketen, meldet der Lauf **eine** Sache
273
+ statt sieben: der Container macht genau ein Paket zur App, also ist erst zu klären, welches. Die
274
+ übrigen Punkte erscheinen als „nicht geprüft", nicht als verletzt. Der Ausweg nennt die Kandidaten.
275
+
276
+ ## `arkven fix`
277
+
278
+ ```bash
279
+ arkven fix # höchstens 3 Durchgänge, `--runden N` für mehr
280
+ arkven auftrag # gibt nur die Arbeitsanweisung aus, ohne etwas zu tun
281
+ ```
282
+
283
+ `fix` baut aus jedem blockierenden Befund einen Auftrag und übergibt ihn dem **lokal installierten
284
+ Claude Code** (dessen Konto, dessen Rechte, dessen Abrechnung, kein eigener Schlüssel). Danach misst
285
+ es erneut.
286
+
287
+ Die tragende Regel: **behoben ist nur, was der erneute Lauf misst.** Die Erfolgsmeldung des Agenten
288
+ zählt nichts. Bringt eine Runde keinen einzigen Punkt weiter, hört `fix` auf, statt dieselbe
289
+ Anweisung zu wiederholen. Es committet nichts und pusht nichts; die Änderungen liegen als `git diff`
290
+ zur Durchsicht. Ist kein `claude` installiert, sagt `fix` das und nennt den Weg.
291
+
292
+ ---
293
+
294
+ ## Rückgabewerte
295
+
296
+ | Befehl | `0` | `1` | `2` |
297
+ |---|---|---|---|
298
+ | `check` | alles gehalten | mindestens ein blockierender Punkt | nichts messbar |
299
+ | `init` | alles geklärt | etwas bleibt zu entscheiden | nichts messbar |
300
+ | `new` | angelegt und nachgemessen | abgebrochen, nichts angelegt | |
301
+ | `push` | übernommen | Befund oder Konflikt | nichts messbar |
302
+
303
+ `--json` liefert dieselben Befunde mit stabilen Regel-Kennungen, damit ein Agent ohne Textanalyse
304
+ handeln kann.
@@ -0,0 +1,11 @@
1
+ export declare const MARKE_START = "<!-- arkven:start \u00B7 dieser Block wird von `arkven init` gepflegt -->";
2
+ export declare const MARKE_START_ALT = "<!-- arkven:start \u2014 dieser Block wird von `arkven init` gepflegt -->";
3
+ export declare const MARKE_ENDE = "<!-- arkven:ende -->";
4
+ export interface AgentsLage {
5
+ eigenerServer: boolean;
6
+ eigenerFrontendBau: boolean;
7
+ eigenesSchema: boolean;
8
+ }
9
+ export declare function agentsBlock(lage: AgentsLage): string;
10
+ export declare function agentsNachher(vorher: string | undefined, lage: AgentsLage): string | undefined;
11
+ //# sourceMappingURL=agents.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../src/agents.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,WAAW,8EAAyE,CAAA;AAEjG,eAAO,MAAM,eAAe,8EAAyE,CAAA;AACrG,eAAO,MAAM,UAAU,yBAAyB,CAAA;AAEhD,MAAM,WAAW,UAAU;IAEzB,aAAa,EAAE,OAAO,CAAA;IAEtB,kBAAkB,EAAE,OAAO,CAAA;IAE3B,aAAa,EAAE,OAAO,CAAA;CACvB;AAsBD,wBAAgB,WAAW,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CA4CpD;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,SAAS,CAiB9F"}
package/dist/agents.js ADDED
@@ -0,0 +1,76 @@
1
+ export const MARKE_START = '<!-- arkven:start · dieser Block wird von `arkven init` gepflegt -->';
2
+ export const MARKE_START_ALT = '<!-- arkven:start — dieser Block wird von `arkven init` gepflegt -->';
3
+ export const MARKE_ENDE = '<!-- arkven:ende -->';
4
+ function herkunftsZeilen(lage) {
5
+ const zeilen = [];
6
+ zeilen.push(lage.eigenerServer
7
+ ? '- **Der Server gehört diesem Projekt.** Arkven erzeugt hier nichts nach und überschreibt nichts. Was im Server-Verzeichnis steht, hast du geschrieben.'
8
+ : '- **Den Server stellt Arkven.** Er wird bei jedem Ausrollen neu erzeugt. Änderungen daran gehen beim nächsten Lauf verloren, ohne Meldung.');
9
+ zeilen.push(lage.eigenerFrontendBau
10
+ ? '- **Den Frontend-Bau führt dieses Projekt selbst.** Deine Bau-Konfiguration bleibt unberührt.'
11
+ : '- **Den Frontend-Bau stellt Arkven** (vite). Eine eigene Bau-Konfiguration hier wirkt nicht.');
12
+ zeilen.push(lage.eigenesSchema
13
+ ? '- **Die Migrationen gehören diesem Projekt.** Sie gewinnen gegen erzeugte. `drizzle/meta/_journal.json` muss mitreisen, sonst läuft keine einzige SQL-Datei.'
14
+ : '- **Die Migrationen erzeugt Arkven** aus dem Schema. Handgeschriebenes SQL hier wird nicht ausgeführt.');
15
+ return zeilen;
16
+ }
17
+ export function agentsBlock(lage) {
18
+ return [
19
+ MARKE_START,
20
+ '',
21
+ '## Diese App läuft auf Arkven',
22
+ '',
23
+ 'Arkven baut die App in einen Container und prüft sie vor dem Veröffentlichen. Was diese Prüfung',
24
+ 'nicht besteht, geht nicht live. Die Regeln unten sind deshalb keine Empfehlungen.',
25
+ '',
26
+ '### Was dir gehört und was Arkven stellt',
27
+ '',
28
+ ...herkunftsZeilen(lage),
29
+ '',
30
+ '### Die Befehle',
31
+ '',
32
+ '```bash',
33
+ 'arkven check # prüft dieses Verzeichnis gegen den Container-Vertrag (kein Netz nötig)',
34
+ 'arkven check --json # dasselbe maschinenlesbar, mit stabilen Regel-Kennungen',
35
+ 'arkven check --tief # zusätzlich die echten Tore der Plattform (braucht `arkven login`)',
36
+ 'arkven push # zeigt erst, was passieren würde, und überträgt es dann',
37
+ '```',
38
+ '',
39
+ '`arkven check` ist die Abnahme. Wenn du eine Änderung für fertig hältst, ist sie es, sobald',
40
+ 'dieser Lauf grün ist, nicht vorher und nicht, weil sie plausibel aussieht.',
41
+ '',
42
+ '### Was du nicht anfassen darfst',
43
+ '',
44
+ '- **`.env`**: sie verlässt diesen Rechner nie und steht in keinem Push. Trage nichts hinein,',
45
+ ' was die App zum Laufen braucht; dafür gibt es die Umgebungsvariablen in Arkven.',
46
+ '- **`arkven/nachweis.md`**: ein gerechneter Bericht, keine Quelle. Er kommt beim Holen herunter',
47
+ ' und geht nie zurück. Ihn zu bearbeiten ändert nichts und täuscht einen Stand vor.',
48
+ '- **`arkven.spec.json`**: der Prüf-Vertrag. Arkven schreibt ihn fort. Wer einen Bereich baut,',
49
+ ' ohne ihn dort zu nennen, bekommt für ihn **keine** Prüfung: die Fläche geht ungeprüft live.',
50
+ '',
51
+ '### Zwei Fallstricke, die still bleiben',
52
+ '',
53
+ '1. **Eine Wahrheit, ein Pfad.** Lege keinen zweiten Speicher für dieselbe Sache an und keinen',
54
+ ' zweiten Weg, dieselbe Frage zu beantworten. Zwei Quellen laufen auseinander, und niemand',
55
+ ' merkt es, bis die Antworten sich widersprechen.',
56
+ '2. **Kein Zustand, der wie Erfolg aussieht.** Kein leerer `catch`, kein Vorgabewert für etwas,',
57
+ ' das nicht gemessen werden konnte. Was sich nicht messen lässt, wird gemeldet, nicht geraten.',
58
+ '',
59
+ MARKE_ENDE,
60
+ ].join('\n');
61
+ }
62
+ export function agentsNachher(vorher, lage) {
63
+ const block = agentsBlock(lage);
64
+ if (vorher === undefined) {
65
+ return ['# Hinweise für Agenten', '', block, ''].join('\n');
66
+ }
67
+ const start = vorher.includes(MARKE_START) ? vorher.indexOf(MARKE_START) : vorher.indexOf(MARKE_START_ALT);
68
+ const ende = vorher.indexOf(MARKE_ENDE);
69
+ if (start >= 0 && ende > start) {
70
+ const neu = vorher.slice(0, start) + block + vorher.slice(ende + MARKE_ENDE.length);
71
+ return neu === vorher ? undefined : neu;
72
+ }
73
+ const basis = vorher.endsWith('\n') || vorher === '' ? vorher : `${vorher}\n`;
74
+ return `${basis}\n${block}\n`;
75
+ }
76
+ //# sourceMappingURL=agents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agents.js","sourceRoot":"","sources":["../src/agents.ts"],"names":[],"mappings":"AACA,MAAM,CAAC,MAAM,WAAW,GAAG,sEAAsE,CAAA;AAEjG,MAAM,CAAC,MAAM,eAAe,GAAG,sEAAsE,CAAA;AACrG,MAAM,CAAC,MAAM,UAAU,GAAG,sBAAsB,CAAA;AAWhD,SAAS,eAAe,CAAC,IAAgB;IACvC,MAAM,MAAM,GAAa,EAAE,CAAA;IAC3B,MAAM,CAAC,IAAI,CACT,IAAI,CAAC,aAAa;QAChB,CAAC,CAAC,wJAAwJ;QAC1J,CAAC,CAAC,4IAA4I,CACjJ,CAAA;IACD,MAAM,CAAC,IAAI,CACT,IAAI,CAAC,kBAAkB;QACrB,CAAC,CAAC,+FAA+F;QACjG,CAAC,CAAC,8FAA8F,CACnG,CAAA;IACD,MAAM,CAAC,IAAI,CACT,IAAI,CAAC,aAAa;QAChB,CAAC,CAAC,8JAA8J;QAChK,CAAC,CAAC,wGAAwG,CAC7G,CAAA;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAgB;IAC1C,OAAO;QACL,WAAW;QACX,EAAE;QACF,+BAA+B;QAC/B,EAAE;QACF,iGAAiG;QACjG,mFAAmF;QACnF,EAAE;QACF,0CAA0C;QAC1C,EAAE;QACF,GAAG,eAAe,CAAC,IAAI,CAAC;QACxB,EAAE;QACF,iBAAiB;QACjB,EAAE;QACF,SAAS;QACT,gGAAgG;QAChG,gFAAgF;QAChF,2FAA2F;QAC3F,gFAAgF;QAChF,KAAK;QACL,EAAE;QACF,6FAA6F;QAC7F,4EAA4E;QAC5E,EAAE;QACF,kCAAkC;QAClC,EAAE;QACF,8FAA8F;QAC9F,mFAAmF;QACnF,iGAAiG;QACjG,qFAAqF;QACrF,+FAA+F;QAC/F,+FAA+F;QAC/F,EAAE;QACF,yCAAyC;QACzC,EAAE;QACF,+FAA+F;QAC/F,6FAA6F;QAC7F,oDAAoD;QACpD,gGAAgG;QAChG,iGAAiG;QACjG,EAAE;QACF,UAAU;KACX,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACd,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAA0B,EAAE,IAAgB;IACxE,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,CAAA;IAE/B,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,CAAC,wBAAwB,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC7D,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAAA;IAC1G,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;IAEvC,IAAI,KAAK,IAAI,CAAC,IAAI,IAAI,GAAG,KAAK,EAAE,CAAC;QAC/B,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,CAAA;QACnF,OAAO,GAAG,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAA;IACzC,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,CAAA;IAC7E,OAAO,GAAG,KAAK,KAAK,KAAK,IAAI,CAAA;AAC/B,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Ergebnis } from './befund.js';
2
+ export declare function baueAuftrag(e: Ergebnis): string;
3
+ //# sourceMappingURL=auftrag.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auftrag.d.ts","sourceRoot":"","sources":["../src/auftrag.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAE3C,wBAAgB,WAAW,CAAC,CAAC,EAAE,QAAQ,GAAG,MAAM,CA+C/C"}
@@ -0,0 +1,45 @@
1
+ import { fuerAgenten, fuerAgentenZusaetzlich } from './befund.js';
2
+ export function baueAuftrag(e) {
3
+ const zuTun = fuerAgenten(e.befunde);
4
+ const kuer = fuerAgentenZusaetzlich(e.befunde);
5
+ if (zuTun.length === 0 && kuer.length === 0)
6
+ return '';
7
+ const punkte = zuTun
8
+ .map((b, i) => {
9
+ const zeilen = [`${i + 1}. [${b.regel}]${b.ort ? ` (${b.ort})` : ''}`, ` Was gilt: ${b.titel}`, ` Ziel: ${b.ausweg}`];
10
+ return zeilen.join('\n');
11
+ })
12
+ .join('\n\n');
13
+ const kuerZeilen = kuer.map((b, i) => [`${i + 1}. [${b.regel}]${b.ort ? ` (${b.ort})` : ''}`, ` Was gilt: ${b.titel}`, ` Ziel: ${b.ausweg}`].join('\n'));
14
+ const kuerText = kuer.length
15
+ ? ['', '', `Außerdem ${kuer.length} Punkt(e), die NICHTS aufhalten und die App trotzdem besser machen:`, '', kuerZeilen.join('\n\n'), '', 'Diese zuletzt, nach den Punkten oben.'].join('\n')
16
+ : '';
17
+ if (zuTun.length === 0) {
18
+ return `Dieses Projekt läuft auf Arkven, und der Container-Vertrag hält.${kuerText}
19
+
20
+ Bitte arbeite die Punkte im Projektverzeichnis ab. Regeln für diese Arbeit:
21
+
22
+ - Ändere so wenig wie nötig. Kein Umbau, der über die genannten Punkte hinausgeht.
23
+ - Erhalte das Verhalten der Anwendung.
24
+ - Committe nichts und pushe nichts. Die Änderungen bleiben als Arbeitsstand stehen.
25
+ `;
26
+ }
27
+ return `Dieses Projekt soll auf Arkven laufen. Arkven baut jede App in einen Container, der
28
+ \`src/index.ts\` mit tsx startet, den Port über PORT und die Datenbank über DATABASE_URL
29
+ hereingibt, und nur die \`dependencies\` der Wurzel-package.json installiert.
30
+
31
+ Gegen diesen Vertrag halten ${zuTun.length} Punkt(e) nicht:
32
+
33
+ ${punkte}${kuerText}
34
+
35
+ Bitte behebe sie im Projektverzeichnis. Regeln für diese Arbeit:
36
+
37
+ - Ändere so wenig wie nötig. Kein Umbau, der über die genannten Punkte hinausgeht.
38
+ - Erhalte das Verhalten der Anwendung. Wo eine Umgebungsvariable neu gelesen wird, bleibt der
39
+ bisherige Wert der Rückfall für lokale Läufe.
40
+ - Committe nichts und pushe nichts. Die Änderungen bleiben als Arbeitsstand stehen.
41
+ - Wenn ein Punkt eine Entscheidung verlangt, die nur ein Mensch treffen kann, lass ihn liegen und
42
+ sage am Ende, welcher und warum.
43
+ - Behaupte am Ende NICHT, alles sei behoben. Das misst \`arkven check\` gleich selbst.`;
44
+ }
45
+ //# sourceMappingURL=auftrag.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auftrag.js","sourceRoot":"","sources":["../src/auftrag.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAA;AAGjE,MAAM,UAAU,WAAW,CAAC,CAAW;IACrC,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA;IACpC,MAAM,IAAI,GAAG,sBAAsB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA;IAC9C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAA;IAEtD,MAAM,MAAM,GAAG,KAAK;SACjB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACZ,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,gBAAgB,CAAC,CAAC,KAAK,EAAE,EAAE,YAAY,CAAC,CAAC,MAAM,EAAE,CAAC,CAAA;QACzH,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC1B,CAAC,CAAC;SACD,IAAI,CAAC,MAAM,CAAC,CAAA;IAEf,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACnC,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,gBAAgB,CAAC,CAAC,KAAK,EAAE,EAAE,YAAY,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CACtH,CAAA;IACD,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM;QAC1B,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,YAAY,IAAI,CAAC,MAAM,qEAAqE,EAAE,EAAE,EAAE,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,uCAAuC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAC7L,CAAC,CAAC,EAAE,CAAA;IAEN,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,mEAAmE,QAAQ;;;;;;;CAOrF,CAAA;IACC,CAAC;IAED,OAAO;;;;8BAIqB,KAAK,CAAC,MAAM;;EAExC,MAAM,GAAG,QAAQ;;;;;;;;;;uFAUoE,CAAA;AACvF,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { Befund } from './befund.js';
2
+ import { BAUPLAN_DATEI, AUFTRAG_DATEI } from './geteilt/bauplan/index.js';
3
+ export { BAUPLAN_DATEI, AUFTRAG_DATEI };
4
+ export declare function pruefeBauplan(wurzel: string): Befund[];
5
+ export declare function pruefeBraucht(wurzel: string, braucht: Record<string, boolean>, teile: string[]): Befund[];
6
+ export declare function pruefeMailArten(wurzel: string, arten: readonly string[]): Befund[];
7
+ export declare function pruefeAnker(dateien: ReadonlyArray<{
8
+ pfad: string;
9
+ inhalt: string;
10
+ }>, screens: ReadonlyArray<{
11
+ id: string;
12
+ name: string;
13
+ slug?: string;
14
+ }>): Befund[];
15
+ //# sourceMappingURL=bauplan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bauplan.d.ts","sourceRoot":"","sources":["../src/bauplan.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,EAAkC,aAAa,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAEzG,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,CAAA;AAEvC,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CA6BtD;AA+CD,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAsBzG;AA+BD,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CA0BlF;AAED,wBAAgB,WAAW,CACzB,OAAO,EAAE,aAAa,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,EACxD,OAAO,EAAE,aAAa,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GAClE,MAAM,EAAE,CAyDV"}