ctxr-cli 0.23.0 → 0.25.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (197) hide show
  1. package/README.md +65 -5
  2. package/dist/commands/graph-diff.d.ts +33 -0
  3. package/dist/commands/graph-diff.d.ts.map +1 -0
  4. package/dist/commands/graph-diff.js +52 -0
  5. package/dist/commands/graph-diff.js.map +1 -0
  6. package/dist/commands/land.d.ts +50 -0
  7. package/dist/commands/land.d.ts.map +1 -0
  8. package/dist/commands/land.js +414 -0
  9. package/dist/commands/land.js.map +1 -0
  10. package/dist/commands/publish-check.d.ts +6 -0
  11. package/dist/commands/publish-check.d.ts.map +1 -1
  12. package/dist/commands/publish-check.js +78 -3
  13. package/dist/commands/publish-check.js.map +1 -1
  14. package/dist/commands/publish-gather.d.ts.map +1 -1
  15. package/dist/commands/publish-gather.js +4 -1
  16. package/dist/commands/publish-gather.js.map +1 -1
  17. package/dist/commands/publish-new.d.ts +5 -0
  18. package/dist/commands/publish-new.d.ts.map +1 -1
  19. package/dist/commands/publish-new.js +30 -10
  20. package/dist/commands/publish-new.js.map +1 -1
  21. package/dist/commands/publish-stamp.d.ts +32 -0
  22. package/dist/commands/publish-stamp.d.ts.map +1 -0
  23. package/dist/commands/publish-stamp.js +78 -0
  24. package/dist/commands/publish-stamp.js.map +1 -0
  25. package/dist/commands/publish-urls.d.ts +13 -0
  26. package/dist/commands/publish-urls.d.ts.map +1 -1
  27. package/dist/commands/publish-urls.js +23 -6
  28. package/dist/commands/publish-urls.js.map +1 -1
  29. package/dist/commands/review-list.d.ts +34 -0
  30. package/dist/commands/review-list.d.ts.map +1 -0
  31. package/dist/commands/review-list.js +49 -0
  32. package/dist/commands/review-list.js.map +1 -0
  33. package/dist/commands/serve.d.ts +3 -6
  34. package/dist/commands/serve.d.ts.map +1 -1
  35. package/dist/commands/serve.js +106 -9
  36. package/dist/commands/serve.js.map +1 -1
  37. package/dist/config/schema.d.ts +40 -0
  38. package/dist/config/schema.d.ts.map +1 -1
  39. package/dist/config/schema.js +39 -0
  40. package/dist/config/schema.js.map +1 -1
  41. package/dist/core/approval/decision.d.ts +73 -0
  42. package/dist/core/approval/decision.d.ts.map +1 -0
  43. package/dist/core/approval/decision.js +166 -0
  44. package/dist/core/approval/decision.js.map +1 -0
  45. package/dist/core/approval/file-diff.d.ts +32 -0
  46. package/dist/core/approval/file-diff.d.ts.map +1 -0
  47. package/dist/core/approval/file-diff.js +83 -0
  48. package/dist/core/approval/file-diff.js.map +1 -0
  49. package/dist/core/approval/identity.d.ts +34 -0
  50. package/dist/core/approval/identity.d.ts.map +1 -0
  51. package/dist/core/approval/identity.js +105 -0
  52. package/dist/core/approval/identity.js.map +1 -0
  53. package/dist/core/approval/landing-record.d.ts +17 -0
  54. package/dist/core/approval/landing-record.d.ts.map +1 -0
  55. package/dist/core/approval/landing-record.js +30 -0
  56. package/dist/core/approval/landing-record.js.map +1 -0
  57. package/dist/core/approval/resolver.d.ts +15 -0
  58. package/dist/core/approval/resolver.d.ts.map +1 -0
  59. package/dist/core/approval/resolver.js +41 -0
  60. package/dist/core/approval/resolver.js.map +1 -0
  61. package/dist/core/approval/sessions.d.ts +36 -0
  62. package/dist/core/approval/sessions.d.ts.map +1 -0
  63. package/dist/core/approval/sessions.js +76 -0
  64. package/dist/core/approval/sessions.js.map +1 -0
  65. package/dist/core/browse/approve.d.ts +45 -0
  66. package/dist/core/browse/approve.d.ts.map +1 -0
  67. package/dist/core/browse/approve.js +239 -0
  68. package/dist/core/browse/approve.js.map +1 -0
  69. package/dist/core/browse/diagram-assets.d.ts +15 -0
  70. package/dist/core/browse/diagram-assets.d.ts.map +1 -0
  71. package/dist/core/browse/diagram-assets.js +35 -0
  72. package/dist/core/browse/diagram-assets.js.map +1 -0
  73. package/dist/core/browse/page-url.d.ts +22 -0
  74. package/dist/core/browse/page-url.d.ts.map +1 -1
  75. package/dist/core/browse/page-url.js +31 -0
  76. package/dist/core/browse/page-url.js.map +1 -1
  77. package/dist/core/browse/render.d.ts +10 -1
  78. package/dist/core/browse/render.d.ts.map +1 -1
  79. package/dist/core/browse/render.js +23 -1
  80. package/dist/core/browse/render.js.map +1 -1
  81. package/dist/core/browse/review.d.ts +21 -0
  82. package/dist/core/browse/review.d.ts.map +1 -0
  83. package/dist/core/browse/review.js +52 -0
  84. package/dist/core/browse/review.js.map +1 -0
  85. package/dist/core/browse/templates.d.ts +4 -1
  86. package/dist/core/browse/templates.d.ts.map +1 -1
  87. package/dist/core/browse/templates.js +18 -2
  88. package/dist/core/browse/templates.js.map +1 -1
  89. package/dist/core/checks/organize-checks.d.ts +17 -0
  90. package/dist/core/checks/organize-checks.d.ts.map +1 -1
  91. package/dist/core/checks/organize-checks.js +116 -0
  92. package/dist/core/checks/organize-checks.js.map +1 -1
  93. package/dist/core/errors.d.ts +67 -0
  94. package/dist/core/errors.d.ts.map +1 -1
  95. package/dist/core/errors.js +160 -0
  96. package/dist/core/errors.js.map +1 -1
  97. package/dist/core/forge/credentials.d.ts +69 -0
  98. package/dist/core/forge/credentials.d.ts.map +1 -0
  99. package/dist/core/forge/credentials.js +197 -0
  100. package/dist/core/forge/credentials.js.map +1 -0
  101. package/dist/core/forge/github.d.ts +73 -0
  102. package/dist/core/forge/github.d.ts.map +1 -0
  103. package/dist/core/forge/github.js +101 -0
  104. package/dist/core/forge/github.js.map +1 -0
  105. package/dist/core/git/exec.d.ts +25 -0
  106. package/dist/core/git/exec.d.ts.map +1 -1
  107. package/dist/core/git/exec.js +100 -2
  108. package/dist/core/git/exec.js.map +1 -1
  109. package/dist/core/graph/diff-block.d.ts +6 -0
  110. package/dist/core/graph/diff-block.d.ts.map +1 -0
  111. package/dist/core/graph/diff-block.js +63 -0
  112. package/dist/core/graph/diff-block.js.map +1 -0
  113. package/dist/core/graph/diff-document.d.ts +38 -0
  114. package/dist/core/graph/diff-document.d.ts.map +1 -0
  115. package/dist/core/graph/diff-document.js +117 -0
  116. package/dist/core/graph/diff-document.js.map +1 -0
  117. package/dist/core/graph/diff.d.ts +123 -0
  118. package/dist/core/graph/diff.d.ts.map +1 -0
  119. package/dist/core/graph/diff.js +253 -0
  120. package/dist/core/graph/diff.js.map +1 -0
  121. package/dist/core/graph/tree.d.ts +24 -0
  122. package/dist/core/graph/tree.d.ts.map +1 -0
  123. package/dist/core/graph/tree.js +45 -0
  124. package/dist/core/graph/tree.js.map +1 -0
  125. package/dist/core/notes/list.d.ts +10 -0
  126. package/dist/core/notes/list.d.ts.map +1 -1
  127. package/dist/core/notes/list.js +35 -12
  128. package/dist/core/notes/list.js.map +1 -1
  129. package/dist/core/publish/filing.d.ts +12 -12
  130. package/dist/core/publish/filing.d.ts.map +1 -1
  131. package/dist/core/publish/filing.js +20 -18
  132. package/dist/core/publish/filing.js.map +1 -1
  133. package/dist/core/publish/lifespan.d.ts +37 -0
  134. package/dist/core/publish/lifespan.d.ts.map +1 -0
  135. package/dist/core/publish/lifespan.js +59 -0
  136. package/dist/core/publish/lifespan.js.map +1 -0
  137. package/dist/core/publish/represents.d.ts +72 -0
  138. package/dist/core/publish/represents.d.ts.map +1 -0
  139. package/dist/core/publish/represents.js +83 -0
  140. package/dist/core/publish/represents.js.map +1 -0
  141. package/dist/run.d.ts.map +1 -1
  142. package/dist/run.js +60 -4
  143. package/dist/run.js.map +1 -1
  144. package/dist/version.d.ts +1 -1
  145. package/dist/version.js +1 -1
  146. package/package.json +2 -1
  147. package/templates/approve/approve-button.md +1 -0
  148. package/templates/approve/author-heading.md +1 -0
  149. package/templates/approve/author-note.md +1 -0
  150. package/templates/approve/comment-label.md +1 -0
  151. package/templates/approve/comment-required.md +1 -0
  152. package/templates/approve/commits-heading.md +1 -0
  153. package/templates/approve/decision-heading.md +1 -0
  154. package/templates/approve/decision-note.md +1 -0
  155. package/templates/approve/diff-binary.md +1 -0
  156. package/templates/approve/diff-empty.md +1 -0
  157. package/templates/approve/diff-heading.md +1 -0
  158. package/templates/approve/facts-heading.md +1 -0
  159. package/templates/approve/forge-unreachable.md +1 -0
  160. package/templates/approve/github-app-manifest.json +15 -0
  161. package/templates/approve/head-missing.md +1 -0
  162. package/templates/approve/index-empty.md +1 -0
  163. package/templates/approve/index-heading.md +1 -0
  164. package/templates/approve/index-intro.md +1 -0
  165. package/templates/approve/landed.md +1 -0
  166. package/templates/approve/moved-head.md +1 -0
  167. package/templates/approve/no-pull.md +1 -0
  168. package/templates/approve/not-open.md +1 -0
  169. package/templates/approve/pages-heading.md +1 -0
  170. package/templates/approve/pages-note.md +1 -0
  171. package/templates/approve/record-failed.md +1 -0
  172. package/templates/approve/request-changes-button.md +1 -0
  173. package/templates/approve/state-line.md +1 -0
  174. package/templates/conventions/baseline-conventions.md +6 -0
  175. package/templates/graph/knowledge-changes/archived-item.md +1 -0
  176. package/templates/graph/knowledge-changes/archived.md +1 -0
  177. package/templates/graph/knowledge-changes/bare-route.md +2 -0
  178. package/templates/graph/knowledge-changes/block.md +10 -0
  179. package/templates/graph/knowledge-changes/counts.md +1 -0
  180. package/templates/graph/knowledge-changes/dangling-item.md +1 -0
  181. package/templates/graph/knowledge-changes/dangling.md +1 -0
  182. package/templates/graph/knowledge-changes/empty.md +1 -0
  183. package/templates/graph/knowledge-changes/reason-ambiguous.md +1 -0
  184. package/templates/graph/knowledge-changes/reason-not_found.md +1 -0
  185. package/templates/graph/knowledge-changes/review.md +4 -0
  186. package/templates/graph/review/moved-head.md +1 -0
  187. package/templates/land/resolver.md +12 -0
  188. package/templates/serve/diagrams.mjs +136 -0
  189. package/templates/serve/shell.html +1 -1
  190. package/templates/serve/style.css +90 -0
  191. package/templates/skills/ctxr-land.md +37 -31
  192. package/templates/skills/ctxr-organize-audit.md +19 -0
  193. package/templates/skills/ctxr-publish.md +100 -45
  194. package/templates/skills/ctxr-second-opinion/run.mjs +28 -17
  195. package/templates/skills/ctxr-second-opinion.md +19 -14
  196. package/templates/skills/ctxr-session-lifecycle.md +9 -0
  197. package/templates/skills/ctxr-submit.md +28 -17
