@clossys/launcher 0.3.1 → 0.5.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 (290) hide show
  1. package/README.md +1373 -60
  2. package/contracts/conversation-contract.md +2 -2
  3. package/contracts/product-ci-workflow.yml +74 -0
  4. package/contracts/repository-inventory.json +53 -0
  5. package/dist/admission-fixture.d.ts +168 -0
  6. package/dist/admission-fixture.d.ts.map +1 -0
  7. package/dist/admission-fixture.js +467 -0
  8. package/dist/admission-fixture.js.map +1 -0
  9. package/dist/admission.d.ts +124 -0
  10. package/dist/admission.d.ts.map +1 -0
  11. package/dist/admission.js +804 -0
  12. package/dist/admission.js.map +1 -0
  13. package/dist/agents-guide.d.ts +9 -0
  14. package/dist/agents-guide.d.ts.map +1 -0
  15. package/dist/agents-guide.js +26 -0
  16. package/dist/agents-guide.js.map +1 -0
  17. package/dist/apply-command-options.check.d.ts +12 -0
  18. package/dist/apply-command-options.check.d.ts.map +1 -0
  19. package/dist/apply-command-options.check.js +20 -0
  20. package/dist/apply-command-options.check.js.map +1 -0
  21. package/dist/apply-plan-cli.d.ts +39 -1
  22. package/dist/apply-plan-cli.d.ts.map +1 -1
  23. package/dist/apply-plan-cli.js +432 -15
  24. package/dist/apply-plan-cli.js.map +1 -1
  25. package/dist/apply-plan.d.ts +46 -59
  26. package/dist/apply-plan.d.ts.map +1 -1
  27. package/dist/apply-plan.js +112 -97
  28. package/dist/apply-plan.js.map +1 -1
  29. package/dist/apply-step-fixture.d.ts +87 -0
  30. package/dist/apply-step-fixture.d.ts.map +1 -0
  31. package/dist/apply-step-fixture.js +199 -0
  32. package/dist/apply-step-fixture.js.map +1 -0
  33. package/dist/apply-store.d.ts +93 -0
  34. package/dist/apply-store.d.ts.map +1 -0
  35. package/dist/apply-store.js +625 -0
  36. package/dist/apply-store.js.map +1 -0
  37. package/dist/approval-sheet.d.ts +21 -0
  38. package/dist/approval-sheet.d.ts.map +1 -0
  39. package/dist/approval-sheet.js +163 -0
  40. package/dist/approval-sheet.js.map +1 -0
  41. package/dist/body-command.d.ts +42 -0
  42. package/dist/body-command.d.ts.map +1 -0
  43. package/dist/body-command.js +143 -0
  44. package/dist/body-command.js.map +1 -0
  45. package/dist/change-set-contract.d.ts +403 -0
  46. package/dist/change-set-contract.d.ts.map +1 -0
  47. package/dist/change-set-contract.js +781 -0
  48. package/dist/change-set-contract.js.map +1 -0
  49. package/dist/change-set-digest.d.ts +28 -0
  50. package/dist/change-set-digest.d.ts.map +1 -0
  51. package/dist/change-set-digest.js +65 -0
  52. package/dist/change-set-digest.js.map +1 -0
  53. package/dist/check-cli.d.ts.map +1 -1
  54. package/dist/check-cli.js +14 -3
  55. package/dist/check-cli.js.map +1 -1
  56. package/dist/cli.d.ts +17 -6
  57. package/dist/cli.d.ts.map +1 -1
  58. package/dist/cli.js +84 -23
  59. package/dist/cli.js.map +1 -1
  60. package/dist/core.d.ts +79 -22
  61. package/dist/core.d.ts.map +1 -1
  62. package/dist/core.js +843 -268
  63. package/dist/core.js.map +1 -1
  64. package/dist/dry-materialize.d.ts +63 -0
  65. package/dist/dry-materialize.d.ts.map +1 -0
  66. package/dist/dry-materialize.js +330 -0
  67. package/dist/dry-materialize.js.map +1 -0
  68. package/dist/existing-declaration-adoption.check.d.ts +2 -0
  69. package/dist/existing-declaration-adoption.check.d.ts.map +1 -0
  70. package/dist/existing-declaration-adoption.check.js +10 -0
  71. package/dist/existing-declaration-adoption.check.js.map +1 -0
  72. package/dist/generated/contract-schema.generated.d.ts +97 -0
  73. package/dist/generated/contract-schema.generated.d.ts.map +1 -0
  74. package/dist/generated/contract-schema.generated.js +496 -0
  75. package/dist/generated/contract-schema.generated.js.map +1 -0
  76. package/dist/generated/package-scope.generated.d.ts +6 -0
  77. package/dist/generated/package-scope.generated.d.ts.map +1 -0
  78. package/dist/generated/package-scope.generated.js +10 -0
  79. package/dist/generated/package-scope.generated.js.map +1 -0
  80. package/dist/generated/plan-contracts.generated.d.ts +3 -0
  81. package/dist/generated/plan-contracts.generated.d.ts.map +1 -0
  82. package/dist/generated/plan-contracts.generated.js +3101 -0
  83. package/dist/generated/plan-contracts.generated.js.map +1 -0
  84. package/dist/host.d.ts.map +1 -1
  85. package/dist/host.js +11 -0
  86. package/dist/host.js.map +1 -1
  87. package/dist/identity.d.ts +15 -0
  88. package/dist/identity.d.ts.map +1 -0
  89. package/dist/identity.js +48 -0
  90. package/dist/identity.js.map +1 -0
  91. package/dist/index.d.ts +35 -5
  92. package/dist/index.d.ts.map +1 -1
  93. package/dist/index.js +19 -2
  94. package/dist/index.js.map +1 -1
  95. package/dist/inventory-adoption.d.ts +24 -5
  96. package/dist/inventory-adoption.d.ts.map +1 -1
  97. package/dist/inventory-adoption.js +70 -25
  98. package/dist/inventory-adoption.js.map +1 -1
  99. package/dist/inventory-choice.d.ts +40 -0
  100. package/dist/inventory-choice.d.ts.map +1 -0
  101. package/dist/inventory-choice.js +156 -0
  102. package/dist/inventory-choice.js.map +1 -0
  103. package/dist/inventory-contract.d.ts +89 -0
  104. package/dist/inventory-contract.d.ts.map +1 -0
  105. package/dist/inventory-contract.js +121 -0
  106. package/dist/inventory-contract.js.map +1 -0
  107. package/dist/key-editor.d.ts +30 -0
  108. package/dist/key-editor.d.ts.map +1 -0
  109. package/dist/key-editor.js +445 -0
  110. package/dist/key-editor.js.map +1 -0
  111. package/dist/ledger-contract.d.ts +190 -0
  112. package/dist/ledger-contract.d.ts.map +1 -0
  113. package/dist/ledger-contract.js +555 -0
  114. package/dist/ledger-contract.js.map +1 -0
  115. package/dist/ledger-trust.d.ts +90 -0
  116. package/dist/ledger-trust.d.ts.map +1 -0
  117. package/dist/ledger-trust.js +203 -0
  118. package/dist/ledger-trust.js.map +1 -0
  119. package/dist/lockfile-invariants.d.ts +48 -0
  120. package/dist/lockfile-invariants.d.ts.map +1 -0
  121. package/dist/lockfile-invariants.js +375 -0
  122. package/dist/lockfile-invariants.js.map +1 -0
  123. package/dist/lockfile-readers.d.ts +72 -0
  124. package/dist/lockfile-readers.d.ts.map +1 -0
  125. package/dist/lockfile-readers.js +713 -0
  126. package/dist/lockfile-readers.js.map +1 -0
  127. package/dist/lockfile-regen.d.ts +106 -0
  128. package/dist/lockfile-regen.d.ts.map +1 -0
  129. package/dist/lockfile-regen.js +760 -0
  130. package/dist/lockfile-regen.js.map +1 -0
  131. package/dist/lockfile-tool-env.d.ts +29 -0
  132. package/dist/lockfile-tool-env.d.ts.map +1 -0
  133. package/dist/lockfile-tool-env.js +111 -0
  134. package/dist/lockfile-tool-env.js.map +1 -0
  135. package/dist/materialize.d.ts +113 -0
  136. package/dist/materialize.d.ts.map +1 -0
  137. package/dist/materialize.js +881 -0
  138. package/dist/materialize.js.map +1 -0
  139. package/dist/observe-repository.d.ts +90 -0
  140. package/dist/observe-repository.d.ts.map +1 -0
  141. package/dist/observe-repository.js +1367 -0
  142. package/dist/observe-repository.js.map +1 -0
  143. package/dist/plan-bundle-setup-fixture.d.ts +68 -0
  144. package/dist/plan-bundle-setup-fixture.d.ts.map +1 -0
  145. package/dist/plan-bundle-setup-fixture.js +167 -0
  146. package/dist/plan-bundle-setup-fixture.js.map +1 -0
  147. package/dist/plan-bundle.d.ts +256 -0
  148. package/dist/plan-bundle.d.ts.map +1 -0
  149. package/dist/plan-bundle.js +882 -0
  150. package/dist/plan-bundle.js.map +1 -0
  151. package/dist/plan-command.d.ts +29 -0
  152. package/dist/plan-command.d.ts.map +1 -0
  153. package/dist/plan-command.js +523 -0
  154. package/dist/plan-command.js.map +1 -0
  155. package/dist/plan-contract.d.ts +153 -0
  156. package/dist/plan-contract.d.ts.map +1 -0
  157. package/dist/plan-contract.js +61 -0
  158. package/dist/plan-contract.js.map +1 -0
  159. package/dist/plan-digest.d.ts +25 -0
  160. package/dist/plan-digest.d.ts.map +1 -0
  161. package/dist/plan-digest.js +106 -0
  162. package/dist/plan-digest.js.map +1 -0
  163. package/dist/plan-rules.d.ts +23 -0
  164. package/dist/plan-rules.d.ts.map +1 -0
  165. package/dist/plan-rules.js +177 -0
  166. package/dist/plan-rules.js.map +1 -0
  167. package/dist/planned-bundle.d.ts +20 -0
  168. package/dist/planned-bundle.d.ts.map +1 -0
  169. package/dist/planned-bundle.js +191 -0
  170. package/dist/planned-bundle.js.map +1 -0
  171. package/dist/product-repository.d.ts +4 -0
  172. package/dist/product-repository.d.ts.map +1 -1
  173. package/dist/product-repository.js +9 -1
  174. package/dist/product-repository.js.map +1 -1
  175. package/dist/provenance-gate.d.ts +48 -0
  176. package/dist/provenance-gate.d.ts.map +1 -0
  177. package/dist/provenance-gate.js +324 -0
  178. package/dist/provenance-gate.js.map +1 -0
  179. package/dist/pull-request-body.d.ts +45 -0
  180. package/dist/pull-request-body.d.ts.map +1 -0
  181. package/dist/pull-request-body.js +232 -0
  182. package/dist/pull-request-body.js.map +1 -0
  183. package/dist/registry-snapshot.d.ts +141 -0
  184. package/dist/registry-snapshot.d.ts.map +1 -0
  185. package/dist/registry-snapshot.js +483 -0
  186. package/dist/registry-snapshot.js.map +1 -0
  187. package/dist/release-age-edit.d.ts +52 -0
  188. package/dist/release-age-edit.d.ts.map +1 -0
  189. package/dist/release-age-edit.js +413 -0
  190. package/dist/release-age-edit.js.map +1 -0
  191. package/dist/root-entries.d.ts +36 -0
  192. package/dist/root-entries.d.ts.map +1 -0
  193. package/dist/root-entries.js +80 -0
  194. package/dist/root-entries.js.map +1 -0
  195. package/dist/setup-template-scripts.d.ts +36 -0
  196. package/dist/setup-template-scripts.d.ts.map +1 -0
  197. package/dist/setup-template-scripts.js +568 -0
  198. package/dist/setup-template-scripts.js.map +1 -0
  199. package/dist/setup-templates.d.ts +55 -0
  200. package/dist/setup-templates.d.ts.map +1 -0
  201. package/dist/setup-templates.js +438 -0
  202. package/dist/setup-templates.js.map +1 -0
  203. package/dist/skills.d.ts +34 -1
  204. package/dist/skills.d.ts.map +1 -1
  205. package/dist/skills.js +129 -17
  206. package/dist/skills.js.map +1 -1
  207. package/dist/status.d.ts +63 -0
  208. package/dist/status.d.ts.map +1 -0
  209. package/dist/status.js +539 -0
  210. package/dist/status.js.map +1 -0
  211. package/dist/types.d.ts +151 -13
  212. package/dist/types.d.ts.map +1 -1
  213. package/package.json +4 -4
  214. package/skeleton/README.md +14 -9
  215. package/skeleton/package.json +2 -1
  216. package/skill/SKILL.md +23 -7
  217. package/skill-catalogue/advisor/SKILL.md +59 -6
  218. package/skill-catalogue/architect/SKILL.md +2 -2
  219. package/skill-catalogue/bouncer/SKILL.md +2 -2
  220. package/skill-catalogue/builder/SKILL.md +2 -2
  221. package/skill-catalogue/butler/SKILL.md +2 -2
  222. package/skill-catalogue/controller/SKILL.md +2 -2
  223. package/skill-catalogue/customer/SKILL.md +2 -2
  224. package/skill-catalogue/designer/SKILL.md +4 -2
  225. package/skill-catalogue/giver/SKILL.md +2 -2
  226. package/skill-catalogue/influencer/SKILL.md +2 -2
  227. package/skill-catalogue/inspector/SKILL.md +2 -2
  228. package/skill-catalogue/integrator/SKILL.md +2 -2
  229. package/skill-catalogue/keeper/SKILL.md +2 -2
  230. package/skill-catalogue/launcher/SKILL.md +23 -7
  231. package/skill-catalogue/locksmith/SKILL.md +2 -2
  232. package/skill-catalogue/messenger/SKILL.md +2 -2
  233. package/skill-catalogue/observer/SKILL.md +2 -2
  234. package/skill-catalogue/publisher/SKILL.md +2 -2
  235. package/skill-catalogue/starter/SKILL.md +3 -2
  236. package/skill-catalogue/strategist/SKILL.md +12 -4
  237. package/skill-catalogue/writer/SKILL.md +2 -2
  238. package/src/admission-fixture.ts +585 -0
  239. package/src/admission.ts +819 -0
  240. package/src/agents-guide.ts +29 -0
  241. package/src/apply-command-options.check.ts +27 -0
  242. package/src/apply-plan-cli.ts +454 -14
  243. package/src/apply-plan.ts +112 -124
  244. package/src/apply-step-fixture.ts +236 -0
  245. package/src/apply-store.ts +584 -0
  246. package/src/approval-sheet.ts +170 -0
  247. package/src/body-command.ts +162 -0
  248. package/src/change-set-contract.ts +987 -0
  249. package/src/change-set-digest.ts +70 -0
  250. package/src/check-cli.ts +14 -3
  251. package/src/cli.ts +90 -22
  252. package/src/core.ts +973 -275
  253. package/src/dry-materialize.ts +353 -0
  254. package/src/existing-declaration-adoption.check.ts +12 -0
  255. package/src/generated/contract-schema.generated.ts +520 -0
  256. package/src/generated/package-scope.generated.ts +10 -0
  257. package/src/generated/plan-contracts.generated.ts +3101 -0
  258. package/src/host.ts +10 -0
  259. package/src/identity.ts +51 -0
  260. package/src/index.ts +74 -3
  261. package/src/inventory-adoption.ts +107 -29
  262. package/src/inventory-choice.ts +172 -0
  263. package/src/inventory-contract.ts +166 -0
  264. package/src/key-editor.ts +446 -0
  265. package/src/ledger-contract.ts +660 -0
  266. package/src/ledger-trust.ts +272 -0
  267. package/src/lockfile-invariants.ts +421 -0
  268. package/src/lockfile-readers.ts +749 -0
  269. package/src/lockfile-regen.ts +851 -0
  270. package/src/lockfile-tool-env.ts +131 -0
  271. package/src/materialize.ts +915 -0
  272. package/src/observe-repository.ts +1365 -0
  273. package/src/plan-bundle-setup-fixture.ts +200 -0
  274. package/src/plan-bundle.ts +1014 -0
  275. package/src/plan-command.ts +532 -0
  276. package/src/plan-contract.ts +179 -0
  277. package/src/plan-digest.ts +102 -0
  278. package/src/plan-rules.ts +188 -0
  279. package/src/planned-bundle.ts +211 -0
  280. package/src/product-repository.ts +10 -1
  281. package/src/provenance-gate.ts +352 -0
  282. package/src/pull-request-body.ts +261 -0
  283. package/src/registry-snapshot.ts +534 -0
  284. package/src/release-age-edit.ts +430 -0
  285. package/src/root-entries.ts +81 -0
  286. package/src/setup-template-scripts.ts +580 -0
  287. package/src/setup-templates.ts +479 -0
  288. package/src/skills.ts +161 -18
  289. package/src/status.ts +557 -0
  290. package/src/types.ts +148 -13
