@llm4ts/shell 0.5.0 → 0.6.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 (168) hide show
  1. package/dist/Cli.d.ts +2 -2
  2. package/dist/Cli.d.ts.map +1 -1
  3. package/dist/Cli.js +8 -4
  4. package/dist/Cli.js.map +1 -1
  5. package/dist/FlowCatalog.d.ts.map +1 -1
  6. package/dist/FlowCatalog.js +6 -2
  7. package/dist/FlowCatalog.js.map +1 -1
  8. package/flows/fixtures/scaffolds/kafka-streams-service/README.md +12 -0
  9. package/flows/fixtures/scaffolds/kafka-streams-service/pom.xml +49 -0
  10. package/flows/fixtures/scaffolds/kafka-streams-service/scripts/replay.sh +10 -0
  11. package/flows/fixtures/scaffolds/kafka-streams-service/src/main/java/com/meridian/scaffold/Application.java +29 -0
  12. package/flows/fixtures/scaffolds/kafka-streams-service/src/test/java/com/meridian/scaffold/ApplicationTests.java +21 -0
  13. package/flows/fixtures/scaffolds/kafka-streams-service/src/test/resources/features/.gitkeep +0 -0
  14. package/flows/fixtures/scaffolds/nextjs-spa/README.md +6 -0
  15. package/flows/fixtures/scaffolds/nextjs-spa/app/layout.js +11 -0
  16. package/flows/fixtures/scaffolds/nextjs-spa/app/page.js +7 -0
  17. package/flows/fixtures/scaffolds/nextjs-spa/docs/specs/.gitkeep +0 -0
  18. package/flows/fixtures/scaffolds/nextjs-spa/features/.gitkeep +0 -0
  19. package/flows/fixtures/scaffolds/nextjs-spa/next.config.js +7 -0
  20. package/flows/fixtures/scaffolds/nextjs-spa/package.json +15 -0
  21. package/flows/fixtures/scaffolds/nextjs-spa/tests/smoke.test.js +6 -0
  22. package/flows/fixtures/scaffolds/spring-bff/README.md +9 -0
  23. package/flows/fixtures/scaffolds/spring-bff/frontend/app/layout.js +11 -0
  24. package/flows/fixtures/scaffolds/spring-bff/frontend/app/page.js +7 -0
  25. package/flows/fixtures/scaffolds/spring-bff/frontend/next.config.js +7 -0
  26. package/flows/fixtures/scaffolds/spring-bff/frontend/package.json +15 -0
  27. package/flows/fixtures/scaffolds/spring-bff/frontend/tests/smoke.test.js +6 -0
  28. package/flows/fixtures/scaffolds/spring-bff/pom.xml +57 -0
  29. package/flows/fixtures/scaffolds/spring-bff/scripts/test.sh +6 -0
  30. package/flows/fixtures/scaffolds/spring-bff/src/main/java/com/meridian/bff/Application.java +12 -0
  31. package/flows/fixtures/scaffolds/spring-bff/src/main/resources/application.yaml +12 -0
  32. package/flows/fixtures/scaffolds/spring-bff/src/test/java/com/meridian/bff/ApplicationTests.java +12 -0
  33. package/flows/fixtures/scaffolds/spring-bff/src/test/resources/features/.gitkeep +0 -0
  34. package/flows/fixtures/scaffolds/spring-boot-service/README.md +7 -0
  35. package/flows/fixtures/scaffolds/spring-boot-service/pom.xml +53 -0
  36. package/flows/fixtures/scaffolds/spring-boot-service/scripts/replay.sh +9 -0
  37. package/flows/fixtures/scaffolds/spring-boot-service/src/main/java/com/meridian/scaffold/Application.java +12 -0
  38. package/flows/fixtures/scaffolds/spring-boot-service/src/main/resources/application.yaml +12 -0
  39. package/flows/fixtures/scaffolds/spring-boot-service/src/test/java/com/meridian/scaffold/ApplicationTests.java +12 -0
  40. package/flows/fixtures/scaffolds/spring-boot-service/src/test/resources/features/.gitkeep +0 -0
  41. package/flows/implement.js +29 -0
  42. package/flows/issue-pr.js +71 -0
  43. package/flows/judge-suite.js +48 -0
  44. package/flows/local.js +40 -0
  45. package/flows/modernize-bench.js +263 -0
  46. package/flows/modernize-extract.js +454 -0
  47. package/flows/modernize-implement.js +249 -0
  48. package/flows/modernize-review.js +237 -0
  49. package/flows/modernize-seed.js +189 -0
  50. package/flows/modernize-survey.js +0 -0
  51. package/flows/modernize-verify.js +435 -0
  52. package/flows/packs/ace-integration/lessons.md +6 -0
  53. package/flows/packs/ace-integration/pack.md +29 -0
  54. package/flows/packs/ace-integration/prompts/analysis.md +21 -0
  55. package/flows/packs/ace-integration/prompts/bdd.md +13 -0
  56. package/flows/packs/ace-integration/prompts/implement.md +17 -0
  57. package/flows/packs/ace-integration/prompts/plan.md +12 -0
  58. package/flows/packs/ace-integration/prompts/review.md +17 -0
  59. package/flows/packs/ace-integration/prompts/spec.md +29 -0
  60. package/flows/packs/ace-integration/reviewers/routing-fidelity.md +19 -0
  61. package/flows/packs/ace-integration/reviewers/traceability.md +13 -0
  62. package/flows/packs/ace-kafka/lessons.md +6 -0
  63. package/flows/packs/ace-kafka/pack.md +36 -0
  64. package/flows/packs/ace-kafka/prompts/analysis.md +21 -0
  65. package/flows/packs/ace-kafka/prompts/bdd.md +13 -0
  66. package/flows/packs/ace-kafka/prompts/implement.md +34 -0
  67. package/flows/packs/ace-kafka/prompts/plan.md +12 -0
  68. package/flows/packs/ace-kafka/prompts/review.md +17 -0
  69. package/flows/packs/ace-kafka/prompts/spec.md +31 -0
  70. package/flows/packs/ace-kafka/prompts/vectors.md +21 -0
  71. package/flows/packs/ace-kafka/reviewers/event-contracts.md +9 -0
  72. package/flows/packs/ace-kafka/reviewers/routing-fidelity.md +19 -0
  73. package/flows/packs/ace-kafka/reviewers/traceability.md +13 -0
  74. package/flows/packs/cobol-kafka/lessons.md +3 -0
  75. package/flows/packs/cobol-kafka/pack.md +51 -0
  76. package/flows/packs/cobol-kafka/patterns/PAT-STREAM-001-record-to-event.md +7 -0
  77. package/flows/packs/cobol-kafka/patterns/PAT-STREAM-002-job-step-topology.md +6 -0
  78. package/flows/packs/cobol-kafka/patterns/PAT-STREAM-003-checkpoint-idempotence.md +7 -0
  79. package/flows/packs/cobol-kafka/patterns/PAT-STREAM-004-eod-totals-window.md +7 -0
  80. package/flows/packs/cobol-kafka/patterns/PAT-STREAM-005-reject-topic.md +6 -0
  81. package/flows/packs/cobol-kafka/patterns/PAT-STREAM-006-keyed-state-store.md +7 -0
  82. package/flows/packs/cobol-kafka/patterns/PAT-STREAM-007-outbox.md +7 -0
  83. package/flows/packs/cobol-kafka/patterns/PAT-STREAM-008-partition-key.md +7 -0
  84. package/flows/packs/cobol-kafka/patterns/PAT-STREAM-009-batch-window-cutoff.md +7 -0
  85. package/flows/packs/cobol-kafka/patterns/PAT-STREAM-010-replay-backfill.md +7 -0
  86. package/flows/packs/cobol-kafka/prompts/analysis.md +23 -0
  87. package/flows/packs/cobol-kafka/prompts/bdd.md +15 -0
  88. package/flows/packs/cobol-kafka/prompts/implement.md +47 -0
  89. package/flows/packs/cobol-kafka/prompts/plan.md +13 -0
  90. package/flows/packs/cobol-kafka/prompts/review.md +17 -0
  91. package/flows/packs/cobol-kafka/prompts/spec.md +28 -0
  92. package/flows/packs/cobol-kafka/prompts/vectors.md +21 -0
  93. package/flows/packs/cobol-kafka/reviewers/cobol-fidelity.md +16 -0
  94. package/flows/packs/cobol-kafka/reviewers/pattern-conformance.md +10 -0
  95. package/flows/packs/cobol-kafka/reviewers/traceability.md +13 -0
  96. package/flows/packs/cobol-springboot/lessons.md +3 -0
  97. package/flows/packs/cobol-springboot/pack.md +51 -0
  98. package/flows/packs/cobol-springboot/prompts/analysis.md +23 -0
  99. package/flows/packs/cobol-springboot/prompts/bdd.md +15 -0
  100. package/flows/packs/cobol-springboot/prompts/implement.md +31 -0
  101. package/flows/packs/cobol-springboot/prompts/plan.md +13 -0
  102. package/flows/packs/cobol-springboot/prompts/review.md +17 -0
  103. package/flows/packs/cobol-springboot/prompts/spec.md +28 -0
  104. package/flows/packs/cobol-springboot/prompts/vectors.md +22 -0
  105. package/flows/packs/cobol-springboot/reviewers/cobol-fidelity.md +16 -0
  106. package/flows/packs/cobol-springboot/reviewers/pattern-conformance.md +10 -0
  107. package/flows/packs/cobol-springboot/reviewers/traceability.md +13 -0
  108. package/flows/packs/jsp-bff-nextjs/lessons.md +6 -0
  109. package/flows/packs/jsp-bff-nextjs/pack.md +30 -0
  110. package/flows/packs/jsp-bff-nextjs/prompts/analysis.md +20 -0
  111. package/flows/packs/jsp-bff-nextjs/prompts/bdd.md +10 -0
  112. package/flows/packs/jsp-bff-nextjs/prompts/implement.md +17 -0
  113. package/flows/packs/jsp-bff-nextjs/prompts/plan.md +12 -0
  114. package/flows/packs/jsp-bff-nextjs/prompts/review.md +16 -0
  115. package/flows/packs/jsp-bff-nextjs/prompts/spec.md +27 -0
  116. package/flows/packs/jsp-bff-nextjs/reviewers/bff-boundary.md +18 -0
  117. package/flows/packs/jsp-bff-nextjs/reviewers/traceability.md +13 -0
  118. package/flows/packs/jsp-nextjs/lessons.md +6 -0
  119. package/flows/packs/jsp-nextjs/pack.md +29 -0
  120. package/flows/packs/jsp-nextjs/prompts/analysis.md +21 -0
  121. package/flows/packs/jsp-nextjs/prompts/bdd.md +12 -0
  122. package/flows/packs/jsp-nextjs/prompts/implement.md +17 -0
  123. package/flows/packs/jsp-nextjs/prompts/plan.md +14 -0
  124. package/flows/packs/jsp-nextjs/prompts/review.md +16 -0
  125. package/flows/packs/jsp-nextjs/prompts/spec.md +26 -0
  126. package/flows/packs/jsp-nextjs/reviewers/traceability.md +13 -0
  127. package/flows/packs/jsp-nextjs/reviewers/ux-fidelity.md +16 -0
  128. package/flows/patterns/PAT-COBOL-001-comp3-money.md +7 -0
  129. package/flows/patterns/PAT-COBOL-002-redefines.md +7 -0
  130. package/flows/patterns/PAT-COBOL-003-88-levels.md +7 -0
  131. package/flows/patterns/PAT-COBOL-004-perform-thru.md +7 -0
  132. package/flows/patterns/PAT-COBOL-005-file-status.md +6 -0
  133. package/flows/patterns/PAT-COBOL-006-sqlcode.md +7 -0
  134. package/flows/patterns/PAT-COBOL-007-validation-order.md +7 -0
  135. package/flows/patterns/PAT-COBOL-008-zoned-decimal.md +6 -0
  136. package/flows/patterns/PAT-COBOL-009-occurs-table.md +6 -0
  137. package/flows/patterns/PAT-COBOL-010-copybook-record.md +7 -0
  138. package/flows/patterns/PAT-COBOL-011-batch-counters.md +6 -0
  139. package/flows/patterns/PAT-COBOL-012-commit-frequency.md +7 -0
  140. package/flows/patterns/PAT-COBOL-013-abend.md +6 -0
  141. package/flows/patterns/PAT-COBOL-014-reject-file.md +6 -0
  142. package/flows/patterns/PAT-COBOL-015-accept-date.md +6 -0
  143. package/flows/patterns/PAT-COBOL-016-string-building.md +6 -0
  144. package/flows/patterns/PAT-COBOL-017-cursor-loop.md +6 -0
  145. package/flows/patterns/PAT-COBOL-018-yn-switches.md +6 -0
  146. package/flows/patterns/PAT-COBOL-019-shared-accumulators.md +6 -0
  147. package/flows/patterns/PAT-COBOL-020-tiered-fees.md +7 -0
  148. package/flows/patterns/PAT-COBOL-021-overdraft-floor.md +7 -0
  149. package/flows/patterns/PAT-COBOL-022-jcl-job-net.md +6 -0
  150. package/flows/patterns/PAT-COBOL-023-sort-step.md +6 -0
  151. package/flows/patterns/PAT-COBOL-024-fixed-width-records.md +6 -0
  152. package/flows/patterns/PAT-COBOL-025-audit-rows.md +6 -0
  153. package/flows/sdd.js +114 -0
  154. package/package.json +5 -4
  155. package/src/Cli.ts +13 -4
  156. package/src/FlowCatalog.ts +8 -2
  157. package/flows/implement.ts +0 -38
  158. package/flows/issue-pr.ts +0 -108
  159. package/flows/judge-suite.ts +0 -63
  160. package/flows/local.ts +0 -59
  161. package/flows/modernize-bench.ts +0 -362
  162. package/flows/modernize-extract.ts +0 -633
  163. package/flows/modernize-implement.ts +0 -333
  164. package/flows/modernize-review.ts +0 -343
  165. package/flows/modernize-seed.ts +0 -259
  166. package/flows/modernize-survey.ts +0 -0
  167. package/flows/modernize-verify.ts +0 -611
  168. package/flows/sdd.ts +0 -181