@@ -0,0 +1,414 @@
1
+ import { mkdtemp, rm, stat } from 'node:fs/promises';
2
+ import { tmpdir } from 'node:os';
3
+ import path from 'node:path';
4
+ import { decisionBody, landingBody } from '../core/approval/decision.js';
5
+ import { writeLandingRecord } from '../core/approval/landing-record.js';
6
+ import { resolverPrompt, runResolver } from '../core/approval/resolver.js';
7
+ import { carriesOver, forgeRead, reviewStateOf, sessionPulls, sessionWorktrees } from '../core/approval/sessions.js';
8
+ import { ChangeApprovalNotDeclaredError, LandFlagsError, LandRefusedError } from '../core/errors.js';
9
+ import { ExitCode } from '../core/exit-codes.js';
10
+ import { credentialsFor, ghCredentials } from '../core/forge/credentials.js';
11
+ import { createGhForgeClient, ForgeRequestError } from '../core/forge/github.js';
12
+ import { storePrefix } from '../core/graph/tree.js';
13
+ import { addDetachedWorktree, mainWorktreePath, pruneWorktrees, removeWorktree } from '../core/git/worktree.js';
14
+ import { openStore } from '../core/store.js';
15
+ import * as catalogBuildCommand from './catalog-build.js';
16
+ import * as doctorCommand from './doctor.js';
17
+ import * as graphBuildCommand from './graph-build.js';
18
+ export const requires = { store: 'required' };
19
+ function emptyResult(number, worktree) {
20
+ return {
21
+ pull_request: number,
22
+ worktree,
23
+ outcome: 'merged',
24
+ consent: null,
25
+ state: null,
26
+ reason: null,
27
+ catch_up: null,
28
+ merged_commit: null,
29
+ canonical_sync: null,
30
+ reclaim: null,
31
+ records_posted: [],
32
+ records_reported_only: [],
33
+ };
34
+ }
35
+ async function git(ctx, args, cwd, allowFailure = false) {
36
+ return ctx.env.git.run(args, { cwd, allowFailure });
37
+ }
38
+ /**
39
+ * write-lifecycle spec ("In App mode, landing's git transport authenticates as
40
+ * the App"; design.md D4): a fetch or push against `origin`. With an App, the
41
+ * host's credential helpers are cleared for this one command and replaced by
42
+ * one that answers with the installation token, read from this process's
43
+ * environment only — never a remote URL, a config file, or the command line.
44
+ * Otherwise git uses the credential it already has.
45
+ */
46
+ const TOKEN_HELPER = '!f() { echo username=x-access-token; echo "password=$CTXR_GIT_TOKEN"; }; f';
47
+ async function remoteGit(ctx, args, cwd, allowFailure = false) {
48
+ const token = await ctx.credentials.gitToken();
49
+ if (token === null)
50
+ return git(ctx, args, cwd, allowFailure);
51
+ return ctx.env.git.run(['-c', 'credential.helper=', '-c', `credential.helper=${TOKEN_HELPER}`, ...args], {
52
+ cwd,
53
+ allowFailure,
54
+ env: { ...ctx.env.env, CTXR_GIT_TOKEN: token, GIT_TERMINAL_PROMPT: '0' },
55
+ });
56
+ }
57
+ /** write-lifecycle spec: a record goes on the pull request only under the recording login; otherwise only into the envelope. */
58
+ async function record(ctx, result, label, post) {
59
+ if (!ctx.canRecord) {
60
+ result.records_reported_only.push(label);
61
+ return;
62
+ }
63
+ await forgeRead(post);
64
+ result.records_posted.push(label);
65
+ }
66
+ async function recordLanding(ctx, result, number, state, reason, head, sentence) {
67
+ const at = ctx.env.now().toISOString();
68
+ await record(ctx, result, `${state}:${reason}`, () => ctx.forge.createComment(number, landingBody({ state, reason, head, at }, sentence)));
69
+ }
70
+ async function isClean(ctx, cwd) {
71
+ return (await git(ctx, ['status', '--porcelain'], cwd)).stdout.trim() === '';
72
+ }
73
+ async function rebaseInProgress(ctx, cwd) {
74
+ for (const name of ['rebase-merge', 'rebase-apply']) {
75
+ const gitPath = (await git(ctx, ['rev-parse', '--git-path', name], cwd)).stdout.trim();
76
+ try {
77
+ await stat(path.resolve(cwd, gitPath));
78
+ return true;
79
+ }
80
+ catch {
81
+ // absent
82
+ }
83
+ }
84
+ return false;
85
+ }
86
+ /**
87
+ * Where the catch-up rebase runs. The session's worktree when it is there, clean
88
+ * and at the head being landed — so its branch moves with the rebase. Otherwise
89
+ * a temporary detached worktree at that head, so a session with uncommitted work,
90
+ * or one that is absent, is never touched.
91
+ */
92
+ async function checkoutFor(ctx, session, head) {
93
+ if (session !== undefined && (await isClean(ctx, session.path))) {
94
+ const at = (await git(ctx, ['rev-parse', 'HEAD'], session.path)).stdout.trim();
95
+ if (at === head)
96
+ return { cwd: session.path, dispose: async () => undefined };
97
+ }
98
+ const dir = await mkdtemp(path.join(tmpdir(), 'ctxr-land-'));
99
+ await rm(dir, { recursive: true, force: true });
100
+ await addDetachedWorktree(ctx.env.git, ctx.canonical, dir, head);
101
+ return {
102
+ cwd: dir,
103
+ dispose: async () => {
104
+ await removeWorktree(ctx.env.git, ctx.canonical, dir);
105
+ await rm(dir, { recursive: true, force: true });
106
+ await pruneWorktrees(ctx.env.git, ctx.canonical);
107
+ },
108
+ };
109
+ }
110
+ /** Runs the configured resolver in `cwd` with the playbook as its last argument; resolves to its exit code. */
111
+ async function runResolverFor(ctx, cwd, pull) {
112
+ return runResolver({
113
+ argv: ctx.resolver,
114
+ prompt: resolverPrompt(pull.number, ctx.base, ctx.defaultBranch),
115
+ cwd,
116
+ env: { ...ctx.env.env, CTXR_LAND_PR: String(pull.number), CTXR_LAND_BASE: ctx.base },
117
+ output: ctx.env.io.stderr,
118
+ });
119
+ }
120
+ /** write-lifecycle spec: the resolver's result is accepted only clean, rebased, containing the base, and passing doctor. */
121
+ async function acceptResolution(ctx, cwd) {
122
+ if (await rebaseInProgress(ctx, cwd))
123
+ return 'rebase-in-progress';
124
+ if (!(await isClean(ctx, cwd)))
125
+ return 'uncommitted-work';
126
+ const contains = await git(ctx, ['merge-base', '--is-ancestor', ctx.base, 'HEAD'], cwd, true);
127
+ if (contains.exitCode !== 0)
128
+ return 'base-not-contained';
129
+ try {
130
+ const doctorStore = await openStore(ctx.env, { root: path.join(cwd, ctx.prefix) });
131
+ // Derived artifacts are per checkout and never committed; a fresh checkout has none for doctor's store checks to read.
132
+ await catalogBuildCommand.execute(doctorStore);
133
+ await graphBuildCommand.execute(doctorStore);
134
+ const doctor = await doctorCommand.execute(ctx.env, doctorStore);
135
+ if (doctor.exitCode === ExitCode.Ok)
136
+ return null;
137
+ for (const finding of doctor.findings.filter((f) => f.severity === 'error'))
138
+ ctx.env.io.stderr.write(`land: doctor: ${finding.code}: ${finding.message}\n`);
139
+ return 'doctor-failed';
140
+ }
141
+ catch (err) {
142
+ // A store doctor cannot even open is a result that fails doctor.
143
+ ctx.env.io.stderr.write(`land: doctor: ${err instanceof Error ? err.message : String(err)}\n`);
144
+ return 'doctor-failed';
145
+ }
146
+ }
147
+ /** A leased push of `cwd`'s HEAD to the pull request's branch; false when the lease was refused because the branch moved. */
148
+ async function leasedPush(ctx, cwd, branch, expected) {
149
+ const pushed = await remoteGit(ctx, ['push', `--force-with-lease=refs/heads/${branch}:${expected}`, 'origin', `HEAD:refs/heads/${branch}`], cwd, true);
150
+ return pushed.exitCode === 0;
151
+ }
152
+ /**
153
+ * write-lifecycle spec ("An approval carries across a catch-up rebase only when
154
+ * the patches are unchanged"; "A conflict is resolved by the configured resolver
155
+ * and returns for re-approval"). Returns the head to merge, or null when this
156
+ * landing stops here (with `result` saying why).
157
+ */
158
+ async function catchUp(ctx, result, pull, session, approvedHead) {
159
+ const behind = await git(ctx, ['merge-base', '--is-ancestor', ctx.base, pull.headSha], ctx.canonical, true);
160
+ if (behind.exitCode === 0) {
161
+ result.catch_up = 'not-needed';
162
+ return pull.headSha;
163
+ }
164
+ const checkout = await checkoutFor(ctx, session, pull.headSha);
165
+ try {
166
+ const rebase = await git(ctx, ['-c', 'core.editor=true', 'rebase', '--quiet', ctx.base], checkout.cwd, true);
167
+ if (rebase.exitCode === 0) {
168
+ const rebased = (await git(ctx, ['rev-parse', 'HEAD'], checkout.cwd)).stdout.trim();
169
+ const same = approvedHead === null || (await carriesOver(ctx.env.git, checkout.cwd, ctx.base, approvedHead, rebased));
170
+ if (!(await leasedPush(ctx, checkout.cwd, pull.headRef, pull.headSha))) {
171
+ result.outcome = 'lease-refused';
172
+ result.reason = `the branch moved after ${pull.headSha.slice(0, 7)} was read, so the leased push was refused`;
173
+ return null;
174
+ }
175
+ if (!same) {
176
+ result.catch_up = 'patches-changed';
177
+ result.outcome = 'needs-reapproval';
178
+ result.reason = 'the rebase changed a patch, so the approval does not carry over';
179
+ await recordLanding(ctx, result, pull.number, 'needs-reapproval', 'patches-changed', rebased, `Rebased onto ${ctx.base}, and the rebase changed a patch, so the approval of ${approvedHead.slice(0, 7)} does not carry over. This change needs a new decision.`);
180
+ return null;
181
+ }
182
+ result.catch_up = approvedHead === null ? 'clean' : 'carried-over';
183
+ if (approvedHead !== null && ctx.recordingLogin !== null) {
184
+ const decision = (await forgeRead(() => reviewStateOf(ctx.env.git, checkout.cwd, ctx.base, ctx.forge, ctx.recordingLogin, pull))).decision;
185
+ await record(ctx, result, 'carry-over', () => ctx.forge.createReview(pull.number, {
186
+ event: 'APPROVE',
187
+ commitId: rebased,
188
+ body: decisionBody({ ...decision, decision: 'approve', head: rebased, carriedFrom: decision.carriedFrom ?? approvedHead, comment: null }),
189
+ }));
190
+ }
191
+ return rebased;
192
+ }
193
+ await git(ctx, ['rebase', '--abort'], checkout.cwd, true);
194
+ if (ctx.resolver === null) {
195
+ result.catch_up = 'conflict';
196
+ result.outcome = 'blocked';
197
+ result.reason = 'conflict';
198
+ await recordLanding(ctx, result, pull.number, 'blocked', 'conflict', pull.headSha, `Rebasing onto ${ctx.base} conflicts, and this store names no conflict resolver. A person or an agent session resolves it.`);
199
+ return null;
200
+ }
201
+ const exit = await runResolverFor(ctx, checkout.cwd, pull);
202
+ const refusal = exit === 0 ? await acceptResolution(ctx, checkout.cwd) : `resolver-exit-${exit}`;
203
+ if (refusal !== null) {
204
+ // Leave the branch as the forge has it: put the checkout back where it was.
205
+ if (await rebaseInProgress(ctx, checkout.cwd))
206
+ await git(ctx, ['rebase', '--abort'], checkout.cwd, true);
207
+ await git(ctx, ['reset', '--hard', '--quiet', pull.headSha], checkout.cwd, true);
208
+ result.catch_up = 'conflict';
209
+ result.outcome = 'blocked';
210
+ result.reason = refusal;
211
+ await recordLanding(ctx, result, pull.number, 'blocked', refusal, pull.headSha, `Rebasing onto ${ctx.base} conflicts, and the resolver's result was not accepted (${refusal}). Nothing was pushed.`);
212
+ return null;
213
+ }
214
+ const resolved = (await git(ctx, ['rev-parse', 'HEAD'], checkout.cwd)).stdout.trim();
215
+ if (!(await leasedPush(ctx, checkout.cwd, pull.headRef, pull.headSha))) {
216
+ result.outcome = 'lease-refused';
217
+ result.reason = `the branch moved after ${pull.headSha.slice(0, 7)} was read, so the leased push was refused`;
218
+ return null;
219
+ }
220
+ result.catch_up = 'conflict-resolved';
221
+ result.outcome = 'needs-reapproval';
222
+ result.reason = 'conflict-resolved';
223
+ await recordLanding(ctx, result, pull.number, 'needs-reapproval', 'conflict-resolved', resolved, `Rebasing onto ${ctx.base} conflicted. The configured resolver resolved it as ${resolved.slice(0, 7)}, which nobody has approved yet. This change needs a new decision.`);
224
+ return null;
225
+ }
226
+ finally {
227
+ await checkout.dispose();
228
+ }
229
+ }
230
+ /** write-lifecycle spec: after the forge reports merged — sync the canonical clone, reclaim the worktree, record the landing. */
231
+ async function afterMerge(ctx, result, pull, session) {
232
+ await remoteGit(ctx, ['fetch', '--quiet', 'origin', ctx.defaultBranch], ctx.canonical, true);
233
+ const onBranch = (await git(ctx, ['symbolic-ref', '--quiet', '--short', 'HEAD'], ctx.canonical, true)).stdout.trim();
234
+ if (onBranch !== ctx.defaultBranch) {
235
+ result.canonical_sync = { synced: false, reason: `the canonical clone is on "${onBranch || 'a detached HEAD'}", not ${ctx.defaultBranch}` };
236
+ }
237
+ else {
238
+ const ff = await git(ctx, ['merge', '--ff-only', '--quiet', `origin/${ctx.defaultBranch}`], ctx.canonical, true);
239
+ result.canonical_sync = ff.exitCode === 0 ? { synced: true, reason: null } : { synced: false, reason: `the canonical clone has diverged from origin/${ctx.defaultBranch}` };
240
+ }
241
+ if (session === undefined) {
242
+ result.reclaim = { removed: false, reason: 'no session worktree for this branch' };
243
+ }
244
+ else if (path.resolve(ctx.store.root).startsWith(path.resolve(session.path) + path.sep) || path.resolve(ctx.store.root) === path.resolve(session.path)) {
245
+ result.reclaim = { removed: false, reason: 'this command is running inside that worktree' };
246
+ }
247
+ else if (!(await isClean(ctx, session.path))) {
248
+ result.reclaim = { removed: false, reason: 'the worktree has uncommitted work' };
249
+ }
250
+ else {
251
+ const removed = await git(ctx, ['worktree', 'remove', session.path], ctx.canonical, true);
252
+ if (removed.exitCode !== 0) {
253
+ result.reclaim = { removed: false, reason: removed.stderr.trim() };
254
+ }
255
+ else {
256
+ // The forge said merged; a squashed branch never looks merged to git's ancestry test.
257
+ await git(ctx, ['branch', '-D', session.branch], ctx.canonical, true);
258
+ result.reclaim = { removed: true, reason: null };
259
+ }
260
+ }
261
+ if (session !== undefined) {
262
+ await writeLandingRecord(ctx.canonicalStoreRoot, {
263
+ worktree: session.name,
264
+ branch: session.branch,
265
+ pull_request: pull.number,
266
+ merged_commit: result.merged_commit,
267
+ landed_at: ctx.env.now().toISOString(),
268
+ });
269
+ }
270
+ }
271
+ async function landOne(ctx, number, confirm) {
272
+ let pull = await forgeRead(() => ctx.forge.pull(number));
273
+ if (pull.headRef === ctx.defaultBranch) {
274
+ throw new LandRefusedError('default_branch', `Pull request #${number}'s head is the default branch "${ctx.defaultBranch}", which is never landed.`, { pull_request: number });
275
+ }
276
+ const sessions = await sessionWorktrees(ctx.env.git, ctx.canonical, ctx.store.config);
277
+ const session = sessions.find((s) => s.branch === pull.headRef);
278
+ const result = emptyResult(number, session?.name ?? null);
279
+ // A retry after the merge went through performs only what remains.
280
+ if (pull.merged) {
281
+ result.merged_commit = pull.mergeCommitSha;
282
+ await afterMerge(ctx, result, pull, session);
283
+ return result;
284
+ }
285
+ if (pull.state !== 'open') {
286
+ throw new LandRefusedError('not_open', `Pull request #${number} is closed without being merged.`, { pull_request: number });
287
+ }
288
+ await remoteGit(ctx, ['fetch', '--quiet', 'origin', ctx.defaultBranch, pull.headRef], ctx.canonical, true);
289
+ let approvedHead = null;
290
+ if (confirm) {
291
+ result.consent = 'confirm';
292
+ }
293
+ else {
294
+ const state = await forgeRead(() => reviewStateOf(ctx.env.git, ctx.canonical, ctx.base, ctx.forge, ctx.recordingLogin, pull));
295
+ if (state.state !== 'approved' || state.decision === null) {
296
+ result.outcome = 'no-consent';
297
+ result.state = state.state;
298
+ result.reason = `pull request #${number} is ${state.state}; landing needs an approval of its current head, or --confirm`;
299
+ return result;
300
+ }
301
+ result.consent = 'recorded';
302
+ approvedHead = state.decision.head;
303
+ }
304
+ const head = await catchUp(ctx, result, pull, session, approvedHead);
305
+ if (head === null)
306
+ return result;
307
+ try {
308
+ await ctx.forge.merge(number, { method: ctx.mergeMethod, sha: head });
309
+ }
310
+ catch (err) {
311
+ if (!(err instanceof ForgeRequestError))
312
+ throw err;
313
+ }
314
+ // Never claim a merge from the merge call alone.
315
+ pull = await forgeRead(() => ctx.forge.pull(number));
316
+ if (!pull.merged) {
317
+ result.outcome = 'merge-refused';
318
+ result.reason = 'the forge did not merge the pull request; it may be waiting on checks or branch protection, and a later run retries';
319
+ return result;
320
+ }
321
+ result.outcome = 'merged';
322
+ result.merged_commit = pull.mergeCommitSha;
323
+ await afterMerge(ctx, result, pull, session);
324
+ return result;
325
+ }
326
+ function findingFor(result) {
327
+ if (result.outcome === 'merged')
328
+ return null;
329
+ return {
330
+ code: `land.${result.outcome.replace(/-/g, '_')}`,
331
+ severity: result.outcome === 'needs-reapproval' ? 'warning' : 'error',
332
+ message: `#${result.pull_request}: ${result.reason ?? result.outcome}`,
333
+ subject: String(result.pull_request),
334
+ };
335
+ }
336
+ function summaryLine(r) {
337
+ const parts = [`#${r.pull_request} ${r.outcome}`];
338
+ if (r.catch_up !== null)
339
+ parts.push(`catch-up ${r.catch_up}`);
340
+ if (r.merged_commit !== null)
341
+ parts.push(`merged as ${r.merged_commit.slice(0, 7)}`);
342
+ if (r.canonical_sync !== null)
343
+ parts.push(r.canonical_sync.synced ? 'canonical clone synced' : `canonical clone not synced: ${r.canonical_sync.reason}`);
344
+ if (r.reclaim !== null)
345
+ parts.push(r.reclaim.removed ? 'worktree removed' : `worktree kept: ${r.reclaim.reason}`);
346
+ if (r.reason !== null && r.outcome !== 'merged')
347
+ parts.push(r.reason);
348
+ if (r.records_reported_only.length > 0)
349
+ parts.push(`not posted (credential is not the recording login): ${r.records_reported_only.join(', ')}`);
350
+ return parts.join(' | ');
351
+ }
352
+ /**
353
+ * write-lifecycle spec ("Landing merges only a head that carries consent"):
354
+ * one pull request, or with `--pending` every session pull request whose
355
+ * current head carries an approval. design.md D1: this is code because the
356
+ * runner acting on a page approval has no agent in it, and the consent check is
357
+ * the one thing that must be enforced rather than instructed.
358
+ */
359
+ export async function execute(env, store, flags, forge) {
360
+ if (flags.pending && flags.confirm)
361
+ throw new LandFlagsError('--pending lands only recorded approvals, so it does not take --confirm.');
362
+ if (flags.pending === (flags.pr !== undefined))
363
+ throw new LandFlagsError('Name one pull request number, or pass --pending — not both, and not neither.');
364
+ if (flags.pr !== undefined && (!Number.isInteger(flags.pr) || flags.pr <= 0))
365
+ throw new LandFlagsError('The pull request must be a positive whole number.');
366
+ const approval = store.config.change_approval;
367
+ if (flags.pending && approval === undefined)
368
+ throw new ChangeApprovalNotDeclaredError('ctxr land --pending');
369
+ const credentials = forge === undefined ? await credentialsFor(env, store.root) : ghCredentials(env.env);
370
+ const client = forge ?? createGhForgeClient(store.root, credentials);
371
+ const canonical = await mainWorktreePath(env.git, store.root);
372
+ const prefix = await storePrefix(env.git, store.root);
373
+ const defaultBranch = store.config.git.default_branch;
374
+ const recordingLogin = approval?.recording_login ?? null;
375
+ const ctx = {
376
+ env,
377
+ store,
378
+ forge: client,
379
+ credentials,
380
+ canonical,
381
+ canonicalStoreRoot: path.join(canonical, prefix),
382
+ prefix,
383
+ defaultBranch,
384
+ base: `origin/${defaultBranch}`,
385
+ recordingLogin,
386
+ canRecord: recordingLogin !== null && (await forgeRead(() => client.login())) === recordingLogin,
387
+ mergeMethod: approval?.merge_method ?? 'squash',
388
+ resolver: approval?.resolver ?? null,
389
+ };
390
+ const results = [];
391
+ if (flags.pending) {
392
+ await remoteGit(ctx, ['fetch', '--quiet', 'origin'], canonical, true);
393
+ const approved = (await sessionPulls(env.git, canonical, store.config, client, recordingLogin)).filter((p) => p.review.state === 'approved');
394
+ // Each is re-read inside landOne, immediately before its merge, so a decision changed meanwhile is honoured.
395
+ for (const p of approved)
396
+ results.push(await landOne(ctx, p.pull.number, false));
397
+ }
398
+ else {
399
+ if (!flags.confirm && approval === undefined)
400
+ throw new ChangeApprovalNotDeclaredError('ctxr land without --confirm');
401
+ results.push(await landOne(ctx, flags.pr, flags.confirm));
402
+ }
403
+ const findings = results.map(findingFor).filter((f) => f !== null);
404
+ const failed = flags.pending ? results.some((r) => r.outcome !== 'merged' && r.outcome !== 'needs-reapproval') : results.some((r) => r.outcome !== 'merged');
405
+ return {
406
+ exitCode: failed ? ExitCode.CheckFailed : ExitCode.Ok,
407
+ data: { credential: client.credential, results },
408
+ findings,
409
+ humanSummary: results.length === 0 ? 'No approved session pull request to land.' : results.map(summaryLine).join('\n'),
410
+ storeRoot: store.root,
411
+ schemaVersion: store.config.schema_version,
412
+ };
413
+ }
414
+ //# sourceMappingURL=land.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"land.js","sourceRoot":"","sources":["../../src/commands/land.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,WAAW,EAA2B,MAAM,8BAA8B,CAAC;AAClG,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3E,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,aAAa,EAAE,YAAY,EAAE,gBAAgB,EAAwB,MAAM,8BAA8B,CAAC;AAI3I,OAAO,EAAE,8BAA8B,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrG,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,aAAa,EAA8C,MAAM,8BAA8B,CAAC;AACzH,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAwD,MAAM,yBAAyB,CAAC;AACvI,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAChH,OAAO,EAAE,SAAS,EAAc,MAAM,kBAAkB,CAAC;AACzD,OAAO,KAAK,mBAAmB,MAAM,oBAAoB,CAAC;AAC1D,OAAO,KAAK,aAAa,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,iBAAiB,MAAM,kBAAkB,CAAC;AAEtD,MAAM,CAAC,MAAM,QAAQ,GAAoB,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;AAqD/D,SAAS,WAAW,CAAC,MAAc,EAAE,QAAuB;IAC1D,OAAO;QACL,YAAY,EAAE,MAAM;QACpB,QAAQ;QACR,OAAO,EAAE,QAAQ;QACjB,OAAO,EAAE,IAAI;QACb,KAAK,EAAE,IAAI;QACX,MAAM,EAAE,IAAI;QACZ,QAAQ,EAAE,IAAI;QACd,aAAa,EAAE,IAAI;QACnB,cAAc,EAAE,IAAI;QACpB,OAAO,EAAE,IAAI;QACb,cAAc,EAAE,EAAE;QAClB,qBAAqB,EAAE,EAAE;KAC1B,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,GAAG,CAAC,GAAY,EAAE,IAAuB,EAAE,GAAW,EAAE,YAAY,GAAG,KAAK;IACzF,OAAO,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC,CAAC;AACtD,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,YAAY,GAAG,4EAA4E,CAAC;AAElG,KAAK,UAAU,SAAS,CAAC,GAAY,EAAE,IAAuB,EAAE,GAAW,EAAE,YAAY,GAAG,KAAK;IAC/F,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;IAC/C,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC;IAC7D,OAAO,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,qBAAqB,YAAY,EAAE,EAAE,GAAG,IAAI,CAAC,EAAE;QACvG,GAAG;QACH,YAAY;QACZ,GAAG,EAAE,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,cAAc,EAAE,KAAK,EAAE,mBAAmB,EAAE,GAAG,EAAE;KACzE,CAAC,CAAC;AACL,CAAC;AAED,gIAAgI;AAChI,KAAK,UAAU,MAAM,CAAC,GAAY,EAAE,MAAkB,EAAE,KAAa,EAAE,IAAyB;IAC9F,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;QACnB,MAAM,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzC,OAAO;IACT,CAAC;IACD,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC;IACtB,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACpC,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,GAAY,EAAE,MAAkB,EAAE,MAAc,EAAE,KAAyB,EAAE,MAAc,EAAE,IAAY,EAAE,QAAgB;IACtJ,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC;IACvC,MAAM,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,KAAK,IAAI,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC7I,CAAC;AAED,KAAK,UAAU,OAAO,CAAC,GAAY,EAAE,GAAW;IAC9C,OAAO,CAAC,MAAM,GAAG,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,aAAa,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;AAC/E,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,GAAY,EAAE,GAAW;IACvD,KAAK,MAAM,IAAI,IAAI,CAAC,cAAc,EAAE,cAAc,CAAC,EAAE,CAAC;QACpD,MAAM,OAAO,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,YAAY,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACvF,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;YACvC,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;GAKG;AACH,KAAK,UAAU,WAAW,CAAC,GAAY,EAAE,OAAoC,EAAE,IAAY;IACzF,IAAI,OAAO,KAAK,SAAS,IAAI,CAAC,MAAM,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;QAChE,MAAM,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAC/E,IAAI,EAAE,KAAK,IAAI;YAAE,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,SAAS,EAAE,CAAC;IAChF,CAAC;IACD,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC;IAC7D,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAChD,MAAM,mBAAmB,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,SAAS,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;IACjE,OAAO;QACL,GAAG,EAAE,GAAG;QACR,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,MAAM,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;YACtD,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAChD,MAAM,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;QACnD,CAAC;KACF,CAAC;AACJ,CAAC;AAED,+GAA+G;AAC/G,KAAK,UAAU,cAAc,CAAC,GAAY,EAAE,GAAW,EAAE,IAAiB;IACxE,OAAO,WAAW,CAAC;QACjB,IAAI,EAAE,GAAG,CAAC,QAAS;QACnB,MAAM,EAAE,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,aAAa,CAAC;QAChE,GAAG;QACH,GAAG,EAAE,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,cAAc,EAAE,GAAG,CAAC,IAAI,EAAE;QACpF,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM;KAC1B,CAAC,CAAC;AACL,CAAC;AAED,4HAA4H;AAC5H,KAAK,UAAU,gBAAgB,CAAC,GAAY,EAAE,GAAW;IACvD,IAAI,MAAM,gBAAgB,CAAC,GAAG,EAAE,GAAG,CAAC;QAAE,OAAO,oBAAoB,CAAC;IAClE,IAAI,CAAC,CAAC,MAAM,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAAE,OAAO,kBAAkB,CAAC;IAC1D,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,GAAG,EAAE,CAAC,YAAY,EAAE,eAAe,EAAE,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;IAC9F,IAAI,QAAQ,CAAC,QAAQ,KAAK,CAAC;QAAE,OAAO,oBAAoB,CAAC;IACzD,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACnF,uHAAuH;QACvH,MAAM,mBAAmB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAC/C,MAAM,iBAAiB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAC7C,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;QACjE,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ,CAAC,EAAE;YAAE,OAAO,IAAI,CAAC;QACjD,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC;YAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,iBAAiB,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,OAAO,IAAI,CAAC,CAAC;QAC5J,OAAO,eAAe,CAAC;IACzB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,iEAAiE;QACjE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,iBAAiB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC/F,OAAO,eAAe,CAAC;IACzB,CAAC;AACH,CAAC;AAED,6HAA6H;AAC7H,KAAK,UAAU,UAAU,CAAC,GAAY,EAAE,GAAW,EAAE,MAAc,EAAE,QAAgB;IACnF,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,iCAAiC,MAAM,IAAI,QAAQ,EAAE,EAAE,QAAQ,EAAE,mBAAmB,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;IACvJ,OAAO,MAAM,CAAC,QAAQ,KAAK,CAAC,CAAC;AAC/B,CAAC;AAED;;;;;GAKG;AACH,KAAK,UAAU,OAAO,CAAC,GAAY,EAAE,MAAkB,EAAE,IAAiB,EAAE,OAAoC,EAAE,YAA2B;IAC3I,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,GAAG,EAAE,CAAC,YAAY,EAAE,eAAe,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAC5G,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,CAAC,QAAQ,GAAG,YAAY,CAAC;QAC/B,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IAC/D,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,kBAAkB,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAC7G,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;YAC1B,MAAM,OAAO,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACpF,MAAM,IAAI,GAAG,YAAY,KAAK,IAAI,IAAI,CAAC,MAAM,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC;YACtH,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;gBACvE,MAAM,CAAC,OAAO,GAAG,eAAe,CAAC;gBACjC,MAAM,CAAC,MAAM,GAAG,0BAA0B,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,2CAA2C,CAAC;gBAC9G,OAAO,IAAI,CAAC;YACd,CAAC;YACD,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,MAAM,CAAC,QAAQ,GAAG,iBAAiB,CAAC;gBACpC,MAAM,CAAC,OAAO,GAAG,kBAAkB,CAAC;gBACpC,MAAM,CAAC,MAAM,GAAG,iEAAiE,CAAC;gBAClF,MAAM,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,OAAO,EAC1F,gBAAgB,GAAG,CAAC,IAAI,wDAAwD,YAAa,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,yDAAyD,CAAC,CAAC;gBACtK,OAAO,IAAI,CAAC;YACd,CAAC;YACD,MAAM,CAAC,QAAQ,GAAG,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC;YACnE,IAAI,YAAY,KAAK,IAAI,IAAI,GAAG,CAAC,cAAc,KAAK,IAAI,EAAE,CAAC;gBACzD,MAAM,QAAQ,GAAG,CAAC,MAAM,SAAS,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,cAAe,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,QAAS,CAAC;gBAC7I,MAAM,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,EAAE,CAC3C,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE;oBAClC,KAAK,EAAE,SAAS;oBAChB,QAAQ,EAAE,OAAO;oBACjB,IAAI,EAAE,YAAY,CAAC,EAAE,GAAG,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,CAAC,WAAW,IAAI,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;iBAC1I,CAAC,CACH,CAAC;YACJ,CAAC;YACD,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,MAAM,GAAG,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAC1D,IAAI,GAAG,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;YAC1B,MAAM,CAAC,QAAQ,GAAG,UAAU,CAAC;YAC7B,MAAM,CAAC,OAAO,GAAG,SAAS,CAAC;YAC3B,MAAM,CAAC,MAAM,GAAG,UAAU,CAAC;YAC3B,MAAM,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,CAAC,OAAO,EAC/E,iBAAiB,GAAG,CAAC,IAAI,kGAAkG,CAAC,CAAC;YAC/H,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAC3D,MAAM,OAAO,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,gBAAgB,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,iBAAiB,IAAI,EAAE,CAAC;QACjG,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;YACrB,4EAA4E;YAC5E,IAAI,MAAM,gBAAgB,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC;gBAAE,MAAM,GAAG,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YACzG,MAAM,GAAG,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YACjF,MAAM,CAAC,QAAQ,GAAG,UAAU,CAAC;YAC7B,MAAM,CAAC,OAAO,GAAG,SAAS,CAAC;YAC3B,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC;YACxB,MAAM,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAC5E,iBAAiB,GAAG,CAAC,IAAI,2DAA2D,OAAO,wBAAwB,CAAC,CAAC;YACvH,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,QAAQ,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACrF,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;YACvE,MAAM,CAAC,OAAO,GAAG,eAAe,CAAC;YACjC,MAAM,CAAC,MAAM,GAAG,0BAA0B,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,2CAA2C,CAAC;YAC9G,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,CAAC,QAAQ,GAAG,mBAAmB,CAAC;QACtC,MAAM,CAAC,OAAO,GAAG,kBAAkB,CAAC;QACpC,MAAM,CAAC,MAAM,GAAG,mBAAmB,CAAC;QACpC,MAAM,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,QAAQ,EAC7F,iBAAiB,GAAG,CAAC,IAAI,uDAAuD,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,oEAAoE,CAAC,CAAC;QAC5K,OAAO,IAAI,CAAC;IACd,CAAC;YAAS,CAAC;QACT,MAAM,QAAQ,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;AACH,CAAC;AAED,iIAAiI;AACjI,KAAK,UAAU,UAAU,CAAC,GAAY,EAAE,MAAkB,EAAE,IAAiB,EAAE,OAAoC;IACjH,MAAM,SAAS,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,CAAC,aAAa,CAAC,EAAE,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAC7F,MAAM,QAAQ,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,EAAE,CAAC,cAAc,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IACrH,IAAI,QAAQ,KAAK,GAAG,CAAC,aAAa,EAAE,CAAC;QACnC,MAAM,CAAC,cAAc,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,8BAA8B,QAAQ,IAAI,iBAAiB,UAAU,GAAG,CAAC,aAAa,EAAE,EAAE,CAAC;IAC9I,CAAC;SAAM,CAAC;QACN,MAAM,EAAE,GAAG,MAAM,GAAG,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,GAAG,CAAC,aAAa,EAAE,CAAC,EAAE,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QACjH,MAAM,CAAC,cAAc,GAAG,EAAE,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,gDAAgD,GAAG,CAAC,aAAa,EAAE,EAAE,CAAC;IAC9K,CAAC;IAED,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,CAAC,OAAO,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,qCAAqC,EAAE,CAAC;IACrF,CAAC;SAAM,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACzJ,MAAM,CAAC,OAAO,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,8CAA8C,EAAE,CAAC;IAC9F,CAAC;SAAM,IAAI,CAAC,CAAC,MAAM,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;QAC/C,MAAM,CAAC,OAAO,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,mCAAmC,EAAE,CAAC;IACnF,CAAC;SAAM,CAAC;QACN,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,GAAG,EAAE,CAAC,UAAU,EAAE,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAC1F,IAAI,OAAO,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;YAC3B,MAAM,CAAC,OAAO,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;QACrE,CAAC;aAAM,CAAC;YACN,sFAAsF;YACtF,MAAM,GAAG,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YACtE,MAAM,CAAC,OAAO,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;QACnD,CAAC;IACH,CAAC;IAED,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,kBAAkB,CAAC,GAAG,CAAC,kBAAkB,EAAE;YAC/C,QAAQ,EAAE,OAAO,CAAC,IAAI;YACtB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,YAAY,EAAE,IAAI,CAAC,MAAM;YACzB,aAAa,EAAE,MAAM,CAAC,aAAa;YACnC,SAAS,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;SACvC,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,KAAK,UAAU,OAAO,CAAC,GAAY,EAAE,MAAc,EAAE,OAAgB;IACnE,IAAI,IAAI,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IACzD,IAAI,IAAI,CAAC,OAAO,KAAK,GAAG,CAAC,aAAa,EAAE,CAAC;QACvC,MAAM,IAAI,gBAAgB,CAAC,gBAAgB,EAAE,iBAAiB,MAAM,kCAAkC,GAAG,CAAC,aAAa,2BAA2B,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,CAAC;IAChL,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACtF,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,OAAO,CAAC,CAAC;IAChE,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,IAAI,IAAI,CAAC,CAAC;IAE1D,mEAAmE;IACnE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,MAAM,CAAC,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC;QAC3C,MAAM,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QAC7C,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM,EAAE,CAAC;QAC1B,MAAM,IAAI,gBAAgB,CAAC,UAAU,EAAE,iBAAiB,MAAM,kCAAkC,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,CAAC;IAC9H,CAAC;IAED,MAAM,SAAS,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAE3G,IAAI,YAAY,GAAkB,IAAI,CAAC;IACvC,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,CAAC,OAAO,GAAG,SAAS,CAAC;IAC7B,CAAC;SAAM,CAAC;QACN,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,cAAe,EAAE,IAAI,CAAC,CAAC,CAAC;QAC/H,IAAI,KAAK,CAAC,KAAK,KAAK,UAAU,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;YAC1D,MAAM,CAAC,OAAO,GAAG,YAAY,CAAC;YAC9B,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;YAC3B,MAAM,CAAC,MAAM,GAAG,iBAAiB,MAAM,OAAO,KAAK,CAAC,KAAK,+DAA+D,CAAC;YACzH,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,MAAM,CAAC,OAAO,GAAG,UAAU,CAAC;QAC5B,YAAY,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;IACrC,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;IACrE,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,MAAM,CAAC;IAEjC,IAAI,CAAC;QACH,MAAM,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,WAAW,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;IACxE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,CAAC,GAAG,YAAY,iBAAiB,CAAC;YAAE,MAAM,GAAG,CAAC;IACrD,CAAC;IACD,iDAAiD;IACjD,IAAI,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IACrD,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QACjB,MAAM,CAAC,OAAO,GAAG,eAAe,CAAC;QACjC,MAAM,CAAC,MAAM,GAAG,qHAAqH,CAAC;QACtI,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,MAAM,CAAC,OAAO,GAAG,QAAQ,CAAC;IAC1B,MAAM,CAAC,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC;IAC3C,MAAM,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC7C,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,UAAU,CAAC,MAAkB;IACpC,IAAI,MAAM,CAAC,OAAO,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC7C,OAAO;QACL,IAAI,EAAE,QAAQ,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE;QACjD,QAAQ,EAAE,MAAM,CAAC,OAAO,KAAK,kBAAkB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO;QACrE,OAAO,EAAE,IAAI,MAAM,CAAC,YAAY,KAAK,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE;QACtE,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC;KACrC,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,CAAa;IAChC,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;IAClD,IAAI,CAAC,CAAC,QAAQ,KAAK,IAAI;QAAE,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC9D,IAAI,CAAC,CAAC,aAAa,KAAK,IAAI;QAAE,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACrF,IAAI,CAAC,CAAC,cAAc,KAAK,IAAI;QAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,+BAA+B,CAAC,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC;IACzJ,IAAI,CAAC,CAAC,OAAO,KAAK,IAAI;QAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAClH,IAAI,CAAC,CAAC,MAAM,KAAK,IAAI,IAAI,CAAC,CAAC,OAAO,KAAK,QAAQ;QAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACtE,IAAI,CAAC,CAAC,qBAAqB,CAAC,MAAM,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAChJ,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC3B,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,GAAW,EAAE,KAAY,EAAE,KAAgB,EAAE,KAAmB;IAC5F,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO;QAAE,MAAM,IAAI,cAAc,CAAC,yEAAyE,CAAC,CAAC;IACxI,IAAI,KAAK,CAAC,OAAO,KAAK,CAAC,KAAK,CAAC,EAAE,KAAK,SAAS,CAAC;QAAE,MAAM,IAAI,cAAc,CAAC,8EAA8E,CAAC,CAAC;IACzJ,IAAI,KAAK,CAAC,EAAE,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC;QAAE,MAAM,IAAI,cAAc,CAAC,mDAAmD,CAAC,CAAC;IAC5J,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,eAAe,CAAC;IAC9C,IAAI,KAAK,CAAC,OAAO,IAAI,QAAQ,KAAK,SAAS;QAAE,MAAM,IAAI,8BAA8B,CAAC,qBAAqB,CAAC,CAAC;IAE7G,MAAM,WAAW,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,cAAc,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACzG,MAAM,MAAM,GAAG,KAAK,IAAI,mBAAmB,CAAC,KAAK,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IACrE,MAAM,SAAS,GAAG,MAAM,gBAAgB,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IAC9D,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IACtD,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC;IACtD,MAAM,cAAc,GAAG,QAAQ,EAAE,eAAe,IAAI,IAAI,CAAC;IACzD,MAAM,GAAG,GAAY;QACnB,GAAG;QACH,KAAK;QACL,KAAK,EAAE,MAAM;QACb,WAAW;QACX,SAAS;QACT,kBAAkB,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC;QAChD,MAAM;QACN,aAAa;QACb,IAAI,EAAE,UAAU,aAAa,EAAE;QAC/B,cAAc;QACd,SAAS,EAAE,cAAc,KAAK,IAAI,IAAI,CAAC,MAAM,SAAS,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,cAAc;QAChG,WAAW,EAAE,QAAQ,EAAE,YAAY,IAAI,QAAQ;QAC/C,QAAQ,EAAE,QAAQ,EAAE,QAAQ,IAAI,IAAI;KACrC,CAAC;IAEF,MAAM,OAAO,GAAiB,EAAE,CAAC;IACjC,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAClB,MAAM,SAAS,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;QACtE,MAAM,QAAQ,GAAG,CAAC,MAAM,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,EAAE,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,cAAe,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,KAAK,UAAU,CAAC,CAAC;QAC9I,6GAA6G;QAC7G,KAAK,MAAM,CAAC,IAAI,QAAQ;YAAE,OAAO,CAAC,IAAI,CAAC,MAAM,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;IACnF,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,QAAQ,KAAK,SAAS;YAAE,MAAM,IAAI,8BAA8B,CAAC,6BAA6B,CAAC,CAAC;QACtH,OAAO,CAAC,IAAI,CAAC,MAAM,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,EAAG,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IAC7D,CAAC;IAED,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAgB,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;IACjF,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,CAAC,OAAO,KAAK,kBAAkB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC;IAC7J,OAAO;QACL,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE;QACrD,IAAI,EAAE,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,OAAO,EAAE;QAChD,QAAQ;QACR,YAAY,EAAE,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,2CAA2C,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QACtH,SAAS,EAAE,KAAK,CAAC,IAAI;QACrB,aAAa,EAAE,KAAK,CAAC,MAAM,CAAC,cAAc;KAC3C,CAAC;AACJ,CAAC"}
@@ -1,5 +1,6 @@
1
1
  import { type ServedAt } from '../core/browse/page-url.js';
