@rsaglobaltech/specgate 0.17.10 → 0.19.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 (211) hide show
  1. package/CHANGELOG.md +133 -1
  2. package/README.md +4 -4
  3. package/bin/specgate.ts +48 -47
  4. package/dist/bin/specgate.js +48 -46
  5. package/dist/bin/specgate.js.map +1 -1
  6. package/dist/packages/core/src/application/ArchiveChangeUseCase.js +6 -2
  7. package/dist/packages/core/src/application/ArchiveChangeUseCase.js.map +1 -1
  8. package/dist/packages/core/src/application/ValidateProjectUseCase.js +1 -1
  9. package/dist/packages/core/src/application/ValidateProjectUseCase.js.map +1 -1
  10. package/dist/packages/core/src/domain/ChangeTemplates.js +1 -1
  11. package/dist/packages/core/src/domain/DeltaFeature.js +3 -3
  12. package/dist/packages/core/src/domain/DeltaFeature.js.map +1 -1
  13. package/dist/packages/core/src/domain/DerivedMatrix.js +9 -9
  14. package/dist/packages/core/src/domain/DerivedMatrix.js.map +1 -1
  15. package/dist/packages/core/src/domain/DoneVerification.js +1 -1
  16. package/dist/packages/core/src/domain/DoneVerification.js.map +1 -1
  17. package/dist/packages/core/src/domain/DraftChecklist.js +38 -6
  18. package/dist/packages/core/src/domain/DraftChecklist.js.map +1 -1
  19. package/dist/packages/core/src/domain/GherkinTags.js +12 -12
  20. package/dist/packages/core/src/domain/GherkinTags.js.map +1 -1
  21. package/dist/packages/core/src/domain/InboundChange.js +1 -1
  22. package/dist/packages/core/src/domain/InboundChange.js.map +1 -1
  23. package/dist/packages/core/src/domain/Language.js +2 -2
  24. package/dist/packages/core/src/domain/Language.js.map +1 -1
  25. package/dist/packages/core/src/domain/Lockfile.js +7 -7
  26. package/dist/packages/core/src/domain/Lockfile.js.map +1 -1
  27. package/dist/packages/core/src/domain/PackDelta.js +1 -1
  28. package/dist/packages/core/src/domain/PackDelta.js.map +1 -1
  29. package/dist/packages/core/src/domain/PackSpec.js +21 -2
  30. package/dist/packages/core/src/domain/PackSpec.js.map +1 -1
  31. package/dist/packages/core/src/domain/RequirementGraph.js +2 -2
  32. package/dist/packages/core/src/domain/SpecParser.js +6 -6
  33. package/dist/packages/core/src/domain/SpecParser.js.map +1 -1
  34. package/dist/packages/core/src/domain/TraceMerge.js +4 -4
  35. package/dist/packages/core/src/domain/TraceMerge.js.map +1 -1
  36. package/dist/packages/core/src/domain/TraceabilityFormat.js +4 -4
  37. package/dist/packages/core/src/domain/TraceabilityFormat.js.map +1 -1
  38. package/dist/packages/core/src/domain/ValueAnnotations.js +8 -8
  39. package/dist/packages/core/src/domain/ValueAnnotations.js.map +1 -1
  40. package/dist/packages/core/src/domain/WriteScope.js +3 -3
  41. package/dist/packages/core/src/domain/WriteScope.js.map +1 -1
  42. package/dist/packages/core/src/infrastructure/ChangeWorkspace.js +2 -2
  43. package/dist/packages/core/src/infrastructure/ChangeWorkspace.js.map +1 -1
  44. package/dist/packages/core/src/infrastructure/ConsoleReporter.js +2 -2
  45. package/dist/packages/core/src/infrastructure/ConsoleReporter.js.map +1 -1
  46. package/dist/packages/core/src/infrastructure/DerivedMatrixSources.js +2 -2
  47. package/dist/packages/core/src/infrastructure/DerivedMatrixSources.js.map +1 -1
  48. package/dist/packages/core/src/infrastructure/DiskLanguageRepository.js +4 -4
  49. package/dist/packages/core/src/infrastructure/DiskLanguageRepository.js.map +1 -1
  50. package/dist/packages/core/src/infrastructure/DiskPackDeltaRepository.js +1 -1
  51. package/dist/packages/core/src/infrastructure/DiskPackDeltaRepository.js.map +1 -1
  52. package/dist/packages/core/src/infrastructure/GitContributionStager.js +3 -3
  53. package/dist/packages/core/src/infrastructure/GitContributionStager.js.map +1 -1
  54. package/dist/packages/core/src/infrastructure/RemotePackResolver.js +5 -5
  55. package/dist/packages/core/src/infrastructure/RemotePackResolver.js.map +1 -1
  56. package/dist/packages/core/test/unit/delta-feature.test.js +3 -3
  57. package/dist/packages/core/test/unit/delta-feature.test.js.map +1 -1
  58. package/dist/packages/core/test/unit/derived-matrix.test.js +8 -8
  59. package/dist/packages/core/test/unit/derived-matrix.test.js.map +1 -1
  60. package/dist/packages/core/test/unit/gherkin-tags.test.js +8 -8
  61. package/dist/packages/core/test/unit/gherkin-tags.test.js.map +1 -1
  62. package/dist/packages/core/test/unit/inbound-change.test.js +1 -1
  63. package/dist/packages/core/test/unit/inbound-change.test.js.map +1 -1
  64. package/dist/packages/core/test/unit/matrix-dependencies.test.js +5 -5
  65. package/dist/packages/core/test/unit/matrix-dependencies.test.js.map +1 -1
  66. package/dist/packages/core/test/unit/new-requirement.test.js +1 -1
  67. package/dist/packages/core/test/unit/new-requirement.test.js.map +1 -1
  68. package/dist/packages/core/test/unit/value-annotations.test.js +5 -5
  69. package/dist/packages/core/test/unit/value-annotations.test.js.map +1 -1
  70. package/dist/packages/core/test/unit/write-scope-status.test.js +5 -5
  71. package/dist/packages/core/test/unit/write-scope-status.test.js.map +1 -1
  72. package/dist/packages/mcp-spec-driven/src/native-tools.js +3 -3
  73. package/dist/packages/mcp-spec-driven/src/native-tools.js.map +1 -1
  74. package/dist/packages/mcp-spec-driven/src/server.js +1 -7
  75. package/dist/packages/mcp-spec-driven/src/server.js.map +1 -1
  76. package/dist/packages/mcp-spec-driven/src/tools.js +4 -4
  77. package/dist/packages/mcp-spec-driven/src/tools.js.map +1 -1
  78. package/dist/scripts/agents/commands.js +18 -0
  79. package/dist/scripts/agents/commands.js.map +1 -1
  80. package/dist/scripts/agents/init.js +35 -48
  81. package/dist/scripts/agents/init.js.map +1 -1
  82. package/dist/scripts/alm/cli.js +37 -3
  83. package/dist/scripts/alm/cli.js.map +1 -1
  84. package/dist/scripts/alm/providers/index.js +1 -1
  85. package/dist/scripts/alm/providers/index.js.map +1 -1
  86. package/dist/scripts/change/instructions.js +2 -2
  87. package/dist/scripts/change/instructions.js.map +1 -1
  88. package/dist/scripts/cli/commands/alm/PullCommand.js +1 -1
  89. package/dist/scripts/cli/commands/alm/PullCommand.js.map +1 -1
  90. package/dist/scripts/cli/commands/change/ChangeCommand.js +106 -101
  91. package/dist/scripts/cli/commands/change/ChangeCommand.js.map +1 -1
  92. package/dist/scripts/cli/commands/config/CiInitCommand.js +6 -4
  93. package/dist/scripts/cli/commands/config/CiInitCommand.js.map +1 -1
  94. package/dist/scripts/cli/commands/config/CompletionCommand.js +10 -10
  95. package/dist/scripts/cli/commands/config/CompletionCommand.js.map +1 -1
  96. package/dist/scripts/cli/commands/config/ConfigInitCommand.js +11 -19
  97. package/dist/scripts/cli/commands/config/ConfigInitCommand.js.map +1 -1
  98. package/dist/scripts/cli/commands/config/ConfigSetCommand.js +5 -1
  99. package/dist/scripts/cli/commands/config/ConfigSetCommand.js.map +1 -1
  100. package/dist/scripts/cli/commands/harness/RunCommand.js +73 -38
  101. package/dist/scripts/cli/commands/harness/RunCommand.js.map +1 -1
  102. package/dist/scripts/cli/commands/pack/BundlePackCommand.js +36 -2
  103. package/dist/scripts/cli/commands/pack/BundlePackCommand.js.map +1 -1
  104. package/dist/scripts/cli/commands/pack/ExpandDomainPackCommand.js +2 -2
  105. package/dist/scripts/cli/commands/pack/ExpandDomainPackCommand.js.map +1 -1
  106. package/dist/scripts/cli/commands/pack/InferPackCommand.js +2 -1
  107. package/dist/scripts/cli/commands/pack/InferPackCommand.js.map +1 -1
  108. package/dist/scripts/cli/commands/pack/InitPackCommand.js +23 -32
  109. package/dist/scripts/cli/commands/pack/InitPackCommand.js.map +1 -1
  110. package/dist/scripts/cli/commands/pack/LintPackCommand.js +4 -3
  111. package/dist/scripts/cli/commands/pack/LintPackCommand.js.map +1 -1
  112. package/dist/scripts/cli/commands/project/AdoptCommand.js +17 -4
  113. package/dist/scripts/cli/commands/project/AdoptCommand.js.map +1 -1
  114. package/dist/scripts/cli/commands/project/InitProjectCommand.js +8 -5
  115. package/dist/scripts/cli/commands/project/InitProjectCommand.js.map +1 -1
  116. package/dist/scripts/cli/commands/project/OnboardCommand.js +17 -24
  117. package/dist/scripts/cli/commands/project/OnboardCommand.js.map +1 -1
  118. package/dist/scripts/cli/commands/project/UpdateCommand.js +23 -43
  119. package/dist/scripts/cli/commands/project/UpdateCommand.js.map +1 -1
  120. package/dist/scripts/cli/commands/quality/CheckCommand.js +30 -17
  121. package/dist/scripts/cli/commands/quality/CheckCommand.js.map +1 -1
  122. package/dist/scripts/cli/commands/quality/DoctorCommand.js +27 -10
  123. package/dist/scripts/cli/commands/quality/DoctorCommand.js.map +1 -1
  124. package/dist/scripts/cli/commands/quality/FixCommand.js +24 -29
  125. package/dist/scripts/cli/commands/quality/FixCommand.js.map +1 -1
  126. package/dist/scripts/cli/commands/quality/ReportCommand.js +8 -4
  127. package/dist/scripts/cli/commands/quality/ReportCommand.js.map +1 -1
  128. package/dist/scripts/cli/commands/quality/ValidateSpecsCommand.js +69 -16
  129. package/dist/scripts/cli/commands/quality/ValidateSpecsCommand.js.map +1 -1
  130. package/dist/scripts/cli/commands/spec/DoneCommand.js +37 -23
  131. package/dist/scripts/cli/commands/spec/DoneCommand.js.map +1 -1
  132. package/dist/scripts/cli/commands/spec/DraftCommand.js +724 -26
  133. package/dist/scripts/cli/commands/spec/DraftCommand.js.map +1 -1
  134. package/dist/scripts/cli/commands/spec/MatrixCommand.js +24 -27
  135. package/dist/scripts/cli/commands/spec/MatrixCommand.js.map +1 -1
  136. package/dist/scripts/cli/commands/spec/NewCommand.js +11 -14
  137. package/dist/scripts/cli/commands/spec/NewCommand.js.map +1 -1
  138. package/dist/scripts/cli/commands/spec/PetCommand.js +102 -0
  139. package/dist/scripts/cli/commands/spec/PetCommand.js.map +1 -0
  140. package/dist/scripts/cli/commands/spec/PlanCommand.js +34 -39
  141. package/dist/scripts/cli/commands/spec/PlanCommand.js.map +1 -1
  142. package/dist/scripts/cli/commands/spec/ReqCommand.js +51 -58
  143. package/dist/scripts/cli/commands/spec/ReqCommand.js.map +1 -1
  144. package/dist/scripts/cli/commands/spec/StatusCommand.js +99 -45
  145. package/dist/scripts/cli/commands/spec/StatusCommand.js.map +1 -1
  146. package/dist/scripts/cli/commands/spec/StudioCommand.js +16 -24
  147. package/dist/scripts/cli/commands/spec/StudioCommand.js.map +1 -1
  148. package/dist/scripts/cli/commands/specops/ContributeCommand.js +24 -32
  149. package/dist/scripts/cli/commands/specops/ContributeCommand.js.map +1 -1
  150. package/dist/scripts/cli/commands/specops/DiffCommand.js +3 -2
  151. package/dist/scripts/cli/commands/specops/DiffCommand.js.map +1 -1
  152. package/dist/scripts/cli/commands/specops/SyncCommand.js +4 -3
  153. package/dist/scripts/cli/commands/specops/SyncCommand.js.map +1 -1
  154. package/dist/scripts/docs/blocks.js +4 -4
  155. package/dist/scripts/docs/blocks.js.map +1 -1
  156. package/dist/scripts/docs/build-site.js +24 -9
  157. package/dist/scripts/docs/build-site.js.map +1 -1
  158. package/dist/scripts/docs/components.js +24 -24
  159. package/dist/scripts/docs/components.js.map +1 -1
  160. package/dist/scripts/docs/journey-storyboard.js +358 -0
  161. package/dist/scripts/docs/journey-storyboard.js.map +1 -0
  162. package/dist/scripts/docs/nav.js +120 -23
  163. package/dist/scripts/docs/nav.js.map +1 -1
  164. package/dist/scripts/docs/record-journey.js +376 -0
  165. package/dist/scripts/docs/record-journey.js.map +1 -0
  166. package/dist/scripts/docs/record-terminal.js +260 -43
  167. package/dist/scripts/docs/record-terminal.js.map +1 -1
  168. package/dist/scripts/docs/terminal-storyboard.js +151 -2
  169. package/dist/scripts/docs/terminal-storyboard.js.map +1 -1
  170. package/dist/scripts/draft/brief-setup.js +367 -0
  171. package/dist/scripts/draft/brief-setup.js.map +1 -0
  172. package/dist/scripts/draft/confined-agent.js +194 -0
  173. package/dist/scripts/draft/confined-agent.js.map +1 -0
  174. package/dist/scripts/draft/drafting-guide.js +147 -0
  175. package/dist/scripts/draft/drafting-guide.js.map +1 -0
  176. package/dist/scripts/gen_mcp_tools.js +4 -4
  177. package/dist/scripts/gen_mcp_tools.js.map +1 -1
  178. package/dist/scripts/harness/init.js +25 -16
  179. package/dist/scripts/harness/init.js.map +1 -1
  180. package/dist/scripts/harness/report.js +39 -40
  181. package/dist/scripts/harness/report.js.map +1 -1
  182. package/dist/scripts/harness/worktree-lock.js +2 -2
  183. package/dist/scripts/harness/worktree-lock.js.map +1 -1
  184. package/dist/scripts/lib/command.js +3 -2
  185. package/dist/scripts/lib/command.js.map +1 -1
  186. package/dist/scripts/lib/derived-writes.js +1 -1
  187. package/dist/scripts/lib/diagnostics.js +12 -16
  188. package/dist/scripts/lib/diagnostics.js.map +1 -1
  189. package/dist/scripts/lib/placeholders.js +4 -4
  190. package/dist/scripts/lib/placeholders.js.map +1 -1
  191. package/dist/scripts/lib/surface.js +33 -15
  192. package/dist/scripts/lib/surface.js.map +1 -1
  193. package/dist/scripts/lib/ui.js +356 -0
  194. package/dist/scripts/lib/ui.js.map +1 -0
  195. package/dist/scripts/merge-traceability.js +3 -3
  196. package/dist/scripts/pet/pet.js +331 -0
  197. package/dist/scripts/pet/pet.js.map +1 -0
  198. package/dist/scripts/pet.js +10 -0
  199. package/dist/scripts/pet.js.map +1 -0
  200. package/dist/scripts/plugin/gate-hook.js +1 -1
  201. package/dist/scripts/plugin/gate-hook.js.map +1 -1
  202. package/dist/scripts/schema/registry.js +2 -2
  203. package/dist/scripts/schema/registry.js.map +1 -1
  204. package/dist/scripts/specops/add.js +23 -32
  205. package/dist/scripts/specops/add.js.map +1 -1
  206. package/dist/scripts/specops/lock.js +4 -4
  207. package/dist/scripts/specops/lock.js.map +1 -1
  208. package/dist/scripts/specops/remove.js +15 -24
  209. package/dist/scripts/specops/remove.js.map +1 -1
  210. package/package.json +3 -2
  211. package/templates/base/AGENTS.md.tpl +6 -0