@@ -1,259 +0,0 @@
1
- // Legacy modernization phase 2: seed the target repository from the APPROVED spec pack.
2
- //
3
- // Runs rooted at the TARGET repository (`--repo <target>`), reading the spec
4
- // pack out of the legacy repository (`LLM4TS_LEGACY_REPO`). Deliberately
5
- // deterministic — no LLM calls:
6
- //
7
- // 1. Refuses to run until a human has flipped `- [x] Approved` in the legacy
8
- // repo's docs/modernization/README.md (extract writes it unchecked).
9
- // 2. An empty target gets the pack's scaffold; a non-empty one is used as-is.
10
- // 3. Specs, traceability, mapping, and rules.txt land in the pack's
11
- // specs-dir; .feature files land in its features-dir. Legacy SOURCE never
12
- // crosses — that is the clean-room wall the later phases enforce.
13
- // 4. The proposed plan is re-parsed (a hard validation) and materialized at
14
- // docs/modernization/plan.md for modernize-implement to resume.
15
- // 5. The provenance manifest (docs/modernization/provenance.json) records the
16
- // clean-room receipt: spec file hashes, gate verdict digests, the pack,
17
- // the llm4ts version, the extraction seats, and LLM4TS_APPROVER when set.
18
- //
19
- // Run: LLM4TS_LEGACY_REPO=~/estates/meridian-legacy \
20
- // modernize-seed --repo ~/services/meridian-transfers
21
- import { join } from "node:path"
22
- import * as Effect from "effect/Effect"
23
- import * as Schema from "effect/Schema"
24
- import { FlowAborted, PersistenceError } from "@llm4ts/flow/FlowError"
25
- import { Info } from "@llm4ts/flow/FlowEvents"
26
- import { packageVersion } from "@llm4ts/flow/Package"
27
- import { loadPack } from "@llm4ts/flow/Pack"
28
- import { parsePlan } from "@llm4ts/flow/Plan"
29
- import { stage } from "@llm4ts/flow/PlanExecution"
30
- import { Provenance, makeProvenanceStore } from "@llm4ts/flow/Provenance"
31
- import { matchingFiles } from "@llm4ts/flow/SpecChecks"
32
- import type { WorkspaceShape } from "@llm4ts/flow/Workspace"
33
- import { requireApproval } from "@llm4ts/modernize/Approval"
34
- import { coderFromEnv } from "@llm4ts/runner/Connectors"
35
- import { resolveFlowInput } from "@llm4ts/runner/FlowArgs"
36
- import { runFlowMain, runNode } from "@llm4ts/runner/FlowRunner"
37
- import { nodePlainFileStore } from "@llm4ts/runner/NodePlainFileStore"
38
- import { makeNodeWorkspace } from "@llm4ts/runner/NodeWorkspace"
39
-
40
- const ModDir = "docs/modernization"
41
- const skipped = new Set([".git", "target", "node_modules", "dist"])
42
-
43
- const Seats = Schema.Record(Schema.String, Schema.String)
44
-
45
- const isLitter = (path: string): boolean => path.split("/").some((segment) => skipped.has(segment))
46
-
47
- /** Copies every text file under `from` into `into`, skipping build and VCS litter. */
48
- const copyTree = Effect.fn("modernize-seed.copyTree")(function* (
49
- source: WorkspaceShape,
50
- target: WorkspaceShape,
51
- from: string,
52
- into: string
53
- ) {
54
- const paths = yield* source.discover(`${from}/**`).pipe(Effect.orElseSucceed(() => []))
55
- let copied = 0
56
- for (const path of paths) {
57
- if (isLitter(path)) {
58
- continue
59
- }
60
- const contents = yield* source.read(path).pipe(Effect.orElseSucceed(() => undefined))
61
- if (contents === undefined) {
62
- continue
63
- }
64
- yield* target.write(join(into, path.slice(from.length + 1)), contents)
65
- copied += 1
66
- }
67
- return copied
68
- })
69
-
70
- /** Copies one file when it exists; false when the source is absent. */
71
- const copyFile = Effect.fn("modernize-seed.copyFile")(function* (
72
- source: WorkspaceShape,
73
- target: WorkspaceShape,
74
- from: string,
75
- into: string
76
- ) {
77
- const contents = yield* source.read(from).pipe(Effect.orElseSucceed(() => undefined))
78
- if (contents === undefined) {
79
- return false
80
- }
81
- yield* target.write(into, contents)
82
- return true
83
- })
84
-
85
- const program = Effect.gen(function* () {
86
- const input = yield* resolveFlowInput("Seed the target repository from the approved spec pack")
87
- const packDir = process.env.LLM4TS_PACK ?? "packs/cobol-springboot"
88
- const legacyRepo = process.env.LLM4TS_LEGACY_REPO?.trim()
89
- const files = nodePlainFileStore
90
-
91
- yield* runNode(
92
- {
93
- workDir: input.workDir,
94
- workspace: input.workspace,
95
- userPrompt: input.prompt,
96
- // This phase makes no model call; the seat is wired only because the
97
- // runner composes one context shape for every flow.
98
- coder: coderFromEnv(process.env),
99
- environment: process.env
100
- },
101
- (context) =>
102
- Effect.gen(function* () {
103
- if (legacyRepo === undefined || legacyRepo.length === 0) {
104
- return yield* FlowAborted.make({
105
- message:
106
- "set LLM4TS_LEGACY_REPO to the legacy repository holding the approved spec pack"
107
- })
108
- }
109
- const launchWorkspace = yield* makeNodeWorkspace(input.workspace)
110
- const legacy = yield* makeNodeWorkspace(legacyRepo)
111
- const target = yield* makeNodeWorkspace(input.workDir)
112
- const pack = yield* stage(context.events, "pack", loadPack(launchWorkspace, packDir))
113
- const specPackRoot = join(legacyRepo, ModDir)
114
-
115
- yield* stage(
116
- context.events,
117
- "approval",
118
- requireApproval(files, join(specPackRoot, "README.md"))
119
- )
120
-
121
- yield* stage(
122
- context.events,
123
- "scaffold",
124
- Effect.gen(function* () {
125
- const existing = (yield* target.discover().pipe(Effect.orElseSucceed(() => []))).filter(
126
- (path) => !path.startsWith(".git/")
127
- )
128
- if (existing.length > 0) {
129
- yield* context.events.publish(
130
- Info.make({ message: "target repo is not empty — using it as-is" })
131
- )
132
- return
133
- }
134
- if (pack.scaffold === undefined) {
135
- return yield* FlowAborted.make({
136
- message: `target repo is empty and pack '${pack.name}' has no scaffold`
137
- })
138
- }
139
- // The scaffold path is relative to the pack directory.
140
- const scaffoldRoot = join(pack.dir, pack.scaffold)
141
- const scaffold = yield* makeNodeWorkspace(join(input.workspace, scaffoldRoot))
142
- const paths = (yield* scaffold.discover()).filter((path) => !isLitter(path))
143
- for (const path of paths) {
144
- yield* target.write(path, yield* scaffold.read(path))
145
- }
146
- yield* context.events.publish(
147
- Info.make({ message: `scaffolded ${paths.length} file(s) from ${scaffoldRoot}` })
148
- )
149
- })
150
- )
151
-
152
- const seeded = yield* stage(
153
- context.events,
154
- "seed",
155
- Effect.gen(function* () {
156
- const specs = yield* copyTree(legacy, target, `${ModDir}/specs`, pack.specsDir)
157
- // A spec pack that contributes no specs means the wrong legacy repo,
158
- // or an extraction that never wrote any. Seeding an empty target and
159
- // reporting success would push that discovery minutes downstream.
160
- if (specs === 0) {
161
- return yield* FlowAborted.make({
162
- message:
163
- `no specs found under ${legacyRepo}/${ModDir}/specs — ` +
164
- "check LLM4TS_LEGACY_REPO and that extraction wrote its spec pack"
165
- })
166
- }
167
- const features = yield* copyTree(legacy, target, `${ModDir}/features`, pack.featuresDir)
168
- for (const index of ["traceability.md", "mapping.md", "rules.txt"]) {
169
- yield* copyFile(legacy, target, `${ModDir}/${index}`, join(pack.specsDir, index))
170
- }
171
- return specs + features
172
- })
173
- )
174
-
175
- const plan = yield* stage(
176
- context.events,
177
- "plan",
178
- Effect.gen(function* () {
179
- const text = yield* files.read(join(specPackRoot, "plan.md"))
180
- if (text === undefined) {
181
- return yield* PersistenceError.make({
182
- message: "spec pack has no plan.md — did extraction clear its gate?"
183
- })
184
- }
185
- // Re-parsing is the hard validation: a malformed plan fails here,
186
- // not minutes into the implementation phase.
187
- const parsed = yield* parsePlan(text)
188
- yield* target.write(`${ModDir}/plan.md`, parsed.render)
189
- return parsed
190
- })
191
- )
192
-
193
- yield* stage(
194
- context.events,
195
- "provenance",
196
- Effect.gen(function* () {
197
- const provenance = makeProvenanceStore(files)
198
- const specFiles = yield* matchingFiles(target, `^${pack.specsDir}/.*\\.md$`)
199
- const specs = yield* provenance.hashFiles(input.workDir, specFiles)
200
- const gateFiles = yield* matchingFiles(legacy, `^${ModDir}/gate/.*\\.json$`).pipe(
201
- Effect.orElseSucceed(() => [])
202
- )
203
- const verdicts = yield* provenance.hashFiles(legacyRepo, gateFiles)
204
- const seatsText = yield* files
205
- .read(join(specPackRoot, "seats.json"))
206
- .pipe(Effect.orElseSucceed(() => undefined))
207
- // A pre-seats spec pack, or a malformed sidecar, degrades to no
208
- // recorded seats rather than failing the seed.
209
- const seats =
210
- seatsText === undefined
211
- ? {}
212
- : yield* Effect.try({
213
- try: () => Schema.decodeUnknownSync(Schema.fromJsonString(Seats))(seatsText),
214
- catch: () => undefined
215
- }).pipe(Effect.orElseSucceed((): Readonly<Record<string, string>> => ({})))
216
- const approver = process.env.LLM4TS_APPROVER?.trim()
217
- yield* provenance.write(
218
- join(input.workDir, ModDir, "provenance.json"),
219
- Provenance.make({
220
- schema: 1,
221
- pack: pack.name,
222
- llm4tsVersion: packageVersion,
223
- createdAt: new Date().toISOString(),
224
- ...(approver === undefined || approver.length === 0
225
- ? {}
226
- : { approvedBy: approver }),
227
- seats,
228
- specs,
229
- gateVerdicts: Object.fromEntries(
230
- Object.entries(verdicts).map(([path, hash]) => [
231
- (path.split("/").at(-1) ?? path).replace(/\.json$/, ""),
232
- hash
233
- ])
234
- ),
235
- fixSpecs: []
236
- })
237
- )
238
- })
239
- )
240
-
241
- yield* stage(
242
- context.events,
243
- "commit",
244
- context.git
245
- .commitAll(
246
- `modernize(${pack.name}): seed specs, features, plan, and provenance (${seeded} file(s))`
247
- )
248
- .pipe(Effect.asVoid)
249
- )
250
- yield* context.events.publish(
251
- Info.make({
252
- message: `target seeded (plan ${plan.epicId}) — run modernize-implement with the same --repo`
253
- })
254
- )
255
- })
256
- )
257
- })
258
-
259
- runFlowMain(program)
Binary file