2
2
  import type { CommandOutcome, CommandRequires } from '../core/command.js';
3
+ import { type PageLifespan } from '../core/publish/lifespan.js';
3
4
  import type { Store } from '../core/store.js';
4
5
  export declare const requires: CommandRequires;
5
6
  export interface PublishCheckFlags {
@@ -19,6 +20,11 @@ export interface PublishCheckData {
19
20
  * which is the same verdict `checkPageLocation` reaches for such a file.
20
21
  */
21
22
  served_at: ServedAt | null;
23
+ /**
24
+ * two-kinds-of-published-page: read from where the page is filed. Null for a
25
+ * file outside the configured publish path, which is not a page.
26
+ */
27
+ lifespan: PageLifespan | null;
22
28
  }
23
29
  /**
24
30
  * publish spec: the mechanized half of the page-checklist — every check
@@ -1 +1 @@
1
- {"version":3,"file":"publish-check.d.ts","sourceRoot":"","sources":["../../src/commands/publish-check.ts"],"names":[],"mappings":"AAGA,OAAO,EAAgB,KAAK,QAAQ,EAAoB,MAAM,4BAA4B,CAAC;AAC3F,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAK1E,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAE9C,eAAO,MAAM,QAAQ,EAAE,eAAuC,CAAC;AAE/D,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,mBAAmB,EAAE,CAAC;IAChC;;;;OAIG;IACH,SAAS,EAAE,QAAQ,GAAG,IAAI,CAAC;CAC5B;AAoGD;;;;;GAKG;AACH,wBAAsB,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC,CAmD/G"}
1
+ {"version":3,"file":"publish-check.d.ts","sourceRoot":"","sources":["../../src/commands/publish-check.ts"],"names":[],"mappings":"AAGA,OAAO,EAAgB,KAAK,QAAQ,EAAoB,MAAM,4BAA4B,CAAC;AAC3F,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAK1E,OAAO,EAAkC,KAAK,YAAY,EAAuB,MAAM,6BAA6B,CAAC;AAGrH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAE9C,eAAO,MAAM,QAAQ,EAAE,eAAuC,CAAC;AAE/D,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,mBAAmB,EAAE,CAAC;IAChC;;;;OAIG;IACH,SAAS,EAAE,QAAQ,GAAG,IAAI,CAAC;IAC3B;;;OAGG;IACH,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAC;CAC/B;AAoKD;;;;;GAKG;AACH,wBAAsB,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC,CA4D/G"}
@@ -4,7 +4,10 @@ import path from 'node:path';
4
4
  import { pageServedAt, servedAtSentence } from '../core/browse/page-url.js';
5
5
  import { PublishPageNotFoundError } from '../core/errors.js';
6
6
  import { ExitCode } from '../core/exit-codes.js';
7
+ import { listNotes } from '../core/notes/list.js';
7
8
  import { parseNoteText } from '../core/notes/parse.js';
9
+ import { DISPOSABLE_SEGMENT, lifespanOf, parseDisposableDate } from '../core/publish/lifespan.js';
10
+ import { assessRepresentation } from '../core/publish/represents.js';
8
11
  import { checkScriptSyntax } from '../core/publish/script-check.js';
9
12
  export const requires = { store: 'required' };
10
13
  /** publish spec: the fixed tag list a tag-balance pass counts, matching the source convention's checker. */
@@ -65,6 +68,69 @@ function checkPageLocation(relativePath, publishPath) {
65
68
  },
66
69
  ];