@@ -0,0 +1,467 @@
1
+ // Test support for the admission tests (#1178): builders for an approved plan, a
2
+ // setup/apply pair from the shared corpus, apply bundles, a temporary git hub
3
+ // and clone, and a stub readiness executable. Nothing here is imported by the
4
+ // shipped code, and every name, id and digest is an example value.
5
+ import { execFileSync } from "node:child_process";
6
+ import { chmodSync, mkdirSync, mkdtempSync, readFileSync, realpathSync, rmSync, symlinkSync, writeFileSync } from "node:fs";
7
+ import { tmpdir } from "node:os";
8
+ import { dirname, join } from "node:path";
9
+ import { storeApplyBundle, storeChangeSet } from "./apply-store.js";
10
+ import { LEDGER_PATH, contentDigest, discoveryLinkRole, discoveryLinkTarget, lockfilePath } from "./change-set-contract.js";
11
+ import { bundleDigest, changeSetDigest } from "./change-set-digest.js";
12
+ import { readInstalledLedger, renderInstalledLedger, serializeInstalledLedger } from "./ledger-contract.js";
13
+ import { approvedSubject } from "./apply-plan.js";
14
+ import { planDigest } from "./plan-digest.js";
15
+ export const SITE_ID = "example-owner/site";
16
+ export const SITE_NODE_ID = "R_exampleSite1";
17
+ export const DOCS_ID = "example-owner/docs";
18
+ export const STARTER = "example-owner/site:@example/starter";
19
+ export const STRATEGIST = "example-owner/site:@example/strategist";
20
+ export const WRITER = "example-owner/site:@example/writer";
21
+ export const PLAN_FILE = "clossys/advisor/plan.json";
22
+ export const ASSESSMENT_FILE = "clossys/advisor/assessment-input.json";
23
+ export const READINESS_BIN = "node_modules/.bin/advisor-execution-readiness";
24
+ export const FAR_FUTURE = "2999-01-01T00:00:00Z";
25
+ const REPO = new URL("../../../", import.meta.url);
26
+ const readRepo = (path) => readFileSync(new URL(path, REPO), "utf8");
27
+ export const clone = (value) => structuredClone(value);
28
+ /** Recomputes a set's own digest, and the branch and title that follow from it. */
29
+ export function reseal(set) {
30
+ const digest = changeSetDigest(set);
31
+ set.changeSetDigest = digest;
32
+ set.branch = `${set.agentProvenance ?? "clossys"}/apply-${digest.slice(7, 19)}`;
33
+ set.pullRequest = { title: `Clossys: apply plan ${digest.slice(7, 19)}` };
34
+ return set;
35
+ }
36
+ const CORPUS = JSON.parse(readRepo("docs/contracts/apply-change-set-digest.fixture.json"));
37
+ const PLAN_CORPUS = JSON.parse(readRepo("docs/contracts/advisor-plan-digest.fixture.json"));
38
+ export const corpusSet = (name) => clone(CORPUS.changeSets.find((entry) => entry.name === name).changeSet);
39
+ // ---------------------------------------------------------------------------
40
+ // git
41
+ const gitEnv = {
42
+ ...process.env,
43
+ PATH: process.env.PATH ?? "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
44
+ GIT_CONFIG_GLOBAL: "/dev/null",
45
+ GIT_CONFIG_NOSYSTEM: "1",
46
+ GIT_AUTHOR_NAME: "Example Author",
47
+ GIT_AUTHOR_EMAIL: "author@example.com",
48
+ GIT_COMMITTER_NAME: "Example Author",
49
+ GIT_COMMITTER_EMAIL: "author@example.com",
50
+ };
51
+ export function git(cwd, ...args) {
52
+ return execFileSync("git", ["-c", "commit.gpgsign=false", "-c", "core.hooksPath=/dev/null", ...args], {
53
+ cwd,
54
+ env: gitEnv,
55
+ encoding: "utf8",
56
+ stdio: ["ignore", "pipe", "pipe"],
57
+ });
58
+ }
59
+ export function decision(at, chosen, subjectDigest) {
60
+ return { at, recommended: "the Launch kit", chosen, by: "sponsor", ...(subjectDigest === undefined ? {} : { subjectDigest }) };
61
+ }
62
+ /** The corpus plan with staffing and exact packages, with its decisions replaced. */
63
+ export function withDecisions(plan, decisions) {
64
+ return { ...clone(plan), decisions: decisions.map((entry) => clone(entry)) };
65
+ }
66
+ /** The corpus plan before any decision: its digest does not depend on decisions. */
67
+ export function basePlan() {
68
+ return { ...clone(PLAN_CORPUS.plans.find((entry) => entry.name === "staffed-with-packages").plan), decisions: [] };
69
+ }
70
+ export const FIRST_AT = "2026-09-24T10:00:00Z";
71
+ export const LATER_AT = "2026-09-25T10:00:00Z";
72
+ /** A plan whose latest decision approves `subject`. */
73
+ export function approvedPlan(subject, base = basePlan()) {
74
+ return withDecisions(base, [decision(FIRST_AT, "approved", subject)]);
75
+ }
76
+ /** `decide(plan, chosen, at, subject?)`: the plan with one more decision. */
77
+ export function decide(plan, chosen, at, subject) {
78
+ return withDecisions(plan, [...plan.decisions, decision(at, chosen, subject)]);
79
+ }
80
+ /** The head commit of each hub hubRepo built, by the hub's path, so two hubs for one plan keep their own heads. */
81
+ const HUB_HEADS = new Map();
82
+ /** The head of the hub most recently built for a plan digest, for a test that names the plan and no hub. */
83
+ const LAST_HEADS = new Map();
84
+ /** What readHubAuthority returns for the plan: the head is that of `hub`, else of the hub last built for this plan, or a placeholder commit id when none was. */
85
+ export function authorityOf(plan, hub) {
86
+ const subject = approvedSubject(plan);
87
+ if (subject === null)
88
+ throw new Error("the fixture plan is not approved");
89
+ const digest = planDigest(plan);
90
+ return { plan, planDigest: digest, subject, head: (hub === undefined ? LAST_HEADS.get(digest) : HUB_HEADS.get(hub)) ?? "0".repeat(40) };
91
+ }
92
+ /** The plan's identity for each package act of one repository. */
93
+ export function committedPlanPackages(plan, repositoryId) {
94
+ return (plan.packages ?? [])
95
+ .filter((act) => act.repository === repositoryId)
96
+ .map(({ planItem, act, name, version, integrity, placement }) => ({ planItem, act, name, version, integrity, placement }));
97
+ }
98
+ /** A valid report bundle for `plan`, holding the given change sets, with its digest computed. */
99
+ export function bundleOf(plan, entries, extra = {}) {
100
+ const digestOfPlan = extra.planDigest ?? planDigest(plan);
101
+ const held = entries.map((entry) => ({ id: entry.id, changeSet: entry.set?.changeSetDigest ?? entry.changeSet, phase: entry.phase ?? entry.set?.phase ?? "apply" }));
102
+ return {
103
+ schemaVersion: 1,
104
+ kind: "clossys.apply-bundle",
105
+ mode: "report",
106
+ plan: { path: "clossys/advisor/plan.json", digest: digestOfPlan, committed: true },
107
+ snapshot: { path: "clossys/.state/apply/registry-snapshot.json", digest: plan.resolution.snapshotDigest },
108
+ engine: { name: "@example/advisor", version: "0.8.0", integrity: plan.packages[0].integrity },
109
+ authorization: { planDigest: digestOfPlan, expiresAt: FAR_FUTURE },
110
+ computedAt: extra.computedAt ?? "2026-09-24T12:00:00Z",
111
+ repositories: held.map((entry) => ({ id: entry.id, verdict: "satisfied", phase: entry.phase, changeSet: entry.changeSet, checks: [] })),
112
+ bundleDigest: bundleDigest(digestOfPlan, held.map((entry) => ({ id: entry.id, changeSetDigest: entry.changeSet }))),
113
+ };
114
+ }
115
+ const utf8 = (text) => Buffer.from(text, "utf8");
116
+ export const MANIFEST = `${JSON.stringify({ name: "site", private: true, devDependencies: { "@example/starter": "0.9.2" } }, null, 2)}\n`;
117
+ export function lockfileText(packages, placement = "devDependencies") {
118
+ const root = { name: "site", version: "1.0.0", [placement]: Object.fromEntries(packages.map((pkg) => [pkg.name, pkg.version])) };
119
+ const entries = Object.fromEntries(packages.map((pkg) => [
120
+ `node_modules/${pkg.name}`,
121
+ { version: pkg.version, resolved: `https://registry.npmjs.org/${pkg.name}/-/${pkg.name.split("/")[1]}-${pkg.version}.tgz`, integrity: pkg.integrity, dev: true },
122
+ ]));
123
+ return `${JSON.stringify({ name: "site", version: "1.0.0", lockfileVersion: 3, requires: true, packages: { "": root, ...entries } }, null, 2)}\n`;
124
+ }
125
+ /** The in-memory readers the pure core takes over a base tree, and the hub's stored bundles and sets. */
126
+ export function memoryReaders(state) {
127
+ return {
128
+ bundle: (digest) => state.bundles.find((bundle) => bundle.bundleDigest === digest) ?? null,
129
+ setupSet: (digest) => state.sets.find((set) => set.changeSetDigest === digest) ?? null,
130
+ baseEntry: (path) => {
131
+ const entry = state.tree.get(path);
132
+ if (entry !== undefined)
133
+ return entry;
134
+ const isDirectory = [...state.tree.keys()].some((key) => key.startsWith(`${path}/`));
135
+ return isDirectory ? { mode: "040000", bytes: new Uint8Array(0) } : null;
136
+ },
137
+ baseDirectory: (dir) => {
138
+ const prefix = dir === "" ? "" : `${dir}/`;
139
+ const names = new Set();
140
+ for (const key of state.tree.keys())
141
+ if (key.startsWith(prefix))
142
+ names.add(key.slice(prefix.length).split("/")[0]);
143
+ return names.size === 0 ? null : [...names];
144
+ },
145
+ };
146
+ }
147
+ export const DEFAULT_BASE_COMMIT = "c".repeat(40);
148
+ /** Whole-file bytes for every whole file of a set: a discovery link's target, or a line of text. */
149
+ export function textsFor(set) {
150
+ const texts = {};
151
+ for (const file of set.files) {
152
+ if (file.derived === true)
153
+ continue;
154
+ if (file.mode === "120000")
155
+ texts[file.path] = discoveryLinkTarget(discoveryLinkRole(file.path));
156
+ else
157
+ texts[file.path] = `fixture ${file.path}\n`;
158
+ }
159
+ return texts;
160
+ }
161
+ function applyTexts(set, texts, keep) {
162
+ for (const file of set.files) {
163
+ if (file.derived === true)
164
+ continue;
165
+ const text = texts[file.path];
166
+ file.after = contentDigest(text);
167
+ file.before = keep ? file.after : null;
168
+ }
169
+ }
170
+ /** The ledger a setup set writes from nothing: `renderInstalledLedger(null, ...)` with the plan's identities. */
171
+ export function setupLedgerBytes(set, subject, plan) {
172
+ return Buffer.from(renderInstalledLedger(null, set, { kind: "approved", subjectDigest: subject }, committedPlanPackages(plan, set.repository.id)), "utf8");
173
+ }
174
+ /** Re-serializes a ledger after `edit`, canonically: for rows that must still pass L1 to L10. */
175
+ export function editLedger(bytes, edit) {
176
+ const ledger = clone(readInstalledLedger(bytes));
177
+ edit(ledger);
178
+ return Buffer.from(serializeInstalledLedger(ledger), "utf8");
179
+ }
180
+ /**
181
+ * The corpus pair `setup-site` / `apply-after-setup`, retargeted to a plan and
182
+ * resealed, with the approved bundle, the later run's bundle, the ledger the
183
+ * merged setup leaves, and the tree of the base it lives in.
184
+ */
185
+ export function buildWorld(options = {}) {
186
+ const plan0 = basePlan();
187
+ options.editPlan?.(plan0);
188
+ const digestOfPlan = planDigest(plan0);
189
+ const setup = corpusSet("setup-site");
190
+ setup.planDigest = digestOfPlan;
191
+ const texts = textsFor(setup);
192
+ options.editSetup?.(setup, texts);
193
+ applyTexts(setup, texts, false);
194
+ reseal(setup);
195
+ const sealedSetup = setup;
196
+ const approvedBundle = bundleOf(plan0, [{ id: SITE_ID, set: sealedSetup }]);
197
+ const setupWithBundle = { ...sealedSetup, bundle: approvedBundle.bundleDigest };
198
+ const plan = approvedPlan(approvedBundle.bundleDigest, plan0);
199
+ const authority = authorityOf(plan);
200
+ const ledgerBytes = setupLedgerBytes(setupWithBundle, approvedBundle.bundleDigest, plan);
201
+ const ledger = readInstalledLedger(ledgerBytes);
202
+ const tree = new Map();
203
+ tree.set("README.md", { mode: "100644", bytes: utf8("# Site\n") });
204
+ for (const file of setup.files) {
205
+ if (file.derived === true)
206
+ continue;
207
+ tree.set(file.path, { mode: file.mode, bytes: utf8(texts[file.path]) });
208
+ }
209
+ tree.set("package.json", { mode: "100644", bytes: utf8(MANIFEST) });
210
+ const starter = setup.items.find((item) => item.act === "pin-starter");
211
+ tree.set(lockfilePath(setup.observed), { mode: "100644", bytes: utf8(lockfileText([{ name: starter.package.name, version: starter.package.version, integrity: starter.package.integrity }])) });
212
+ tree.set(LEDGER_PATH, { mode: "100644", bytes: ledgerBytes });
213
+ const baseCommit = options.commitBase?.(tree) ?? DEFAULT_BASE_COMMIT;
214
+ const apply = corpusSet("apply-after-setup");
215
+ apply.planDigest = digestOfPlan;
216
+ apply.repository.baseCommit = baseCommit;
217
+ const applyTextsMap = { ...texts };
218
+ applyTexts(apply, applyTextsMap, true);
219
+ options.editApply?.(apply, applyTextsMap);
220
+ reseal(apply);
221
+ const sealedApply = apply;
222
+ const applyBundle = bundleOf(plan0, [{ id: SITE_ID, set: sealedApply }], { computedAt: "2026-09-26T12:00:00Z" });
223
+ const applyWithBundle = { ...sealedApply, bundle: applyBundle.bundleDigest };
224
+ return { plan, planDigest: digestOfPlan, authority, setup: setupWithBundle, apply: applyWithBundle, texts, approvedBundle, applyBundle, ledgerBytes, ledger, tree, baseCommit };
225
+ }
226
+ /** The same world's apply set as a fresh copy that changed `edit` and was resealed (its `bundle` kept). */
227
+ export function mutateSet(set, edit) {
228
+ const copy = clone(set);
229
+ edit(copy);
230
+ const bundle = copy.bundle;
231
+ reseal(copy);
232
+ copy.bundle = bundle;
233
+ return copy;
234
+ }
235
+ // ---------------------------------------------------------------------------
236
+ // a temporary hub and a temporary clone
237
+ export function makeRoot(roots, prefix = "launcher-admission-") {
238
+ const root = mkdtempSync(join(tmpdir(), prefix));
239
+ roots.push(root);
240
+ return root;
241
+ }
242
+ function writeTreeEntry(root, path, entry) {
243
+ const target = join(root, path);
244
+ mkdirSync(dirname(target), { recursive: true });
245
+ if (entry.mode === "120000") {
246
+ symlinkSync(Buffer.from(entry.bytes).toString("utf8"), target);
247
+ return;
248
+ }
249
+ writeFileSync(target, entry.bytes);
250
+ if (entry.mode === "100755")
251
+ chmodSync(target, 0o755);
252
+ }
253
+ /**
254
+ * A local clone whose default branch holds exactly `tree`. With `squash`, the
255
+ * files arrive on a side branch and land as one new commit with no ancestor on
256
+ * that branch, the way a squash merge leaves them.
257
+ */
258
+ export function siteRepo(roots, tree, options = {}) {
259
+ const root = makeRoot(roots, "launcher-admission-site-");
260
+ const clonePath = join(root, "site");
261
+ mkdirSync(clonePath);
262
+ git(clonePath, "init", "-b", "main");
263
+ git(clonePath, "config", "core.autocrlf", "false");
264
+ writeFileSync(join(clonePath, "README.md"), "# Site\n");
265
+ git(clonePath, "add", "README.md");
266
+ git(clonePath, "commit", "-m", "init");
267
+ const writeAll = () => {
268
+ for (const [path, entry] of tree)
269
+ if (path !== "README.md")
270
+ writeTreeEntry(clonePath, path, entry);
271
+ git(clonePath, "add", "-A");
272
+ // The admitted base is a Git tree. A case-insensitive worktree cannot
273
+ // materialize two distinct raw paths, so bind each index entry to its
274
+ // supplied bytes instead of trusting the filesystem's spelling/content.
275
+ for (const [path, entry] of tree)
276
+ if (path !== "README.md") {
277
+ const blob = execFileSync("git", ["hash-object", "-w", "--stdin"], {
278
+ cwd: clonePath,
279
+ env: gitEnv,
280
+ input: entry.bytes,
281
+ encoding: "utf8",
282
+ stdio: ["pipe", "pipe", "pipe"],
283
+ }).trim();
284
+ git(clonePath, "-c", "core.ignorecase=false", "update-index", "--add", "--cacheinfo", entry.mode, blob, path);
285
+ }
286
+ };
287
+ if (options.mergeStyle === "squash") {
288
+ git(clonePath, "checkout", "-b", "setup");
289
+ writeAll();
290
+ git(clonePath, "commit", "-m", "setup");
291
+ const sideTip = git(clonePath, "rev-parse", "HEAD").trim();
292
+ git(clonePath, "checkout", "main");
293
+ // An unrelated commit first, so the squashed commit is not a fast-forward of the side branch.
294
+ writeFileSync(join(clonePath, "NOTES.md"), "notes\n");
295
+ git(clonePath, "add", "NOTES.md");
296
+ git(clonePath, "commit", "-m", "notes");
297
+ git(clonePath, "merge", "--squash", "setup");
298
+ git(clonePath, "commit", "-m", "setup (squashed)");
299
+ return { clone: realpathSync(clonePath), baseCommit: git(clonePath, "rev-parse", "HEAD").trim(), sideTip };
300
+ }
301
+ writeAll();
302
+ git(clonePath, "commit", "-m", "setup");
303
+ return { clone: realpathSync(clonePath), baseCommit: git(clonePath, "rev-parse", "HEAD").trim(), sideTip: null };
304
+ }
305
+ /** A stub for advisor-execution-readiness: exit 0 when expiresAt is later than argv[3], 1 when not, 2 when unreadable. */
306
+ export const READINESS_STUB = `#!/usr/bin/env node
307
+ const fs = require("node:fs");
308
+ let document;
309
+ try {
310
+ document = JSON.parse(fs.readFileSync(process.argv[2], "utf8"));
311
+ } catch {
312
+ process.exit(2);
313
+ }
314
+ const engagement = document && document.engagement;
315
+ if (engagement && engagement.hang === true) setTimeout(() => process.exit(0), 60000);
316
+ else {
317
+ const authorization = engagement && engagement.executionAuthorization;
318
+ const expires = authorization ? Date.parse(authorization.expiresAt) : NaN;
319
+ const asOf = Date.parse(process.argv[3]);
320
+ if (Number.isNaN(expires) || Number.isNaN(asOf)) process.exit(2);
321
+ process.exit(expires > asOf ? 0 : 1);
322
+ }
323
+ `;
324
+ export function writeReadinessStub(hub) {
325
+ const bin = join(hub, READINESS_BIN);
326
+ mkdirSync(dirname(bin), { recursive: true });
327
+ writeFileSync(bin, READINESS_STUB, { mode: 0o755 });
328
+ chmodSync(bin, 0o755);
329
+ return bin;
330
+ }
331
+ /** An assessment-input document carrying an execution authorization for a plan. */
332
+ export function assessmentFor(plan, patch = {}, permitted = [SITE_ID]) {
333
+ // Every distinct package of the plan is permitted, whatever the repository: admission requires the list to equal the plan's packages exactly.
334
+ const packages = [...new Map((plan.packages ?? []).map(({ name, version, integrity }) => [`${name}@${version}#${integrity}`, { name, version, integrity }])).values()];
335
+ return {
336
+ engagement: {
337
+ executionAuthorization: {
338
+ planDigest: planDigest(plan),
339
+ permittedRepositoryIds: [...permitted],
340
+ permittedPackages: packages,
341
+ grantedAt: "2026-09-24T12:00:00Z",
342
+ expiresAt: FAR_FUTURE,
343
+ ...patch,
344
+ },
345
+ },
346
+ };
347
+ }
348
+ /** A current authorization for the plan; none when the plan has no digest (it is invalid). */
349
+ function defaultAssessment(plan) {
350
+ try {
351
+ return assessmentFor(plan);
352
+ }
353
+ catch {
354
+ return null;
355
+ }
356
+ }
357
+ const jsonText = (value) => `${JSON.stringify(value, null, 2)}\n`;
358
+ /** A temporary git hub with plan.json (and assessment-input.json) committed, and sets and bundles stored in it. */
359
+ export function hubRepo(roots, options) {
360
+ const repository = realpathSync(makeRoot(roots, "launcher-admission-hub-"));
361
+ git(repository, "init", "-b", "main");
362
+ git(repository, "config", "core.autocrlf", "false");
363
+ const hub = options.nested === true ? join(repository, "nested", "hub") : repository;
364
+ mkdirSync(join(hub, "clossys", "advisor"), { recursive: true });
365
+ const commits = [];
366
+ const mode = options.planMode ?? "regular";
367
+ const last = options.plans[options.plans.length - 1];
368
+ const relative = (path) => (options.nested === true ? join("nested", "hub", path) : path);
369
+ for (const [index, plan] of options.plans.entries()) {
370
+ const target = join(hub, PLAN_FILE);
371
+ const text = options.planBytes ?? jsonText(plan);
372
+ const paths = [];
373
+ if (mode === "absent") {
374
+ writeFileSync(join(hub, "clossys", "advisor", "placeholder.txt"), `${index}\n`);
375
+ paths.push(relative("clossys/advisor/placeholder.txt"));
376
+ }
377
+ else if (mode === "symlink") {
378
+ writeFileSync(join(hub, "clossys", "advisor", "plan-real.json"), text);
379
+ rmSync(target, { force: true });
380
+ symlinkSync("plan-real.json", target);
381
+ paths.push(relative(PLAN_FILE), relative("clossys/advisor/plan-real.json"));
382
+ }
383
+ else {
384
+ writeFileSync(target, text);
385
+ if (mode === "executable")
386
+ chmodSync(target, 0o755);
387
+ paths.push(relative(PLAN_FILE));
388
+ }
389
+ if (index === options.plans.length - 1) {
390
+ const document = options.assessment === undefined ? defaultAssessment(last) : options.assessment;
391
+ if (document !== null) {
392
+ writeFileSync(join(hub, ASSESSMENT_FILE), jsonText(document));
393
+ paths.push(relative(ASSESSMENT_FILE));
394
+ }
395
+ }
396
+ git(repository, "add", "-f", ...paths);
397
+ git(repository, "commit", "-m", `plan ${index}`);
398
+ commits.push(git(repository, "rev-parse", "HEAD").trim());
399
+ }
400
+ let origin = null;
401
+ if (options.upstream !== false) {
402
+ origin = join(makeRoot(roots, "launcher-admission-origin-"), "hub.git");
403
+ execFileSync("git", ["init", "--bare", "-b", "main", origin], { env: gitEnv, stdio: "ignore" });
404
+ git(repository, "remote", "add", "origin", origin);
405
+ git(repository, "push", "-q", "-u", "origin", "main");
406
+ }
407
+ if (options.detachAt !== undefined)
408
+ git(repository, "checkout", "-q", "--detach", commits[options.detachAt]);
409
+ if (options.worktreePlan !== undefined) {
410
+ rmSync(join(hub, PLAN_FILE), { force: true });
411
+ writeFileSync(join(hub, PLAN_FILE), jsonText(options.worktreePlan));
412
+ }
413
+ if (mode === "absent")
414
+ writeFileSync(join(hub, PLAN_FILE), jsonText(last));
415
+ if (options.readiness !== false)
416
+ writeReadinessStub(hub);
417
+ const realHub = realpathSync(hub);
418
+ HUB_HEADS.set(realHub, commits[commits.length - 1]);
419
+ try {
420
+ LAST_HEADS.set(planDigest(last), commits[commits.length - 1]);
421
+ }
422
+ catch {
423
+ // An invalid plan has no digest, and no authority is built for it.
424
+ }
425
+ for (const set of options.sets ?? [])
426
+ storeChangeSet(realHub, set);
427
+ for (const bundle of options.bundles ?? [])
428
+ storeApplyBundle(realHub, bundle);
429
+ return { hub: realHub, repository, commits, origin };
430
+ }
431
+ /** Whether the hub's current branch has an upstream. */
432
+ function hasUpstream(hub) {
433
+ try {
434
+ git(hub, "rev-parse", "--verify", "-q", "@{upstream}");
435
+ return true;
436
+ }
437
+ catch {
438
+ return false;
439
+ }
440
+ }
441
+ /** Commits `plan` as clossys/advisor/plan.json at the hub's current branch, and pushes it when the branch has an upstream: one more decision, or a whole other plan. */
442
+ export function commitHubPlan(hub, plan, message = "plan decision") {
443
+ writeFileSync(join(hub, PLAN_FILE), jsonText(plan));
444
+ git(hub, "add", "-f", PLAN_FILE);
445
+ git(hub, "commit", "-m", message);
446
+ if (hasUpstream(hub))
447
+ git(hub, "push", "-q");
448
+ return git(hub, "rev-parse", "HEAD").trim();
449
+ }
450
+ /** Commits a new assessment-input.json at the hub's current branch, and pushes it when the branch has an upstream. */
451
+ export function commitHubAssessment(hub, document, message = "assessment") {
452
+ writeFileSync(join(hub, ASSESSMENT_FILE), jsonText(document));
453
+ git(hub, "add", "-f", ASSESSMENT_FILE);
454
+ git(hub, "commit", "-m", message);
455
+ if (hasUpstream(hub))
456
+ git(hub, "push", "-q");
457
+ return git(hub, "rev-parse", "HEAD").trim();
458
+ }
459
+ /** Puts one more commit on the hub's origin from a separate clone, then fetches it: the hub's branch is now behind its upstream. */
460
+ export function advanceHubUpstream(roots, hub, origin) {
461
+ const other = join(makeRoot(roots, "launcher-admission-other-"), "hub");
462
+ execFileSync("git", ["clone", "-q", origin, other], { env: gitEnv, stdio: "ignore" });
463
+ git(other, "commit", "-q", "--allow-empty", "-m", "elsewhere");
464
+ git(other, "push", "-q", "origin", "main");
465
+ git(hub, "fetch", "-q", "origin");
466
+ }
467
+ //# sourceMappingURL=admission-fixture.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admission-fixture.js","sourceRoot":"","sources":["../src/admission-fixture.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,124 @@
1
+ import type { ApplyBundle, ApprovalBinding, RepositoryChangeSet } from "./change-set-contract.js";
2
+ import type { InstalledLedger, LedgerPackageIdentity } from "./ledger-contract.js";
3
+ import type { AdvisorPlan } from "./plan-contract.js";
4
+ /** A refusal: exit 1 is violated, exit 2 is indeterminate. `detail` is a fixed token, never a value. */
5
+ export interface AdmissionRefusal {
6
+ readonly state: "refused";
7
+ readonly exitCode: 1 | 2;
8
+ readonly reason: string;
9
+ readonly detail?: string;
10
+ }
11
+ /** What the hub's committed plan says: the plan itself, its digest, the bundle digest its latest decision approves, and the commit id it was read from. */
12
+ export interface HubAuthority {
13
+ readonly plan: AdvisorPlan;
14
+ readonly planDigest: string;
15
+ readonly subject: string;
16
+ /** The commit id HEAD resolved to, which equalled its branch's upstream, and which the plan was read from. */
17
+ readonly head: string;
18
+ }
19
+ export type AdmissionDecision = {
20
+ readonly state: "bound";
21
+ readonly binding: ApprovalBinding;
22
+ } | AdmissionRefusal;
23
+ /** One package act, as RENDER and the trust check take it. */
24
+ export type PlanPackageIdentity = LedgerPackageIdentity & {
25
+ readonly act: "install" | "pin-starter";
26
+ };
27
+ /** What the base tree holds at one path: git's own mode, and the raw bytes (empty for a directory or a gitlink). */
28
+ export interface BaseTreeEntry {
29
+ readonly mode: string;
30
+ readonly bytes: Uint8Array;
31
+ }
32
+ /** Everything the pure core reads from outside itself. A reader that throws is read as unreadable. */
33
+ export interface AdmissionReaders {
34
+ /** The apply bundle the hub stored for a digest, verified, or null. */
35
+ readonly bundle: (digest: string) => ApplyBundle | null;
36
+ /** The change set the hub stored for a digest, verified, or null. */
37
+ readonly setupSet: (digest: string) => RepositoryChangeSet | null;
38
+ /** The entry at a path in the base tree: null when there is none. */
39
+ readonly baseEntry: (path: string) => BaseTreeEntry | null | "unreadable";
40
+ /** The names directly under a directory of the base tree (`""` is the root): null when there is no such directory. */
41
+ readonly baseDirectory: (dir: string) => readonly string[] | null | "unreadable";
42
+ }
43
+ export interface DecideBindingInput {
44
+ readonly set: RepositoryChangeSet;
45
+ readonly authority: HubAuthority;
46
+ /** The base ledger, already trusted by the caller (trustInstalledLedger), or null when the base has none. */
47
+ readonly baseLedger: InstalledLedger | null;
48
+ /** The base ledger's exact bytes, or null when the base has none. */
49
+ readonly baseLedgerBytes: Uint8Array | null;
50
+ readonly readers: AdmissionReaders;
51
+ }
52
+ /** Runs advisor-execution-readiness; `status` is its exit code, or null when it did not exit on its own. */
53
+ export type ReadinessRunner = (request: {
54
+ bin: string;
55
+ assessmentPath: string;
56
+ asOf: string;
57
+ cwd: string;
58
+ }) => {
59
+ status: number | null;
60
+ };
61
+ export interface DecideSetBindingInput {
62
+ readonly hub: string;
63
+ /** The real path of the local clone, for git object reads. */
64
+ readonly clone: string;
65
+ readonly set: RepositoryChangeSet;
66
+ readonly authority: HubAuthority;
67
+ readonly baseLedger: InstalledLedger | null;
68
+ readonly baseLedgerBytes: Uint8Array | null;
69
+ readonly now?: () => Date;
70
+ readonly runReadiness?: ReadinessRunner;
71
+ /** How long the default readiness runner waits; default 120000. */
72
+ readonly readinessTimeoutMs?: number;
73
+ }
74
+ /**
75
+ * K1. The plan committed at the hub's HEAD, and the bundle digest its latest
76
+ * decision approves. Exit 2, `awaiting-approval`, with `hub-not-upstream` when
77
+ * the attached HEAD is not its branch's upstream (H1: no upstream, ahead or
78
+ * behind), `plan-unreadable` when the plan cannot be read as one strict-JSON
79
+ * regular blob at an attached HEAD, and `plan-not-approved` when it does not
80
+ * validate, or nothing in it is approved with a subject (see approvedSubject).
81
+ * HEAD is resolved once (H2): `head` is that commit id, and the plan is read
82
+ * from it.
83
+ */
84
+ export declare function readHubAuthority(hub: string): HubAuthority | AdmissionRefusal;
85
+ /**
86
+ * The plan's identity for each package act of one repository (exact id), in
87
+ * the shape renderInstalledLedger and trustInstalledLedger take. Trust and
88
+ * render use the committed plan's acts, never the acts of the set being
89
+ * admitted: a set cannot vouch for itself.
90
+ */
91
+ export declare function planPackagesFor(authority: HubAuthority, repositoryId: string): PlanPackageIdentity[];
92
+ /** K10's last word on a pair of ledgers: exactly one admitted next generation, with no violation. Null when it holds. */
93
+ export declare function checkSuccession(baseBytes: Uint8Array | null, headBytes: Uint8Array): AdmissionRefusal | null;
94
+ /**
95
+ * K10. Renders the ledger the admitted set would write over the base ledger,
96
+ * with the committed plan's package identities, and requires it to be exactly
97
+ * one admitted generation over the base's bytes. A render that throws is
98
+ * `render-refused`; a pair the succession rules refuse is `succession-refused`.
99
+ */
100
+ export declare function verifyAdmittedSuccession(input: {
101
+ readonly baseLedger: InstalledLedger | null;
102
+ readonly baseLedgerBytes: Uint8Array | null;
103
+ readonly set: RepositoryChangeSet;
104
+ readonly authority: HubAuthority;
105
+ readonly setupChangeSet: string;
106
+ }): AdmissionDecision;
107
+ /**
108
+ * The pure core. `set` is bound approved when the hub's approved bundle holds
109
+ * it, admitted when it is the apply set that follows the approved, merged
110
+ * setup set (D26), and refused otherwise. Every read goes through `readers`;
111
+ * nothing here touches a filesystem or runs git. Never throws: a failure it
112
+ * did not foresee is `admission-failed`.
113
+ */
114
+ export declare function decideBinding(input: DecideBindingInput): AdmissionDecision;
115
+ /**
116
+ * The binding of one change set, from the hub alone: the pure core wired to
117
+ * the hub's stores (never a caller-supplied list) and to git objects at the
118
+ * set's base commit in the clone, then the execution authorization for any set
119
+ * that has package acts. `authority` is what readHubAuthority returned, and
120
+ * `baseLedger` and `baseLedgerBytes` the base ledger the caller already
121
+ * trusted (trustInstalledLedger, over the committed plan's acts).
122
+ */
123
+ export declare function decideSetBinding(input: DecideSetBindingInput): Promise<AdmissionDecision>;
124
+ //# sourceMappingURL=admission.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admission.d.ts","sourceRoot":"","sources":["../src/admission.ts"],"names":[],"mappings":"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"}