@cat-factory/kernel 0.327.0 → 0.329.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 (47) hide show
  1. package/dist/domain/environment-reachability.logic.d.ts +34 -0
  2. package/dist/domain/environment-reachability.logic.d.ts.map +1 -1
  3. package/dist/domain/environment-reachability.logic.js +75 -3
  4. package/dist/domain/environment-reachability.logic.js.map +1 -1
  5. package/dist/domain/monorepo-adoption.logic.d.ts +87 -0
  6. package/dist/domain/monorepo-adoption.logic.d.ts.map +1 -0
  7. package/dist/domain/monorepo-adoption.logic.js +323 -0
  8. package/dist/domain/monorepo-adoption.logic.js.map +1 -0
  9. package/dist/domain/pr-report.d.ts +27 -3
  10. package/dist/domain/pr-report.d.ts.map +1 -1
  11. package/dist/domain/pr-report.js +28 -10
  12. package/dist/domain/pr-report.js.map +1 -1
  13. package/dist/domain/service-registration.d.ts +11 -3
  14. package/dist/domain/service-registration.d.ts.map +1 -1
  15. package/dist/domain/service-registration.js +9 -1
  16. package/dist/domain/service-registration.js.map +1 -1
  17. package/dist/domain/types.d.ts +1 -1
  18. package/dist/domain/types.d.ts.map +1 -1
  19. package/dist/index.d.ts +3 -2
  20. package/dist/index.d.ts.map +1 -1
  21. package/dist/index.js +8 -3
  22. package/dist/index.js.map +1 -1
  23. package/dist/ports/agent-runs.d.ts +4 -1
  24. package/dist/ports/agent-runs.d.ts.map +1 -1
  25. package/dist/ports/bootstrap-repositories.d.ts +49 -2
  26. package/dist/ports/bootstrap-repositories.d.ts.map +1 -1
  27. package/dist/ports/bootstrap-runner.d.ts +15 -8
  28. package/dist/ports/bootstrap-runner.d.ts.map +1 -1
  29. package/dist/ports/bootstrap-runner.js.map +1 -1
  30. package/dist/ports/environment-investigation.d.ts +51 -1
  31. package/dist/ports/environment-investigation.d.ts.map +1 -1
  32. package/dist/ports/environment-provider.d.ts +22 -2
  33. package/dist/ports/environment-provider.d.ts.map +1 -1
  34. package/dist/ports/environment-repositories.d.ts +27 -1
  35. package/dist/ports/environment-repositories.d.ts.map +1 -1
  36. package/dist/ports/index.d.ts +4 -3
  37. package/dist/ports/index.d.ts.map +1 -1
  38. package/dist/ports/index.js.map +1 -1
  39. package/dist/ports/monorepo-adoption.d.ts +37 -0
  40. package/dist/ports/monorepo-adoption.d.ts.map +1 -0
  41. package/dist/ports/monorepo-adoption.js +2 -0
  42. package/dist/ports/monorepo-adoption.js.map +1 -0
  43. package/dist/ports/repo-bootstrapper.d.ts +89 -3
  44. package/dist/ports/repo-bootstrapper.d.ts.map +1 -1
  45. package/dist/ports/repo-files.d.ts +16 -0
  46. package/dist/ports/repo-files.d.ts.map +1 -1
  47. package/package.json +2 -2