67
70
  }
71
+ /**
72
+ * two-kinds-of-published-page D2: a disposable page sits exactly one level
73
+ * under the reserved segment, its name led by the date `publish new
74
+ * --disposable` stamped. Anything else filed under the segment — a permanent
75
+ * page placed there by hand, a nested folder — is disposable by location and
76
+ * fails here, so the misfiling is named without knowing the author's intent.
77
+ */
78
+ function checkDisposableShape(relativePath, publishPath) {
79
+ const publishPrefix = publishPath.split(path.sep).join('/').replace(/\/+$/, '');
80
+ const pageFolder = path.posix.dirname(relativePath.slice(publishPrefix.length + 1));
81
+ const segments = pageFolder.split('/');
82
+ if (segments.length === 2 && segments[0] === DISPOSABLE_SEGMENT && parseDisposableDate(segments[1]) !== null)
83
+ return [];
84
+ return [
85
+ {
86
+ check: 'disposable-shape',
87
+ message: `a disposable page sits directly under "${publishPrefix}/${DISPOSABLE_SEGMENT}/" in a folder named "<YYYY-MM-DD>-<name>" with a real date; this one is at "${publishPrefix}/${pageFolder}"`,
88
+ },
89
+ ];
90
+ }
91
+ /**
92
+ * two-kinds-of-published-page D4/D5: a permanent page names the one note it
93
+ * represents — its README's lead link — and records that note's hash, so a
94
+ * change to the note after the page was built is reported, not remembered.
95
+ */
96
+ function checkRepresentation(readmeRaw, readmePath, notes) {
97
+ const representation = assessRepresentation(readmeRaw, readmePath, notes);
98
+ switch (representation.status) {
99
+ case 'no-link':
100
+ return [{ check: 'represented-note', message: 'the README names no note: lead its source notes with a wikilink to the one note this page represents' }];
101
+ case 'not-found':
102
+ return [{ check: 'represented-note', message: `the README's first wikilink names "${representation.target}", which no note in the store carries` }];
103
+ case 'ambiguous':
104
+ return [
105
+ {
106
+ check: 'represented-note',
107
+ message: `the README's first wikilink "${representation.target}" resolves to more than one note: ${representation.candidates.join(', ')}`,
108
+ },
109
+ ];
110
+ case 'not-stamped':
111
+ return [{ check: 'represented-note-hash', message: `not stamped: run "ctxr publish stamp" to record the hash of "${representation.note}"` }];
112
+ case 'stale':
113
+ return [
114
+ {
115
+ check: 'represented-note-hash',
116
+ message: `stale: "${representation.note}" has changed since the page was stamped — review the page against it, remove the marker, and stamp again`,
117
+ },
118
+ ];
119
+ case 'current':
120
+ return [];
121
+ }
122
+ }
123
+ /**
124
+ * two-kinds-of-published-page: the summary names a failing check by its id,
125
+ * plus — for the hash check — which of its two reasons applies, because "not
126
+ * stamped" and "stale" ask the author for different things (stamp, versus
127
+ * review then remove the marker then stamp).
128
+ */
129
+ function summaryLabel(failure) {
130
+ if (failure.check !== 'represented-note-hash')
131
+ return failure.check;
132
+ return `${failure.check} (${failure.message.startsWith('stale') ? 'stale' : 'not stamped'})`;
133
+ }
68
134
  function checkProvenanceLine(html) {
69
135
  const hasDate = /\d{4}-\d{2}-\d{2}/.test(html);
70
136
  const hasReadmeLink = /href\s*=\s*["'][^"']*readme[^"']*["']/i.test(html);
@@ -127,6 +193,9 @@ export async function execute(store, flags) {
127
193
  ...checkTagBalance(html),
128
194
  ...checkPageLocation(relativePath, store.config.publish.path),
129
195
  ];
196
+ const lifespan = lifespanOf(relativePath, store.config.publish.path);
197
+ if (lifespan === 'disposable')
198
+ failures.push(...checkDisposableShape(relativePath, store.config.publish.path));
130
199
  if (!existsSync(readmePath)) {
131
200
  failures.push({ check: 'sibling-readme', message: `no sibling README at "${readmeRelativePath}"` });
132
201
  }
@@ -136,19 +205,25 @@ export async function execute(store, flags) {
136
205
  if (readmeNote.frontmatter?.kind !== undefined) {
137
206
  failures.push({ check: 'readme-frontmatter', message: 'README declares a "kind" field — a page\'s kind is the folder name alone' });
138
207
  }
208
+ if (lifespan === 'permanent') {
209
+ // Loaded once per run (tasks 4.1); the check still writes nothing.
210
+ const notes = await listNotes(store.root, store.config);
211
+ failures.push(...checkRepresentation(readmeRaw, readmeRelativePath, notes));
212
+ }
139
213
  }
140
214
  failures.push(...(await checkInlineScriptSyntax(html)));
141
215
  // Reported on both exit paths: a page whose checks failed is exactly the one
142
216
  // somebody needs to open, and naming its address gates nothing.
143
217
  const servedAt = pageServedAt(store, relativePath);
144
218
  const sentence = servedAtSentence(servedAt);
219
+ const lifespanTag = lifespan === null ? '' : ` (${lifespan})`;
145
220
  return {
146
221
  exitCode: failures.length === 0 ? ExitCode.Ok : ExitCode.CheckFailed,
147
- data: { path: relativePath, passed: failures.length === 0, failures, served_at: servedAt },
222
+ data: { path: relativePath, passed: failures.length === 0, failures, served_at: servedAt, lifespan },
148
223
  findings: [],
149
224
  humanSummary: failures.length === 0
150
- ? `${relativePath}: all checks passed.${sentence}`
151
- : `${relativePath}: ${failures.length} failing check(s): ${failures.map((f) => f.check).join(', ')}.${sentence}`,
225
+ ? `${relativePath}${lifespanTag}: all checks passed.${sentence}`
226
+ : `${relativePath}${lifespanTag}: ${failures.length} failing check(s): ${failures.map(summaryLabel).join(', ')}.${sentence}`,
152
227
  storeRoot: store.root,
153
228
  schemaVersion: store.config.schema_version,
154
229
  };
@@ -1 +1 @@
1
- {"version":3,"file":"publish-check.js","sourceRoot":"","sources":["../../src/commands/publish-check.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"publish-check.js","sourceRoot":"","sources":["../../src/commands/publish-check.ts"],"names":[],"mappings":"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"}