@@ -0,0 +1,376 @@
1
+ "use strict";
2
+ /**
3
+ * The getting-started journeys, recorded from the real CLI into the pages.
4
+ *
5
+ * `docs/start/*.md` shows what each command prints. Typed by hand, that output
6
+ * would be wrong by the next release — and a newcomer comparing their terminal
7
+ * with the page is exactly the reader who notices. So every output block is
8
+ * generated: this script builds the two projects in a scratch home, runs each
9
+ * step of `journey-storyboard.ts`, flattens what varies (paths, dates, SHAs)
10
+ * with the landing recording's own rules, and writes the result between the
11
+ * page's `out-<id>` sentinels.
12
+ *
13
+ * npm run docs:journey rewrite the blocks
14
+ * npm run docs:journey:check fail if a page no longer matches the CLI
15
+ *
16
+ * What a person or their agent writes between commands — the brief, the
17
+ * draft, the test, the code — is written here too, off the record, and every
18
+ * page says who wrote it. Nothing shown is staged: the commands are real.
19
+ */
20
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
21
+ if (k2 === undefined) k2 = k;
22
+ var desc = Object.getOwnPropertyDescriptor(m, k);
23
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
24
+ desc = { enumerable: true, get: function() { return m[k]; } };
25
+ }
26
+ Object.defineProperty(o, k2, desc);
27
+ }) : (function(o, m, k, k2) {
28
+ if (k2 === undefined) k2 = k;
29
+ o[k2] = m[k];
30
+ }));
31
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
32
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
33
+ }) : function(o, v) {
34
+ o["default"] = v;
35
+ });
36
+ var __importStar = (this && this.__importStar) || (function () {
37
+ var ownKeys = function(o) {
38
+ ownKeys = Object.getOwnPropertyNames || function (o) {
39
+ var ar = [];
40
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
41
+ return ar;
42
+ };
43
+ return ownKeys(o);
44
+ };
45
+ return function (mod) {
46
+ if (mod && mod.__esModule) return mod;
47
+ var result = {};
48
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
49
+ __setModuleDefault(result, mod);
50
+ return result;
51
+ };
52
+ })();
53
+ Object.defineProperty(exports, "__esModule", { value: true });
54
+ exports.LINGO_BRIEF = void 0;
55
+ exports.renderBlock = renderBlock;
56
+ exports.recordJourney = recordJourney;
57
+ exports.pagePath = pagePath;
58
+ const node_child_process_1 = require("node:child_process");
59
+ const fs = __importStar(require("node:fs"));
60
+ const os = __importStar(require("node:os"));
61
+ const path = __importStar(require("node:path"));
62
+ const record_terminal_1 = require("./record-terminal");
63
+ const blocks_1 = require("./blocks");
64
+ const journey_storyboard_1 = require("./journey-storyboard");
65
+ const ROOT = path.resolve(__dirname, "../../..");
66
+ const DOCS = path.join(ROOT, "docs");
67
+ const CHANGE = path.join("docs", "specs", "changes", "draft-bookings");
68
+ function commit(project, env, message) {
69
+ (0, record_terminal_1.run)(project, env, ["git", "add", "-A"]);
70
+ (0, record_terminal_1.run)(project, env, ["git", "commit", "-qm", message]);
71
+ }
72
+ // ── Writing the brief: Lingo ─────────────────────────────────────────────────
73
+ /** Lingo's brief as its owner wrote it: plain notes, no front matter. */
74
+ exports.LINGO_BRIEF = `# Lingo
75
+
76
+ Lingo is an online language school. A teacher runs small groups of adult
77
+ students.
78
+
79
+ The teacher creates courses by level and publishes lessons with their
80
+ material. Students follow their course on the web or on their phone, do the
81
+ exercises of each lesson and see their progress. The teacher sees each
82
+ student's progress and corrects written exercises.
83
+
84
+ We don't know yet whether students pay per course or per month.
85
+ `;
86
+ /** What the stand-in for Claude proposes. The real agent reads the same guide. */
87
+ const LINGO_FRONT_MATTER = `---
88
+ product: Lingo — online lessons for a language school
89
+ surfaces: [web, mobile]
90
+ actors:
91
+ - { name: Teacher, surfaces: [web] }
92
+ # check: the brief says students use "the web or their phone"
93
+ - { name: Student, surfaces: [web, mobile] }
94
+ modules: [courses, lessons, exercises, progress]
95
+ ---
96
+
97
+ `;
98
+ function lingoProject(scratch, name, env) {
99
+ const project = path.join(scratch, name);
100
+ (0, record_terminal_1.write)(path.join(project, "package.json"), `${JSON.stringify({ name, version: "1.0.0", scripts: { test: "node --test" } }, null, 2)}\n`);
101
+ (0, record_terminal_1.gitInit)(project, env);
102
+ (0, record_terminal_1.run)(project, env, ["specgate", "init", "--no-capabilities"]);
103
+ commit(project, env, "npm init, specgate init");
104
+ return project;
105
+ }
106
+ const BRIEF_HOOKS = {
107
+ "brief-none": (project, env) => {
108
+ lingoProject(path.dirname(project), "lingo", env);
109
+ lingoProject(path.dirname(project), "lingo-new", env);
110
+ },
111
+ // You: your notes, saved as they are.
112
+ "brief-plain": (project, env) => {
113
+ const lingo = path.join(path.dirname(project), "lingo");
114
+ (0, record_terminal_1.write)(path.join(lingo, "docs", "brief.md"), exports.LINGO_BRIEF);
115
+ commit(lingo, env, "the brief");
116
+ },
117
+ // A stand-in for `claude -p` on PATH: it reads the prompt and does what
118
+ // BRIEF-SETUP.md asks — a front matter on top, the notes untouched.
119
+ "brief-agent": (project) => {
120
+ const scratch = path.dirname(project);
121
+ const fmFile = path.join(scratch, "tmp", "lingo-front-matter.md");
122
+ (0, record_terminal_1.write)(fmFile, LINGO_FRONT_MATTER);
123
+ const claude = path.join(scratch, "bin", "claude");
124
+ fs.writeFileSync(claude, [
125
+ "#!/usr/bin/env bash",
126
+ "cat > /dev/null",
127
+ `cat "${fmFile}" docs/brief.md > docs/brief.md.new && mv docs/brief.md.new docs/brief.md`,
128
+ 'echo "Added a front matter to docs/brief.md: 2 actors, 4 modules; one line marked to check."',
129
+ "",
130
+ ].join("\n"), { mode: 0o755 });
131
+ },
132
+ // You, reviewing: a tablet, an admin, a module written as a title.
133
+ "brief-error": (project) => {
134
+ const brief = path.join(path.dirname(project), "lingo", "docs", "brief.md");
135
+ const text = fs
136
+ .readFileSync(brief, "utf8")
137
+ .replace(" - { name: Teacher, surfaces: [web] }", " - { name: Teacher, surfaces: [web, tablet] }\n - { name: Admin }")
138
+ .replace("modules: [courses, lessons, exercises, progress]", "modules: [courses, lessons, Live classes, progress]");
139
+ (0, record_terminal_1.write)(brief, text);
140
+ },
141
+ // You: fixed — the front matter the agent proposed, reviewed.
142
+ "brief-ready": (project) => {
143
+ const brief = path.join(path.dirname(project), "lingo", "docs", "brief.md");
144
+ (0, record_terminal_1.write)(brief, LINGO_FRONT_MATTER + exports.LINGO_BRIEF);
145
+ },
146
+ };
147
+ // ── From scratch: court bookings ────────────────────────────────────────────
148
+ const SCRATCH_SETUP = {
149
+ // What `npm init -y` writes, minus what changes between npm versions.
150
+ before: (project, env) => {
151
+ (0, record_terminal_1.write)(path.join(project, "package.json"), `${JSON.stringify({ name: "court-bookings", version: "1.0.0", scripts: { test: "node --test" } }, null, 2)}\n`);
152
+ (0, record_terminal_1.gitInit)(project, env);
153
+ commit(project, env, "npm init");
154
+ },
155
+ steps: {
156
+ ...BRIEF_HOOKS,
157
+ // You: the brief, as the client sent it.
158
+ "scratch-draft-list": (project, env) => {
159
+ (0, record_terminal_1.write)(path.join(project, "docs", "brief.md"), record_terminal_1.BRIEF_MD);
160
+ commit(project, env, "the specification setup and the brief");
161
+ },
162
+ // Your agent: the first draft, with the fee the brief never states.
163
+ "scratch-draft-check": (project) => {
164
+ (0, record_terminal_1.write)(path.join(project, CHANGE, "specs", "bookings", "spec.md"), (0, record_terminal_1.draftSpec)(false));
165
+ },
166
+ // You: the fee becomes a question; the HTTP codes an assumption.
167
+ "scratch-draft-check-again": (project) => {
168
+ (0, record_terminal_1.write)(path.join(project, CHANGE, "specs", "bookings", "spec.md"), (0, record_terminal_1.draftSpec)(true));
169
+ (0, record_terminal_1.write)(path.join(project, CHANGE, "assumptions.md"), record_terminal_1.ASSUMPTIONS_MD);
170
+ (0, record_terminal_1.write)(path.join(project, CHANGE, "questions.md"), record_terminal_1.QUESTIONS_MD);
171
+ },
172
+ // You or your agent: the test first, then the code.
173
+ "scratch-node-test": (project, env) => {
174
+ commit(project, env, "the specification");
175
+ (0, record_terminal_1.write)(path.join(project, "test", "bookings.test.js"), record_terminal_1.BOOKINGS_TEST_JS);
176
+ (0, record_terminal_1.write)(path.join(project, "src", "bookings.js"), record_terminal_1.BOOKINGS_JS);
177
+ },
178
+ "scratch-harness-prompt": (project, env) => commit(project, env, "REQ-002: book a court"),
179
+ "scratch-ci": (project, env) => commit(project, env, "REQ-002 done"),
180
+ },
181
+ };
182
+ // ── An existing project: invoicing ──────────────────────────────────────────
183
+ const TOTAL_JS = `/** Sum of the lines, VAT included, rounded to the cent. */
184
+ function total(lines, vatRate) {
185
+ const net = lines.reduce((sum, l) => sum + l.quantity * l.unitPrice, 0);
186
+ return Math.round(net * (1 + vatRate) * 100) / 100;
187
+ }
188
+
189
+ module.exports = { total };
190
+ `;
191
+ const NUMBERING_JS = `/** Invoice numbers run per year and never repeat: 2026-0001, 2026-0002, … */
192
+ const last = new Map();
193
+
194
+ function next(year) {
195
+ const n = (last.get(year) || 0) + 1;
196
+ last.set(year, n);
197
+ return \`\${year}-\${String(n).padStart(4, "0")}\`;
198
+ }
199
+
200
+ module.exports = { next };
201
+ `;
202
+ const CUSTOMERS_JS = `const customers = new Map();
203
+
204
+ function register(id, name, taxId) {
205
+ if (customers.has(id)) throw new Error("customer already registered");
206
+ customers.set(id, { id, name, taxId });
207
+ }
208
+
209
+ module.exports = { register, find: (id) => customers.get(id) };
210
+ `;
211
+ function totalTest(named) {
212
+ const tag = named ? "REQ-004: " : "";
213
+ return `const test = require("node:test");
214
+ const assert = require("node:assert");
215
+ const { total } = require("../src/invoices/total");
216
+
217
+ test("${tag}three lines at 21% VAT are rounded to the cent", () => {
218
+ const lines = [
219
+ { quantity: 3, unitPrice: 0.1 },
220
+ { quantity: 1, unitPrice: 19.99 },
221
+ { quantity: 2, unitPrice: 4.55 },
222
+ ];
223
+ assert.equal(total(lines, 0.21), 35.56);
224
+ });
225
+ `;
226
+ }
227
+ const NUMBERING_TEST_JS = `const test = require("node:test");
228
+ const assert = require("node:assert");
229
+ const { next } = require("../src/invoices/numbering");
230
+
231
+ test("numbers run per year", () => {
232
+ assert.equal(next(2026), "2026-0001");
233
+ assert.equal(next(2026), "2026-0002");
234
+ });
235
+ `;
236
+ const ROUNDING_FEATURE = (req, scn) => `Feature: An invoice total is rounded to the cent
237
+
238
+ @${req} @${scn}
239
+ Scenario: Three lines at 21% VAT
240
+ Given an invoice with lines of 3 × 0.10, 1 × 19.99 and 2 × 4.55
241
+ When its total is computed at 21% VAT
242
+ Then the total is 35.56
243
+ `;
244
+ const EXISTING_SETUP = {
245
+ before: (project, env) => {
246
+ (0, record_terminal_1.write)(path.join(project, "package.json"), `${JSON.stringify({ name: "invoicing", version: "2.3.0", scripts: { test: "node --test" } }, null, 2)}\n`);
247
+ (0, record_terminal_1.write)(path.join(project, "src", "invoices", "total.js"), TOTAL_JS);
248
+ (0, record_terminal_1.write)(path.join(project, "src", "invoices", "numbering.js"), NUMBERING_JS);
249
+ (0, record_terminal_1.write)(path.join(project, "src", "customers", "customers.js"), CUSTOMERS_JS);
250
+ (0, record_terminal_1.write)(path.join(project, "test", "total.test.js"), totalTest(false));
251
+ (0, record_terminal_1.write)(path.join(project, "test", "numbering.test.js"), NUMBERING_TEST_JS);
252
+ (0, record_terminal_1.gitInit)(project, env);
253
+ commit(project, env, "invoicing 2.3.0");
254
+ },
255
+ steps: {
256
+ "existing-status": (project, env) => commit(project, env, "adopt specgate"),
257
+ // You: the placeholders `new` wrote, replaced with the real example.
258
+ "existing-feature": (project) => {
259
+ const file = path.join(project, "features", "an-invoice-total-is-rounded-to.feature");
260
+ const tags = /@(REQ-\d+) @(SCN-\d+)/.exec(fs.readFileSync(file, "utf8"));
261
+ if (!tags)
262
+ throw new Error("`new` wrote no tags — the journey's scenario cannot be filled in");
263
+ fs.writeFileSync(file, ROUNDING_FEATURE(tags[1], tags[2]), "utf8");
264
+ const spec = path.join(project, "spec.md");
265
+ fs.writeFileSync(spec, fs
266
+ .readFileSync(spec, "utf8")
267
+ .replace(/(## REQ-004[^\n]*\n)([\s\S]*?)(?=\n## |\n---|$)/, (_m, head) => `${head}\n<!-- specgate:trace kind=business-rule -->\n\nThe system SHALL round an invoice total, VAT included, to the cent.\n`), "utf8");
268
+ },
269
+ // You: the test you already had, now naming the requirement.
270
+ "existing-test": (project) => (0, record_terminal_1.write)(path.join(project, "test", "total.test.js"), totalTest(true)),
271
+ "existing-ci": (project, env) => commit(project, env, "REQ-004 done"),
272
+ },
273
+ };
274
+ const SETUP = {
275
+ scratch: SCRATCH_SETUP,
276
+ existing: EXISTING_SETUP,
277
+ };
278
+ function renderBlock(step, lines, omitted) {
279
+ const body = [`$ ${(0, journey_storyboard_1.displayCommand)(step)}`, ...lines];
280
+ if (omitted > 0)
281
+ body.push(`… ${omitted} more line${omitted === 1 ? "" : "s"}`);
282
+ return ["```text", ...body, "```"].join("\n");
283
+ }
284
+ function recordJourney(journey, keep = false) {
285
+ const scratch = fs.mkdtempSync(path.join(os.tmpdir(), "specgate-journey-"));
286
+ const env = (0, record_terminal_1.buildEnv)(scratch);
287
+ const ctx = {
288
+ scratch: [...new Set([fs.realpathSync(scratch), scratch])].sort((a, b) => b.length - a.length),
289
+ repoRoot: ROOT,
290
+ home: os.homedir(),
291
+ hostname: os.hostname(),
292
+ shas: new Map(),
293
+ };
294
+ const project = path.join(scratch, journey.project);
295
+ const setup = SETUP[journey.id];
296
+ const out = [];
297
+ try {
298
+ (0, record_terminal_1.prepareBin)(scratch);
299
+ fs.mkdirSync(project, { recursive: true });
300
+ setup.before(project, env);
301
+ for (const step of journey.steps) {
302
+ setup.steps[step.id]?.(project, env);
303
+ const argv = step.shell ? ["bash", "-c", step.shell] : [...(step.argv || [])];
304
+ const r = (0, node_child_process_1.spawnSync)(argv[0], argv.slice(1), {
305
+ cwd: path.join(scratch, step.cwd),
306
+ env,
307
+ encoding: "utf8",
308
+ stdio: ["ignore", "pipe", "pipe"],
309
+ maxBuffer: 16 * 1024 * 1024,
310
+ });
311
+ if (r.error)
312
+ throw new Error(`${step.id}: ${r.error.message}`);
313
+ const lines = `${r.stdout || ""}${r.stderr || ""}`
314
+ .replace(/\r\n/g, "\n")
315
+ .split("\n")
316
+ .map((l) => (0, record_terminal_1.normalise)(l, ctx));
317
+ lines.forEach((l) => (0, record_terminal_1.assertNoSecrets)(l, step.id));
318
+ while (lines.length && lines[lines.length - 1].trim() === "")
319
+ lines.pop();
320
+ while (lines.length && lines[0].trim() === "")
321
+ lines.shift();
322
+ const kept = lines.slice(0, step.maxLines);
323
+ out.push({
324
+ step,
325
+ exit: r.status === null ? -1 : r.status,
326
+ block: renderBlock(step, kept, lines.length - kept.length),
327
+ });
328
+ }
329
+ return out;
330
+ }
331
+ finally {
332
+ if (keep)
333
+ process.stderr.write(`kept ${scratch}\n`);
334
+ else
335
+ fs.rmSync(scratch, { recursive: true, force: true });
336
+ }
337
+ }
338
+ function pagePath(step) {
339
+ return path.join(DOCS, `${step.page}.md`);
340
+ }
341
+ function main() {
342
+ const check = process.argv.includes("--check");
343
+ const keep = process.argv.includes("--keep");
344
+ const problems = [];
345
+ for (const journey of journey_storyboard_1.JOURNEYS) {
346
+ for (const { step, exit, block } of recordJourney(journey, keep)) {
347
+ const expected = step.expectExit ?? 0;
348
+ if (exit !== expected)
349
+ problems.push(`${step.id} exited ${exit}, expected ${expected}`);
350
+ const file = pagePath(step);
351
+ const source = fs.existsSync(file) ? fs.readFileSync(file, "utf8") : "";
352
+ if (check) {
353
+ if (((0, blocks_1.readBlock)(source, (0, journey_storyboard_1.blockName)(step)) || "") !== block.trim()) {
354
+ problems.push(`${step.page}.md: ${(0, journey_storyboard_1.blockName)(step)} no longer matches the CLI`);
355
+ }
356
+ }
357
+ else if (source) {
358
+ fs.writeFileSync(file, (0, blocks_1.replaceBlock)(source, (0, journey_storyboard_1.blockName)(step), block), "utf8");
359
+ }
360
+ else {
361
+ problems.push(`${step.page}.md does not exist`);
362
+ }
363
+ }
364
+ }
365
+ if (problems.length > 0) {
366
+ process.stderr.write(`${problems.join("\n")}\n`);
367
+ if (check)
368
+ process.stderr.write("run `npm run docs:journey`\n");
369
+ process.exitCode = 1;
370
+ return;
371
+ }
372
+ process.stdout.write(check ? "the journey pages are current\n" : "recorded the journey pages\n");
373
+ }
374
+ if (require.main === module)
375
+ main();
376
+ //# sourceMappingURL=record-journey.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"record-journey.js","sourceRoot":"","sources":["../../../scripts/docs/record-journey.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;GAiBG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkTH,kCAIC;AAED,sCA+CC;AAED,4BAEC;AAzWD,2DAA+C;AAC/C,4CAA8B;AAC9B,4CAA8B;AAC9B,gDAAkC;AAElC,uDAe2B;AAC3B,qCAAmD;AACnD,6DAM8B;AAE9B,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;AACjD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAIrC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,gBAAgB,CAAC,CAAC;AAEvE,SAAS,MAAM,CAAC,OAAe,EAAE,GAAsB,EAAE,OAAe;IACtE,IAAA,qBAAG,EAAC,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;IACxC,IAAA,qBAAG,EAAC,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;AACvD,CAAC;AAED,gFAAgF;AAEhF,yEAAyE;AAC5D,QAAA,WAAW,GAAG;;;;;;;;;;;CAW1B,CAAC;AAEF,kFAAkF;AAClF,MAAM,kBAAkB,GAAG;;;;;;;;;;CAU1B,CAAC;AAEF,SAAS,YAAY,CAAC,OAAe,EAAE,IAAY,EAAE,GAAsB;IACzE,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACzC,IAAA,uBAAK,EACH,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,EAClC,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAC7F,CAAC;IACF,IAAA,yBAAO,EAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACtB,IAAA,qBAAG,EAAC,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,mBAAmB,CAAC,CAAC,CAAC;IAC7D,MAAM,CAAC,OAAO,EAAE,GAAG,EAAE,yBAAyB,CAAC,CAAC;IAChD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,WAAW,GAAyB;IACxC,YAAY,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE;QAC7B,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;QAClD,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,GAAG,CAAC,CAAC;IACxD,CAAC;IACD,sCAAsC;IACtC,aAAa,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE;QAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;QACxD,IAAA,uBAAK,EAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,mBAAW,CAAC,CAAC;QACzD,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,WAAW,CAAC,CAAC;IAClC,CAAC;IACD,wEAAwE;IACxE,oEAAoE;IACpE,aAAa,EAAE,CAAC,OAAO,EAAE,EAAE;QACzB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACtC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,uBAAuB,CAAC,CAAC;QAClE,IAAA,uBAAK,EAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;QAClC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;QACnD,EAAE,CAAC,aAAa,CACd,MAAM,EACN;YACE,qBAAqB;YACrB,iBAAiB;YACjB,QAAQ,MAAM,2EAA2E;YACzF,8FAA8F;YAC9F,EAAE;SACH,CAAC,IAAI,CAAC,IAAI,CAAC,EACZ,EAAE,IAAI,EAAE,KAAK,EAAE,CAChB,CAAC;IACJ,CAAC;IACD,mEAAmE;IACnE,aAAa,EAAE,CAAC,OAAO,EAAE,EAAE;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;QAC5E,MAAM,IAAI,GAAG,EAAE;aACZ,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC;aAC3B,OAAO,CACN,wCAAwC,EACxC,qEAAqE,CACtE;aACA,OAAO,CACN,kDAAkD,EAClD,qDAAqD,CACtD,CAAC;QACJ,IAAA,uBAAK,EAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACrB,CAAC;IACD,8DAA8D;IAC9D,aAAa,EAAE,CAAC,OAAO,EAAE,EAAE;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;QAC5E,IAAA,uBAAK,EAAC,KAAK,EAAE,kBAAkB,GAAG,mBAAW,CAAC,CAAC;IACjD,CAAC;CACF,CAAC;AAEF,+EAA+E;AAE/E,MAAM,aAAa,GAAkD;IACnE,sEAAsE;IACtE,MAAM,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE;QACvB,IAAA,uBAAK,EACH,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,EAClC,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAC/G,CAAC;QACF,IAAA,yBAAO,EAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACtB,MAAM,CAAC,OAAO,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;IACnC,CAAC;IACD,KAAK,EAAE;QACL,GAAG,WAAW;QACd,yCAAyC;QACzC,oBAAoB,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE;YACrC,IAAA,uBAAK,EAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,0BAAQ,CAAC,CAAC;YACxD,MAAM,CAAC,OAAO,EAAE,GAAG,EAAE,uCAAuC,CAAC,CAAC;QAChE,CAAC;QACD,oEAAoE;QACpE,qBAAqB,EAAE,CAAC,OAAO,EAAE,EAAE;YACjC,IAAA,uBAAK,EAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,CAAC,EAAE,IAAA,2BAAS,EAAC,KAAK,CAAC,CAAC,CAAC;QACtF,CAAC;QACD,iEAAiE;QACjE,2BAA2B,EAAE,CAAC,OAAO,EAAE,EAAE;YACvC,IAAA,uBAAK,EAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,CAAC,EAAE,IAAA,2BAAS,EAAC,IAAI,CAAC,CAAC,CAAC;YACnF,IAAA,uBAAK,EAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,gCAAc,CAAC,CAAC;YACpE,IAAA,uBAAK,EAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,8BAAY,CAAC,CAAC;QAClE,CAAC;QACD,oDAAoD;QACpD,mBAAmB,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE;YACpC,MAAM,CAAC,OAAO,EAAE,GAAG,EAAE,mBAAmB,CAAC,CAAC;YAC1C,IAAA,uBAAK,EAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,kBAAkB,CAAC,EAAE,kCAAgB,CAAC,CAAC;YACxE,IAAA,uBAAK,EAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,aAAa,CAAC,EAAE,6BAAW,CAAC,CAAC;QAC/D,CAAC;QACD,wBAAwB,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,EAAE,uBAAuB,CAAC;QACzF,YAAY,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,EAAE,cAAc,CAAC;KACrE;CACF,CAAC;AAEF,+EAA+E;AAE/E,MAAM,QAAQ,GAAG;;;;;;;CAOhB,CAAC;AAEF,MAAM,YAAY,GAAG;;;;;;;;;;CAUpB,CAAC;AAEF,MAAM,YAAY,GAAG;;;;;;;;CAQpB,CAAC;AAEF,SAAS,SAAS,CAAC,KAAc;IAC/B,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;IACrC,OAAO;;;;QAID,GAAG;;;;;;;;CAQV,CAAC;AACF,CAAC;AAED,MAAM,iBAAiB,GAAG;;;;;;;;CAQzB,CAAC;AAEF,MAAM,gBAAgB,GAAG,CACvB,GAAW,EACX,GAAW,EACX,EAAE,CAAC;;KAEA,GAAG,KAAK,GAAG;;;;;CAKf,CAAC;AAEF,MAAM,cAAc,GAAkD;IACpE,MAAM,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE;QACvB,IAAA,uBAAK,EACH,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,EAClC,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAC1G,CAAC;QACF,IAAA,uBAAK,EAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,CAAC,EAAE,QAAQ,CAAC,CAAC;QACnE,IAAA,uBAAK,EAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,cAAc,CAAC,EAAE,YAAY,CAAC,CAAC;QAC3E,IAAA,uBAAK,EAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,cAAc,CAAC,EAAE,YAAY,CAAC,CAAC;QAC5E,IAAA,uBAAK,EAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;QACrE,IAAA,uBAAK,EAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,mBAAmB,CAAC,EAAE,iBAAiB,CAAC,CAAC;QAC1E,IAAA,yBAAO,EAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACtB,MAAM,CAAC,OAAO,EAAE,GAAG,EAAE,iBAAiB,CAAC,CAAC;IAC1C,CAAC;IACD,KAAK,EAAE;QACL,iBAAiB,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,EAAE,gBAAgB,CAAC;QAC3E,qEAAqE;QACrE,kBAAkB,EAAE,CAAC,OAAO,EAAE,EAAE;YAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,wCAAwC,CAAC,CAAC;YACtF,MAAM,IAAI,GAAG,uBAAuB,CAAC,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;YACzE,IAAI,CAAC,IAAI;gBACP,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAC;YACtF,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YACnE,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;YAC3C,EAAE,CAAC,aAAa,CACd,IAAI,EACJ,EAAE;iBACC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC;iBAC1B,OAAO,CACN,iDAAiD,EACjD,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,CACX,GAAG,IAAI,uHAAuH,CACjI,EACH,MAAM,CACP,CAAC;QACJ,CAAC;QACD,6DAA6D;QAC7D,eAAe,EAAE,CAAC,OAAO,EAAE,EAAE,CAC3B,IAAA,uBAAK,EAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;QACrE,aAAa,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,EAAE,cAAc,CAAC;KACtE;CACF,CAAC;AAEF,MAAM,KAAK,GAAyE;IAClF,OAAO,EAAE,aAAa;IACtB,QAAQ,EAAE,cAAc;CACzB,CAAC;AAWF,SAAgB,WAAW,CAAC,IAAiB,EAAE,KAAe,EAAE,OAAe;IAC7E,MAAM,IAAI,GAAG,CAAC,KAAK,IAAA,mCAAc,EAAC,IAAI,CAAC,EAAE,EAAE,GAAG,KAAK,CAAC,CAAC;IACrD,IAAI,OAAO,GAAG,CAAC;QAAE,IAAI,CAAC,IAAI,CAAC,KAAK,OAAO,aAAa,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IAChF,OAAO,CAAC,SAAS,EAAE,GAAG,IAAI,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAChD,CAAC;AAED,SAAgB,aAAa,CAAC,OAAgB,EAAE,IAAI,GAAG,KAAK;IAC1D,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,mBAAmB,CAAC,CAAC,CAAC;IAC5E,MAAM,GAAG,GAAG,IAAA,0BAAQ,EAAC,OAAO,CAAC,CAAC;IAC9B,MAAM,GAAG,GAAqB;QAC5B,OAAO,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;QAC9F,QAAQ,EAAE,IAAI;QACd,IAAI,EAAE,EAAE,CAAC,OAAO,EAAE;QAClB,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE;QACvB,IAAI,EAAE,IAAI,GAAG,EAAE;KAChB,CAAC;IACF,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IACpD,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAChC,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,IAAI,CAAC;QACH,IAAA,4BAAU,EAAC,OAAO,CAAC,CAAC;QACpB,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3C,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAC3B,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YACjC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YACrC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;YAC9E,MAAM,CAAC,GAAG,IAAA,8BAAS,EAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;gBAC1C,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC;gBACjC,GAAG;gBACH,QAAQ,EAAE,MAAM;gBAChB,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;gBACjC,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI;aAC5B,CAAC,CAAC;YACH,IAAI,CAAC,CAAC,KAAK;gBAAE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAC/D,MAAM,KAAK,GAAG,GAAG,CAAC,CAAC,MAAM,IAAI,EAAE,GAAG,CAAC,CAAC,MAAM,IAAI,EAAE,EAAE;iBAC/C,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC;iBACtB,KAAK,CAAC,IAAI,CAAC;iBACX,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,2BAAS,EAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YACjC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,iCAAe,EAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YAClD,OAAO,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE;gBAAE,KAAK,CAAC,GAAG,EAAE,CAAC;YAC1E,OAAO,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE;gBAAE,KAAK,CAAC,KAAK,EAAE,CAAC;YAC7D,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC3C,GAAG,CAAC,IAAI,CAAC;gBACP,IAAI;gBACJ,IAAI,EAAE,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM;gBACvC,KAAK,EAAE,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;aAC3D,CAAC,CAAC;QACL,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;YAAS,CAAC;QACT,IAAI,IAAI;YAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,OAAO,IAAI,CAAC,CAAC;;YAC/C,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5D,CAAC;AACH,CAAC;AAED,SAAgB,QAAQ,CAAC,IAAiB;IACxC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC;AAC5C,CAAC;AAED,SAAS,IAAI;IACX,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC/C,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC7C,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,KAAK,MAAM,OAAO,IAAI,6BAAQ,EAAE,CAAC;QAC/B,KAAK,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC;YACjE,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC;YACtC,IAAI,IAAI,KAAK,QAAQ;gBAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,WAAW,IAAI,cAAc,QAAQ,EAAE,CAAC,CAAC;YACxF,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC5B,MAAM,MAAM,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACxE,IAAI,KAAK,EAAE,CAAC;gBACV,IAAI,CAAC,IAAA,kBAAS,EAAC,MAAM,EAAE,IAAA,8BAAS,EAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;oBAChE,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,QAAQ,IAAA,8BAAS,EAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;gBACjF,CAAC;YACH,CAAC;iBAAM,IAAI,MAAM,EAAE,CAAC;gBAClB,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,IAAA,qBAAY,EAAC,MAAM,EAAE,IAAA,8BAAS,EAAC,IAAI,CAAC,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC;YAC/E,CAAC;iBAAM,CAAC;gBACN,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,oBAAoB,CAAC,CAAC;YAClD,CAAC;QACH,CAAC;IACH,CAAC;IACD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjD,IAAI,KAAK;YAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAChE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,iCAAiC,CAAC,CAAC,CAAC,8BAA8B,CAAC,CAAC;AACnG,CAAC;AAED,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM;IAAE,IAAI,EAAE,CAAC"}