@@ -114,6 +114,40 @@ export declare function describeUnreachableEnvironment(url: string | null, proof
114
114
  * than merely harmless.
115
115
  */
116
116
  export declare function describeInconclusiveRoute(url: string | null, proof: EnvironmentRouteProof): string;
117
+ /**
118
+ * `<target> (<outcome>: <detail>), …` for every target a proof tried, or the empty string when it
119
+ * tried none.
120
+ *
121
+ * Exported because THREE surfaces render this same list from the same field, and they had drifted
122
+ * into three copies of the template: the two operator sentences below, the investigation's
123
+ * timeline entry, and the investigation prompt's own route section. A change to the attempt shape
124
+ * that has to be found in three packages is a change that gets made in two, which is how one of
125
+ * them came to ship the detail unscrubbed while its neighbour scrubbed it.
126
+ *
127
+ * Renders whatever it is handed. Redaction and capping belong to whoever owns the BOUNDARY the
128
+ * string is crossing (the diagnostics gatherer does both for the prompt and the telemetry store),
129
+ * because an operator reading a failed deploy and a model reading a prompt are owed different
130
+ * amounts of the probe's own words.
131
+ */
132
+ export declare function describeRouteTargets(attempts: readonly EnvironmentRouteAttempt[]): string;
133
+ /**
134
+ * The cause an unreachable environment's own route evidence SETTLES, or null when it settles none.
135
+ *
136
+ * The platform computing what it can compute, so a reader is not left to rank a determinate cause
137
+ * against an inferred one. Both members here name an owner and a concrete fix, and both were
138
+ * SUBORDINATED to a wrong headline in the failure that filed this: the investigation found "no
139
+ * balancer or address field was captured at all" and filed it as one bullet under a verdict
140
+ * blaming a platform readiness gate that had in fact worked, sending a human to change three
141
+ * behaviours that were already correct.
142
+ *
143
+ * Deliberately narrow. It answers only where NOTHING was available to dial, which is a fact about
144
+ * the platform's own inputs rather than a judgement about the environment: whether the workload is
145
+ * healthy, whether the provider is lying and whether anything is worth retrying all stay the
146
+ * model's to settle. `reached` and `inconclusive` therefore settle nothing here, the second
147
+ * because it is an admission about the platform and naming it a cause is how "we could not tell"
148
+ * comes to read as a verdict.
149
+ */
150
+ export declare function determinateRouteCause(candidates: readonly EnvironmentAddress[], proof: EnvironmentRouteProof | null): string | null;
117
151
  /**
118
152
  * The proof recorded when nothing was wired to open a socket.
119
153
  *
@@ -1 +1 @@
1
- {"version":3,"file":"environment-reachability.logic.d.ts","sourceRoot":"","sources":["../../src/domain/environment-reachability.logic.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EACV,kBAAkB,EAClB,uBAAuB,EACvB,qBAAqB,EACrB,4BAA4B,EAC7B,MAAM,wBAAwB,CAAA;AAE/B,OAAO,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAMnF,gFAAgF;AAChF,eAAO,MAAM,sBAAsB,OAAO,CAAA;AAE1C;;;;;;;;GAQG;AACH,eAAO,MAAM,oBAAoB,IAAI,CAAA;AAErC;;;;;;;GAOG;AACH,MAAM,MAAM,gBAAgB;AAC1B,yFAAyF;AACvF;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,iBAAiB,CAAC;IAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE;AACrF,0FAA0F;GACxF;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,4BAA4B,CAAA;CAAE,CAAA;AAE7F;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAC/B,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAC/B,UAAU,GAAE,SAAS,kBAAkB,EAAO,EAC9C,SAAS,GAAE,MAA+B,GACzC,gBAAgB,EAAE,CA4BpB;AA8BD;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,OAAO,CAAC,gBAAgB,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,EACnD,OAAO,EAAE,iBAAiB,GACzB,uBAAuB,CAQzB;AAED,sGAAsG;AACtG,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,OAAO,CAAC,gBAAgB,EAAE;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,CAAC,GACrD,uBAAuB,CAEzB;AAwCD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,SAAS,uBAAuB,EAAE,EAC5C,UAAU,EAAE,MAAM,GAAG,IAAI,EACzB,SAAS,EAAE,MAAM,GAChB,qBAAqB,CA6BvB;AAcD;;;;;;;;;GASG;AACH,wBAAgB,8BAA8B,CAC5C,GAAG,EAAE,MAAM,GAAG,IAAI,EAClB,KAAK,EAAE,qBAAqB,GAC3B,MAAM,CAKR;AAED;;;;;;;;;GASG;AACH,wBAAgB,yBAAyB,CACvC,GAAG,EAAE,MAAM,GAAG,IAAI,EAClB,KAAK,EAAE,qBAAqB,GAC3B,MAAM,CAKR;AAaD;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,qBAAqB,CAEtE"}
1
+ {"version":3,"file":"environment-reachability.logic.d.ts","sourceRoot":"","sources":["../../src/domain/environment-reachability.logic.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EACV,kBAAkB,EAClB,uBAAuB,EACvB,qBAAqB,EACrB,4BAA4B,EAC7B,MAAM,wBAAwB,CAAA;AAE/B,OAAO,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAMnF,gFAAgF;AAChF,eAAO,MAAM,sBAAsB,OAAO,CAAA;AAE1C;;;;;;;;GAQG;AACH,eAAO,MAAM,oBAAoB,IAAI,CAAA;AAErC;;;;;;;GAOG;AACH,MAAM,MAAM,gBAAgB;AAC1B,yFAAyF;AACvF;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,iBAAiB,CAAC;IAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE;AACrF,0FAA0F;GACxF;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,4BAA4B,CAAA;CAAE,CAAA;AAE7F;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAC/B,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAC/B,UAAU,GAAE,SAAS,kBAAkB,EAAO,EAC9C,SAAS,GAAE,MAA+B,GACzC,gBAAgB,EAAE,CA4BpB;AA8BD;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,OAAO,CAAC,gBAAgB,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,EACnD,OAAO,EAAE,iBAAiB,GACzB,uBAAuB,CAQzB;AAED,sGAAsG;AACtG,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,OAAO,CAAC,gBAAgB,EAAE;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,CAAC,GACrD,uBAAuB,CAEzB;AAwCD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,SAAS,uBAAuB,EAAE,EAC5C,UAAU,EAAE,MAAM,GAAG,IAAI,EACzB,SAAS,EAAE,MAAM,GAChB,qBAAqB,CA6BvB;AAcD;;;;;;;;;GASG;AACH,wBAAgB,8BAA8B,CAC5C,GAAG,EAAE,MAAM,GAAG,IAAI,EAClB,KAAK,EAAE,qBAAqB,GAC3B,MAAM,CAKR;AAED;;;;;;;;;GASG;AACH,wBAAgB,yBAAyB,CACvC,GAAG,EAAE,MAAM,GAAG,IAAI,EAClB,KAAK,EAAE,qBAAqB,GAC3B,MAAM,CAKR;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,SAAS,uBAAuB,EAAE,GAAG,MAAM,CAOzF;AAQD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,SAAS,kBAAkB,EAAE,EACzC,KAAK,EAAE,qBAAqB,GAAG,IAAI,GAClC,MAAM,GAAG,IAAI,CAwCf;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,qBAAqB,CAEtE"}
@@ -251,13 +251,85 @@ export function describeInconclusiveRoute(url, proof) {
251
251
  const where = url ? `The route to the environment at ${url}` : 'The route to the environment';
252
252
  return `${where} could not be established either way: ${cause}.${describeRouteAttempts(proof)}`;
253
253
  }
254
- /** ` Tried: <target> (<outcome>: <detail>), ….`, or empty when nothing was tried. */
255
- function describeRouteAttempts(proof) {
256
- const tried = proof.attempts
254
+ /**
255
+ * `<target> (<outcome>: <detail>), …` for every target a proof tried, or the empty string when it
256
+ * tried none.
257
+ *
258
+ * Exported because THREE surfaces render this same list from the same field, and they had drifted
259
+ * into three copies of the template: the two operator sentences below, the investigation's
260
+ * timeline entry, and the investigation prompt's own route section. A change to the attempt shape
261
+ * that has to be found in three packages is a change that gets made in two, which is how one of
262
+ * them came to ship the detail unscrubbed while its neighbour scrubbed it.
263
+ *
264
+ * Renders whatever it is handed. Redaction and capping belong to whoever owns the BOUNDARY the
265
+ * string is crossing (the diagnostics gatherer does both for the prompt and the telemetry store),
266
+ * because an operator reading a failed deploy and a model reading a prompt are owed different
267
+ * amounts of the probe's own words.
268
+ */
269
+ export function describeRouteTargets(attempts) {
270
+ return attempts
257
271
  .map((attempt) => `${attempt.target} (${attempt.outcome}${attempt.detail ? `: ${attempt.detail}` : ''})`)
258
272
  .join(', ');
273
+ }
274
+ /** ` Tried: <target> (<outcome>: <detail>), ….`, or empty when nothing was tried. */
275
+ function describeRouteAttempts(proof) {
276
+ const tried = describeRouteTargets(proof.attempts);
259
277
  return tried ? ` Tried: ${tried}.` : '';
260
278
  }
279
+ /**
280
+ * The cause an unreachable environment's own route evidence SETTLES, or null when it settles none.
281
+ *
282
+ * The platform computing what it can compute, so a reader is not left to rank a determinate cause
283
+ * against an inferred one. Both members here name an owner and a concrete fix, and both were
284
+ * SUBORDINATED to a wrong headline in the failure that filed this: the investigation found "no
285
+ * balancer or address field was captured at all" and filed it as one bullet under a verdict
286
+ * blaming a platform readiness gate that had in fact worked, sending a human to change three
287
+ * behaviours that were already correct.
288
+ *
289
+ * Deliberately narrow. It answers only where NOTHING was available to dial, which is a fact about
290
+ * the platform's own inputs rather than a judgement about the environment: whether the workload is
291
+ * healthy, whether the provider is lying and whether anything is worth retrying all stay the
292
+ * model's to settle. `reached` and `inconclusive` therefore settle nothing here, the second
293
+ * because it is an admission about the platform and naming it a cause is how "we could not tell"
294
+ * comes to read as a verdict.
295
+ */
296
+ export function determinateRouteCause(candidates, proof) {
297
+ if (!proof)
298
+ return null;
299
+ // `no_candidate` arrives as `inconclusive` from {@link reduceRouteProof} (nothing was tried, so
300
+ // nothing was established) and is checked ahead of the state for exactly that reason: it is the
301
+ // one reason whose cause is determinate WITHOUT a verdict about the environment, because the
302
+ // environment published no host and port to dial in the first place.
303
+ if (proof.reason === 'no_candidate') {
304
+ if (candidates.length === 0) {
305
+ return ('This environment carries no address to dial at all: no URL with a host and port, and no ' +
306
+ 'address stated for one. Nothing was tried because there was nothing to try, so this is a ' +
307
+ 'fact about what the provider published, never a verdict about the environment. Whoever ' +
308
+ 'maps this provider onto a URL (and onto stated addresses, if the name is not resolvable ' +
309
+ 'from this deployment) owns the fix.');
310
+ }
311
+ // The SAME reason, a different fact, and telling a reader the provider stated no addresses
312
+ // when it stated several is the misdirection this whole function exists to prevent. A stated
313
+ // address is dialled on the port the URL names (`planRouteProbes` needs a host AND a port
314
+ // before it will plan anything), so an environment with addresses and no parseable URL had
315
+ // nothing to dial them ON, and the fix is one field over from where the empty-list wording
316
+ // would send someone.
317
+ const count = candidates.length === 1 ? '1 address' : `${candidates.length} addresses`;
318
+ return (`This environment published no URL with a host and port, so the ${count} its provider DID ` +
319
+ 'state could not be dialled either: an address is tried on the port the URL names, and ' +
320
+ 'there was none. Nothing was tried because there was nothing to try it on, so this is a ' +
321
+ 'fact about what the provider published, never a verdict about the environment. Whoever ' +
322
+ "maps this provider onto the environment's URL owns the fix; the stated addresses are not " +
323
+ 'the gap here.');
324
+ }
325
+ if (proof.state !== 'not_reached' || candidates.length > 0)
326
+ return null;
327
+ return ("The only target that ever existed was the environment's own name, because the provider " +
328
+ 'stated no addresses for it. Nothing else was tried because there was nothing else to try: ' +
329
+ 'the empty candidate list means addresses were never STATED, not that stated addresses were ' +
330
+ 'tried and failed. Whoever maps this provider onto stated addresses owns the fix, and this ' +
331
+ 'ranks ahead of any fault inferred from the ORDER platform events appear to have happened in.');
332
+ }
261
333
  /**
262
334
  * The proof recorded when nothing was wired to open a socket.
263
335
  *
@@ -1 +1 @@
1
- {"version":3,"file":"environment-reachability.logic.js","sourceRoot":"","sources":["../../src/domain/environment-reachability.logic.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"environment-reachability.logic.js","sourceRoot":"","sources":["../../src/domain/environment-reachability.logic.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,87 @@
1
+ import { type AdoptionArea, type AdoptionChoice, type AdoptionDecision, type AdoptionPlan, type AdoptionSource, type AdoptionSurvey, type ResolvedAdoption } from '@cat-factory/contracts';
2
+ /** Cap on how many decisions one plan may carry, so a runaway reply can't produce a wall of them. */
3
+ export declare const MAX_ADOPTION_DECISIONS = 24;
4
+ /**
5
+ * One convention area, in the words the review UI and the agent brief both use.
6
+ *
7
+ * The `default` is unreachable while the type is honoured, which is the point: adding a member
8
+ * fails the build here, and a member RETIRED after a plan was stored still renders honestly
9
+ * instead of splicing `undefined` into the sentence a human is deciding from.
10
+ */
11
+ export declare function describeAdoptionArea(area: AdoptionArea): string;
12
+ /** One side of the decision, as an instruction an agent can act on without further inference. */
13
+ export declare function describeAdoptionSource(source: AdoptionSource): string;
14
+ /** Whether a stored string is an area THIS build defines, narrowed from the schema's own options. */
15
+ export declare function isAdoptionArea(value: unknown): value is AdoptionArea;
16
+ /** Whether a stored string is a choice THIS build defines, narrowed from the schema's own options. */
17
+ export declare function isAdoptionSource(value: unknown): value is AdoptionSource;
18
+ /** What {@link parseAdoptionDecisions} produced, plus what it refused to carry through. */
19
+ export interface ParsedAdoptionDecisions {
20
+ decisions: AdoptionDecision[];
21
+ /** One line per dropped recommendation, naming it and why. Rendered to the reviewer. */
22
+ dropped: string[];
23
+ }
24
+ /**
25
+ * Read a model's raw reply into the stored decision list, keeping only what it can support.
26
+ *
27
+ * The model is asked for `{ decisions: [...] }`; anything else is not a plan. Each decision has
28
+ * to survive three checks, and each one is a way the review would otherwise mislead:
29
+ *
30
+ * - a duplicate or missing `id` makes the human's answer unaddressable, so the line is dropped;
31
+ * - an area or recommendation outside the CURRENT vocabulary cannot be rendered or acted on;
32
+ * - evidence that names no path the survey actually read means the claim about the monorepo
33
+ * has nothing behind it. The line is dropped rather than shown unmarked, because a reviewer
34
+ * reads an unmarked line as something the platform checked.
35
+ *
36
+ * Every drop is REPORTED, never silent: a plan that lost half its lines to invention looks
37
+ * exactly like a monorepo with few conventions, and those need opposite reactions.
38
+ */
39
+ export declare function parseAdoptionDecisions(raw: unknown, survey: AdoptionSurvey): ParsedAdoptionDecisions;
40
+ /**
41
+ * Settle a human review against the plan it answers, or throw the refusal naming what is wrong.
42
+ *
43
+ * Refuses rather than repairs, on both sides of the mismatch. An UNANSWERED decision cannot be
44
+ * defaulted to the recommendation without erasing the difference between agreeing with it and
45
+ * never having read it, which is the single fact this whole step exists to record. An answer
46
+ * naming a decision the plan does not have means the reviewer was looking at a different plan
47
+ * (a stale tab, a re-run survey), and applying the rest of it would build under a review that
48
+ * was never given for this proposal.
49
+ */
50
+ export declare function resolveAdoptionReview(plan: AdoptionPlan, choices: readonly AdoptionChoice[], context: {
51
+ reviewedByUserId: string | null;
52
+ reviewedAt: number;
53
+ notes?: string | undefined;
54
+ }): ResolvedAdoption;
55
+ /**
56
+ * Render the settled review as the adoption section of the apply phase's brief.
57
+ *
58
+ * Every decision is stated as a SIDE plus the reviewer's own words where they left any, and the
59
+ * overrides are called out: an agent told only "use the monorepo's test runner" cannot tell a
60
+ * default it may reason around from a human who deliberately overruled the recommendation, and
61
+ * the second is not negotiable. The list is exhaustive on purpose: an area the reviewer settled
62
+ * and the brief omits is an area the agent decides again, unreviewed.
63
+ *
64
+ * The holes are VERBATIM here. {@link renderAdoptionPrSection} is the rendering for the pull
65
+ * request; do not send this one to a host.
66
+ */
67
+ export declare function renderAdoptionBrief(resolved: ResolvedAdoption, directory: string): string;
68
+ /**
69
+ * Render the settled review for the PULL REQUEST the apply phase opens.
70
+ *
71
+ * The same list, addressed to the human reviewing the change rather than to the agent making it:
72
+ * what a reviewer of a bootstrap PR is being asked is whether the service fits the monorepo, and
73
+ * what settles that is which side each area came from and who chose it, which the diff cannot
74
+ * show. Every hole crosses {@link HOST_SINK}, because both the titles (model-authored) and the
75
+ * notes (reviewer-authored) are untrusted text landing on a parsed surface. The caller scrubs
76
+ * secrets at compose time, before any of this is capped.
77
+ */
78
+ export declare function renderAdoptionPrSection(resolved: ResolvedAdoption, directory: string): string;
79
+ /**
80
+ * The default branch name for a monorepo bootstrap's pull request.
81
+ *
82
+ * Derived from the run's own id rather than the service name so two bootstraps of similarly
83
+ * named services can never collide on one branch, and stable per run so a retry of the SAME run
84
+ * resumes its branch instead of opening a second pull request against the monorepo.
85
+ */
86
+ export declare function monorepoBootstrapBranch(jobId: string): string;
87
+ //# sourceMappingURL=monorepo-adoption.logic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"monorepo-adoption.logic.d.ts","sourceRoot":"","sources":["../../src/domain/monorepo-adoption.logic.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EAEtB,MAAM,wBAAwB,CAAA;AAsB/B,qGAAqG;AACrG,eAAO,MAAM,sBAAsB,KAAK,CAAA;AAcxC;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,CA6B/D;AAOD,iGAAiG;AACjG,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAarE;AAED,qGAAqG;AACrG,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,YAAY,CAIpE;AAED,sGAAsG;AACtG,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,cAAc,CAIxE;AAED,2FAA2F;AAC3F,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,gBAAgB,EAAE,CAAA;IAC7B,wFAAwF;IACxF,OAAO,EAAE,MAAM,EAAE,CAAA;CAClB;AAmBD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,OAAO,EACZ,MAAM,EAAE,cAAc,GACrB,uBAAuB,CAiEzB;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,YAAY,EAClB,OAAO,EAAE,SAAS,cAAc,EAAE,EAClC,OAAO,EAAE;IAAE,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,GAC3F,gBAAgB,CA+ClB;AA8DD;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAUzF;AAED;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAe7F;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE7D"}
@@ -0,0 +1,323 @@
1
+ import { adoptionAreaSchema, adoptionSourceSchema, MAX_ADOPTION_DROP_LINES, } from '@cat-factory/contracts';
2
+ import * as hostMarkdown from '../shared/host-markdown.logic.js';
3
+ import { ValidationError } from './errors.js';
4
+ // ---------------------------------------------------------------------------
5
+ // The rules over a monorepo bootstrap's adoption plan: reading a model's proposal into the
6
+ // stored shape, settling a human review against it, and rendering the settled result as the
7
+ // brief the apply phase's agent works from.
8
+ //
9
+ // Pure (no repository, no model, no clock beyond what is passed), because every one of these
10
+ // is a place the flow can silently become useless, and the failure modes are only visible when
11
+ // they can be driven directly:
12
+ //
13
+ // - a recommendation whose EVIDENCE names nothing the survey read is the model asserting a
14
+ // monorepo convention it invented, and it is the one claim a reviewer cannot check by eye;
15
+ // - a review that leaves a decision unanswered must be REFUSED, not defaulted onto the
16
+ // recommendation, because "I agree" and "I did not look" are exactly what this step exists
17
+ // to tell apart;
18
+ // - a settled decision must reach the agent's brief in words that name a SIDE, since
19
+ // "adopt from the monorepo" and "keep the template's" are the whole deliverable.
20
+ // ---------------------------------------------------------------------------
21
+ /** Cap on how many decisions one plan may carry, so a runaway reply can't produce a wall of them. */
22
+ export const MAX_ADOPTION_DECISIONS = 24;
23
+ /**
24
+ * A stored area this build no longer defines, named as the retired value it is.
25
+ *
26
+ * Deliberately NOT mapped onto a current member: nothing here knows which one was meant, and a
27
+ * plan is PERSISTED, so a run parked before a vocabulary change is read back by exactly the
28
+ * surface whose job is to tell a human what they are approving. Guessing would put a wrong
29
+ * label on a decision that changes what gets built.
30
+ */
31
+ function describeRetiredArea(area) {
32
+ return `'${String(area)}' (an area this deployment no longer defines; re-run the survey)`;
33
+ }
34
+ /**
35
+ * One convention area, in the words the review UI and the agent brief both use.
36
+ *
37
+ * The `default` is unreachable while the type is honoured, which is the point: adding a member
38
+ * fails the build here, and a member RETIRED after a plan was stored still renders honestly
39
+ * instead of splicing `undefined` into the sentence a human is deciding from.
40
+ */
41
+ export function describeAdoptionArea(area) {
42
+ switch (area) {
43
+ case 'build-tooling':
44
+ return 'build tooling';
45
+ case 'dependencies':
46
+ return 'dependency versions and package management';
47
+ case 'lint-format':
48
+ return 'linting and formatting';
49
+ case 'typecheck':
50
+ return 'type checking';
51
+ case 'testing':
52
+ return 'test runner and test layout';
53
+ case 'ci':
54
+ return 'CI pipelines';
55
+ case 'containerization':
56
+ return 'containerization and image build';
57
+ case 'runtime-config':
58
+ return 'runtime configuration and secrets';
59
+ case 'observability':
60
+ return 'logging, metrics and tracing';
61
+ case 'source-layout':
62
+ return 'source layout and module structure';
63
+ case 'docs':
64
+ return 'documentation';
65
+ case 'other':
66
+ return 'other conventions';
67
+ default:
68
+ return describeRetiredArea(area);
69
+ }
70
+ }
71
+ /** A stored side this build no longer defines. Same rule, same reason, as {@link describeRetiredArea}. */
72
+ function describeRetiredSource(source) {
73
+ return `'${String(source)}' (a choice this deployment no longer defines; re-run the survey)`;
74
+ }
75
+ /** One side of the decision, as an instruction an agent can act on without further inference. */
76
+ export function describeAdoptionSource(source) {
77
+ switch (source) {
78
+ case 'monorepo':
79
+ return "adopt the monorepo's existing convention and drop the template's";
80
+ case 'template':
81
+ return "keep the reference template's version as-is";
82
+ case 'both':
83
+ return "compose the two: build on the monorepo's shared setup and layer the template's addition on top";
84
+ case 'neither':
85
+ return 'take neither: leave this out of the new service entirely';
86
+ default:
87
+ return describeRetiredSource(source);
88
+ }
89
+ }
90
+ /** Whether a stored string is an area THIS build defines, narrowed from the schema's own options. */
91
+ export function isAdoptionArea(value) {
92
+ return (typeof value === 'string' && adoptionAreaSchema.options.includes(value));
93
+ }
94
+ /** Whether a stored string is a choice THIS build defines, narrowed from the schema's own options. */
95
+ export function isAdoptionSource(value) {
96
+ return (typeof value === 'string' && adoptionSourceSchema.options.includes(value));
97
+ }
98
+ /** Every path the survey managed to read, in the prefixed form a decision's evidence uses. */
99
+ function surveyedPaths(survey) {
100
+ return new Set([
101
+ ...survey.monorepoPaths.map((path) => `monorepo:${path}`),
102
+ ...survey.templatePaths.map((path) => `template:${path}`),
103
+ ]);
104
+ }
105
+ function asString(value, max) {
106
+ return typeof value === 'string' ? value.trim().slice(0, max) : '';
107
+ }
108
+ function asNullableString(value, max) {
109
+ const text = asString(value, max);
110
+ return text.length > 0 ? text : null;
111
+ }
112
+ /**
113
+ * Read a model's raw reply into the stored decision list, keeping only what it can support.
114
+ *
115
+ * The model is asked for `{ decisions: [...] }`; anything else is not a plan. Each decision has
116
+ * to survive three checks, and each one is a way the review would otherwise mislead:
117
+ *
118
+ * - a duplicate or missing `id` makes the human's answer unaddressable, so the line is dropped;
119
+ * - an area or recommendation outside the CURRENT vocabulary cannot be rendered or acted on;
120
+ * - evidence that names no path the survey actually read means the claim about the monorepo
121
+ * has nothing behind it. The line is dropped rather than shown unmarked, because a reviewer
122
+ * reads an unmarked line as something the platform checked.
123
+ *
124
+ * Every drop is REPORTED, never silent: a plan that lost half its lines to invention looks
125
+ * exactly like a monorepo with few conventions, and those need opposite reactions.
126
+ */
127
+ export function parseAdoptionDecisions(raw, survey) {
128
+ const dropped = [];
129
+ let unreported = 0;
130
+ /** Record a drop, or count it once the report is full (contracts' `MAX_ADOPTION_DROP_LINES`). */
131
+ const drop = (line) => {
132
+ if (dropped.length < MAX_ADOPTION_DROP_LINES)
133
+ dropped.push(line);
134
+ else
135
+ unreported += 1;
136
+ };
137
+ const container = raw;
138
+ const list = Array.isArray(container?.decisions) ? container.decisions : null;
139
+ if (!list)
140
+ return { decisions: [], dropped: ['the reply carried no `decisions` array'] };
141
+ const known = surveyedPaths(survey);
142
+ const decisions = [];
143
+ const seen = new Set();
144
+ for (const entry of list) {
145
+ if (decisions.length >= MAX_ADOPTION_DECISIONS) {
146
+ drop(`the reply proposed more than ${MAX_ADOPTION_DECISIONS} decisions; the rest were not read`);
147
+ break;
148
+ }
149
+ const item = entry;
150
+ if (!item || typeof item !== 'object')
151
+ continue;
152
+ const id = asString(item.id, 80);
153
+ const title = asString(item.title, 200);
154
+ if (!id || !title) {
155
+ drop(`a proposed decision had no id or title (${id || title || 'unnamed'})`);
156
+ continue;
157
+ }
158
+ if (seen.has(id)) {
159
+ drop(`'${id}' was proposed twice; only the first was kept`);
160
+ continue;
161
+ }
162
+ if (!isAdoptionArea(item.area)) {
163
+ drop(`'${title}' named an area this deployment does not define`);
164
+ continue;
165
+ }
166
+ if (!isAdoptionSource(item.recommended)) {
167
+ drop(`'${title}' recommended a choice this deployment does not define`);
168
+ continue;
169
+ }
170
+ const evidence = Array.isArray(item.evidence)
171
+ ? item.evidence.filter((path) => typeof path === 'string' && known.has(path))
172
+ : [];
173
+ if (evidence.length === 0) {
174
+ drop(`'${title}' cited no file the survey actually read, so it was not carried through`);
175
+ continue;
176
+ }
177
+ seen.add(id);
178
+ decisions.push({
179
+ id,
180
+ area: item.area,
181
+ title,
182
+ monorepoPractice: asNullableString(item.monorepoPractice, 600),
183
+ templatePractice: asNullableString(item.templatePractice, 600),
184
+ recommended: item.recommended,
185
+ rationale: asString(item.rationale, 600),
186
+ evidence,
187
+ });
188
+ }
189
+ if (unreported > 0) {
190
+ dropped.push(`and ${unreported} further proposals were dropped for the same kinds of reason`);
191
+ }
192
+ return { decisions, dropped };
193
+ }
194
+ /**
195
+ * Settle a human review against the plan it answers, or throw the refusal naming what is wrong.
196
+ *
197
+ * Refuses rather than repairs, on both sides of the mismatch. An UNANSWERED decision cannot be
198
+ * defaulted to the recommendation without erasing the difference between agreeing with it and
199
+ * never having read it, which is the single fact this whole step exists to record. An answer
200
+ * naming a decision the plan does not have means the reviewer was looking at a different plan
201
+ * (a stale tab, a re-run survey), and applying the rest of it would build under a review that
202
+ * was never given for this proposal.
203
+ */
204
+ export function resolveAdoptionReview(plan, choices, context) {
205
+ // Deliberately NOT gated on `plan.status === 'ready'`. An `unavailable` plan carries no
206
+ // decisions, so settling it answers nothing, but it is still the human's decision to make, and
207
+ // refusing it strands the run: the review is the ONLY exit from the park, and a retry re-enters
208
+ // the same phase. A deployment with no adoption model would then be unable to bootstrap into a
209
+ // monorepo at all, which is the opposite of the "they just make it unaided" this flow promises.
210
+ // The two checks below are what keep that safe: nothing to answer means nothing may be
211
+ // answered, so a review aimed at a plan that has since been re-surveyed is still refused whole.
212
+ const byId = new Map(choices.map((choice) => [choice.id, choice]));
213
+ const unknown = choices.filter((choice) => !plan.decisions.some((d) => d.id === choice.id));
214
+ if (unknown.length > 0) {
215
+ throw new ValidationError(`The review answers decisions this plan does not contain: ${unknown
216
+ .map((choice) => `'${choice.id}'`)
217
+ .join(', ')}. Reload the plan and review it again.`, { reason: 'adoption_choice_unknown', ids: unknown.map((choice) => choice.id) });
218
+ }
219
+ const missing = plan.decisions.filter((decision) => !byId.has(decision.id));
220
+ if (missing.length > 0) {
221
+ throw new ValidationError(`Every adoption decision must be answered; ${missing.length} ${missing.length === 1 ? 'is' : 'are'} still open: ${missing.map((decision) => `'${decision.title}'`).join(', ')}.`, { reason: 'adoption_review_incomplete', ids: missing.map((decision) => decision.id) });
222
+ }
223
+ const decisions = plan.decisions.map((decision) => {
224
+ // Total by construction: `missing` above already refused any decision with no answer.
225
+ const choice = byId.get(decision.id);
226
+ return {
227
+ id: decision.id,
228
+ area: decision.area,
229
+ title: decision.title,
230
+ choice: choice.choice,
231
+ overrodeRecommendation: choice.choice !== decision.recommended,
232
+ note: choice.note?.trim() ? choice.note.trim() : null,
233
+ };
234
+ });
235
+ const notes = context.notes?.trim();
236
+ return {
237
+ decisions,
238
+ notes: notes ? notes : null,
239
+ reviewedByUserId: context.reviewedByUserId,
240
+ reviewedAt: context.reviewedAt,
241
+ };
242
+ }
243
+ /** The prompt sink: verbatim, because the reader is a model and the text is its instruction. */
244
+ const AGENT_SINK = { inline: (value) => value, prose: (value) => value };
245
+ /** The host sink: every auto-link trigger neutralised, every hole capped and fence-balanced. */
246
+ const HOST_SINK = {
247
+ inline: (value) => hostMarkdown.inline(value),
248
+ prose: (value) => hostMarkdown.prose(value),
249
+ };
250
+ /** The shared body of both renderings; only the holes differ (see {@link AdoptionTextSink}). */
251
+ function renderAdoptionDecisions(resolved, sink, lead) {
252
+ const lines = [
253
+ `## Adoption decisions (settled by a human reviewer; follow them exactly)`,
254
+ '',
255
+ lead,
256
+ '',
257
+ ];
258
+ if (resolved.decisions.length === 0) {
259
+ lines.push('_The reviewer settled no areas: follow the surrounding monorepo wherever it has an ' +
260
+ 'established convention, and the template only where it does not._', '');
261
+ }
262
+ for (const decision of resolved.decisions) {
263
+ const override = decision.overrodeRecommendation ? ' (reviewer overrode the suggestion)' : '';
264
+ lines.push(`- **${sink.inline(decision.title)}** (${describeAdoptionArea(decision.area)}): ` +
265
+ `${describeAdoptionSource(decision.choice)}${override}.` +
266
+ (decision.note ? `\n Reviewer's note: ${sink.inline(decision.note)}` : ''));
267
+ }
268
+ if (resolved.notes) {
269
+ lines.push('', '### Reviewer notes for the service as a whole', '', sink.prose(resolved.notes));
270
+ }
271
+ return lines.join('\n');
272
+ }
273
+ /**
274
+ * Render the settled review as the adoption section of the apply phase's brief.
275
+ *
276
+ * Every decision is stated as a SIDE plus the reviewer's own words where they left any, and the
277
+ * overrides are called out: an agent told only "use the monorepo's test runner" cannot tell a
278
+ * default it may reason around from a human who deliberately overruled the recommendation, and
279
+ * the second is not negotiable. The list is exhaustive on purpose: an area the reviewer settled
280
+ * and the brief omits is an area the agent decides again, unreviewed.
281
+ *
282
+ * The holes are VERBATIM here. {@link renderAdoptionPrSection} is the rendering for the pull
283
+ * request; do not send this one to a host.
284
+ */
285
+ export function renderAdoptionBrief(resolved, directory) {
286
+ return renderAdoptionDecisions(resolved, AGENT_SINK, `The new service lives at \`${directory}\`. For each area below, a reviewer has decided ` +
287
+ `whether it follows the surrounding monorepo or the reference template. These are ` +
288
+ `decisions, not suggestions: do not substitute your own judgement for one of them, and ` +
289
+ `if a decision turns out to be impossible as stated, do the closest thing that honours it ` +
290
+ `and say so in the pull request description rather than quietly picking the other side.`);
291
+ }
292
+ /**
293
+ * Render the settled review for the PULL REQUEST the apply phase opens.
294
+ *
295
+ * The same list, addressed to the human reviewing the change rather than to the agent making it:
296
+ * what a reviewer of a bootstrap PR is being asked is whether the service fits the monorepo, and
297
+ * what settles that is which side each area came from and who chose it, which the diff cannot
298
+ * show. Every hole crosses {@link HOST_SINK}, because both the titles (model-authored) and the
299
+ * notes (reviewer-authored) are untrusted text landing on a parsed surface. The caller scrubs
300
+ * secrets at compose time, before any of this is capped.
301
+ */
302
+ export function renderAdoptionPrSection(resolved, directory) {
303
+ const overrides = resolved.decisions.filter((decision) => decision.overrodeRecommendation).length;
304
+ const stance = resolved.decisions.length === 0
305
+ ? 'with no suggestion to review: the platform could not produce one'
306
+ : overrides > 0
307
+ ? `${overrides} of which overrode the platform's suggestion`
308
+ : "all of which accepted the platform's suggestion";
309
+ return renderAdoptionDecisions(resolved, HOST_SINK, `This service was bootstrapped into \`${hostMarkdown.inline(directory)}\` under decisions ` +
310
+ `settled by a human before any code was written, ${stance}. Each line below names the ` +
311
+ `area, the side the new service follows for it, and anything the reviewer added.`);
312
+ }
313
+ /**
314
+ * The default branch name for a monorepo bootstrap's pull request.
315
+ *
316
+ * Derived from the run's own id rather than the service name so two bootstraps of similarly
317
+ * named services can never collide on one branch, and stable per run so a retry of the SAME run
318
+ * resumes its branch instead of opening a second pull request against the monorepo.
319
+ */
320
+ export function monorepoBootstrapBranch(jobId) {
321
+ return `cat-factory/bootstrap-${jobId}`;
322
+ }
323
+ //# sourceMappingURL=monorepo-adoption.logic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"monorepo-adoption.logic.js","sourceRoot":"","sources":["../../src/domain/monorepo-adoption.logic.ts"],"names":[],"mappings":"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"}