@clossys/launcher 0.3.1 → 0.4.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 (285) hide show
  1. package/README.md +1324 -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 +453 -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 +799 -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 +157 -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 +381 -0
  46. package/dist/change-set-contract.d.ts.map +1 -0
  47. package/dist/change-set-contract.js +738 -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/generated/contract-schema.generated.d.ts +97 -0
  69. package/dist/generated/contract-schema.generated.d.ts.map +1 -0
  70. package/dist/generated/contract-schema.generated.js +496 -0
  71. package/dist/generated/contract-schema.generated.js.map +1 -0
  72. package/dist/generated/package-scope.generated.d.ts +6 -0
  73. package/dist/generated/package-scope.generated.d.ts.map +1 -0
  74. package/dist/generated/package-scope.generated.js +10 -0
  75. package/dist/generated/package-scope.generated.js.map +1 -0
  76. package/dist/generated/plan-contracts.generated.d.ts +3 -0
  77. package/dist/generated/plan-contracts.generated.d.ts.map +1 -0
  78. package/dist/generated/plan-contracts.generated.js +2840 -0
  79. package/dist/generated/plan-contracts.generated.js.map +1 -0
  80. package/dist/host.d.ts.map +1 -1
  81. package/dist/host.js +11 -0
  82. package/dist/host.js.map +1 -1
  83. package/dist/identity.d.ts +15 -0
  84. package/dist/identity.d.ts.map +1 -0
  85. package/dist/identity.js +48 -0
  86. package/dist/identity.js.map +1 -0
  87. package/dist/index.d.ts +34 -5
  88. package/dist/index.d.ts.map +1 -1
  89. package/dist/index.js +19 -2
  90. package/dist/index.js.map +1 -1
  91. package/dist/inventory-adoption.d.ts +24 -5
  92. package/dist/inventory-adoption.d.ts.map +1 -1
  93. package/dist/inventory-adoption.js +70 -25
  94. package/dist/inventory-adoption.js.map +1 -1
  95. package/dist/inventory-choice.d.ts +40 -0
  96. package/dist/inventory-choice.d.ts.map +1 -0
  97. package/dist/inventory-choice.js +156 -0
  98. package/dist/inventory-choice.js.map +1 -0
  99. package/dist/inventory-contract.d.ts +89 -0
  100. package/dist/inventory-contract.d.ts.map +1 -0
  101. package/dist/inventory-contract.js +121 -0
  102. package/dist/inventory-contract.js.map +1 -0
  103. package/dist/key-editor.d.ts +30 -0
  104. package/dist/key-editor.d.ts.map +1 -0
  105. package/dist/key-editor.js +445 -0
  106. package/dist/key-editor.js.map +1 -0
  107. package/dist/ledger-contract.d.ts +187 -0
  108. package/dist/ledger-contract.d.ts.map +1 -0
  109. package/dist/ledger-contract.js +532 -0
  110. package/dist/ledger-contract.js.map +1 -0
  111. package/dist/ledger-trust.d.ts +90 -0
  112. package/dist/ledger-trust.d.ts.map +1 -0
  113. package/dist/ledger-trust.js +198 -0
  114. package/dist/ledger-trust.js.map +1 -0
  115. package/dist/lockfile-invariants.d.ts +48 -0
  116. package/dist/lockfile-invariants.d.ts.map +1 -0
  117. package/dist/lockfile-invariants.js +375 -0
  118. package/dist/lockfile-invariants.js.map +1 -0
  119. package/dist/lockfile-readers.d.ts +72 -0
  120. package/dist/lockfile-readers.d.ts.map +1 -0
  121. package/dist/lockfile-readers.js +713 -0
  122. package/dist/lockfile-readers.js.map +1 -0
  123. package/dist/lockfile-regen.d.ts +106 -0
  124. package/dist/lockfile-regen.d.ts.map +1 -0
  125. package/dist/lockfile-regen.js +760 -0
  126. package/dist/lockfile-regen.js.map +1 -0
  127. package/dist/lockfile-tool-env.d.ts +29 -0
  128. package/dist/lockfile-tool-env.d.ts.map +1 -0
  129. package/dist/lockfile-tool-env.js +111 -0
  130. package/dist/lockfile-tool-env.js.map +1 -0
  131. package/dist/materialize.d.ts +113 -0
  132. package/dist/materialize.d.ts.map +1 -0
  133. package/dist/materialize.js +840 -0
  134. package/dist/materialize.js.map +1 -0
  135. package/dist/observe-repository.d.ts +90 -0
  136. package/dist/observe-repository.d.ts.map +1 -0
  137. package/dist/observe-repository.js +1367 -0
  138. package/dist/observe-repository.js.map +1 -0
  139. package/dist/plan-bundle-setup-fixture.d.ts +68 -0
  140. package/dist/plan-bundle-setup-fixture.d.ts.map +1 -0
  141. package/dist/plan-bundle-setup-fixture.js +167 -0
  142. package/dist/plan-bundle-setup-fixture.js.map +1 -0
  143. package/dist/plan-bundle.d.ts +250 -0
  144. package/dist/plan-bundle.d.ts.map +1 -0
  145. package/dist/plan-bundle.js +827 -0
  146. package/dist/plan-bundle.js.map +1 -0
  147. package/dist/plan-command.d.ts +29 -0
  148. package/dist/plan-command.d.ts.map +1 -0
  149. package/dist/plan-command.js +493 -0
  150. package/dist/plan-command.js.map +1 -0
  151. package/dist/plan-contract.d.ts +153 -0
  152. package/dist/plan-contract.d.ts.map +1 -0
  153. package/dist/plan-contract.js +61 -0
  154. package/dist/plan-contract.js.map +1 -0
  155. package/dist/plan-digest.d.ts +25 -0
  156. package/dist/plan-digest.d.ts.map +1 -0
  157. package/dist/plan-digest.js +106 -0
  158. package/dist/plan-digest.js.map +1 -0
  159. package/dist/plan-rules.d.ts +23 -0
  160. package/dist/plan-rules.d.ts.map +1 -0
  161. package/dist/plan-rules.js +177 -0
  162. package/dist/plan-rules.js.map +1 -0
  163. package/dist/planned-bundle.d.ts +20 -0
  164. package/dist/planned-bundle.d.ts.map +1 -0
  165. package/dist/planned-bundle.js +191 -0
  166. package/dist/planned-bundle.js.map +1 -0
  167. package/dist/product-repository.d.ts +4 -0
  168. package/dist/product-repository.d.ts.map +1 -1
  169. package/dist/product-repository.js +9 -1
  170. package/dist/product-repository.js.map +1 -1
  171. package/dist/provenance-gate.d.ts +48 -0
  172. package/dist/provenance-gate.d.ts.map +1 -0
  173. package/dist/provenance-gate.js +324 -0
  174. package/dist/provenance-gate.js.map +1 -0
  175. package/dist/pull-request-body.d.ts +45 -0
  176. package/dist/pull-request-body.d.ts.map +1 -0
  177. package/dist/pull-request-body.js +232 -0
  178. package/dist/pull-request-body.js.map +1 -0
  179. package/dist/registry-snapshot.d.ts +141 -0
  180. package/dist/registry-snapshot.d.ts.map +1 -0
  181. package/dist/registry-snapshot.js +483 -0
  182. package/dist/registry-snapshot.js.map +1 -0
  183. package/dist/release-age-edit.d.ts +52 -0
  184. package/dist/release-age-edit.d.ts.map +1 -0
  185. package/dist/release-age-edit.js +413 -0
  186. package/dist/release-age-edit.js.map +1 -0
  187. package/dist/root-entries.d.ts +36 -0
  188. package/dist/root-entries.d.ts.map +1 -0
  189. package/dist/root-entries.js +80 -0
  190. package/dist/root-entries.js.map +1 -0
  191. package/dist/setup-template-scripts.d.ts +34 -0
  192. package/dist/setup-template-scripts.d.ts.map +1 -0
  193. package/dist/setup-template-scripts.js +557 -0
  194. package/dist/setup-template-scripts.js.map +1 -0
  195. package/dist/setup-templates.d.ts +54 -0
  196. package/dist/setup-templates.d.ts.map +1 -0
  197. package/dist/setup-templates.js +427 -0
  198. package/dist/setup-templates.js.map +1 -0
  199. package/dist/skills.d.ts +34 -1
  200. package/dist/skills.d.ts.map +1 -1
  201. package/dist/skills.js +129 -17
  202. package/dist/skills.js.map +1 -1
  203. package/dist/status.d.ts +63 -0
  204. package/dist/status.d.ts.map +1 -0
  205. package/dist/status.js +539 -0
  206. package/dist/status.js.map +1 -0
  207. package/dist/types.d.ts +151 -13
  208. package/dist/types.d.ts.map +1 -1
  209. package/package.json +4 -4
  210. package/skeleton/README.md +14 -9
  211. package/skeleton/package.json +2 -1
  212. package/skill/SKILL.md +23 -7
  213. package/skill-catalogue/advisor/SKILL.md +59 -6
  214. package/skill-catalogue/architect/SKILL.md +2 -2
  215. package/skill-catalogue/bouncer/SKILL.md +2 -2
  216. package/skill-catalogue/builder/SKILL.md +2 -2
  217. package/skill-catalogue/butler/SKILL.md +2 -2
  218. package/skill-catalogue/controller/SKILL.md +2 -2
  219. package/skill-catalogue/customer/SKILL.md +2 -2
  220. package/skill-catalogue/designer/SKILL.md +4 -2
  221. package/skill-catalogue/giver/SKILL.md +2 -2
  222. package/skill-catalogue/influencer/SKILL.md +2 -2
  223. package/skill-catalogue/inspector/SKILL.md +2 -2
  224. package/skill-catalogue/integrator/SKILL.md +2 -2
  225. package/skill-catalogue/keeper/SKILL.md +2 -2
  226. package/skill-catalogue/launcher/SKILL.md +23 -7
  227. package/skill-catalogue/locksmith/SKILL.md +2 -2
  228. package/skill-catalogue/messenger/SKILL.md +2 -2
  229. package/skill-catalogue/observer/SKILL.md +2 -2
  230. package/skill-catalogue/publisher/SKILL.md +2 -2
  231. package/skill-catalogue/starter/SKILL.md +3 -2
  232. package/skill-catalogue/strategist/SKILL.md +12 -4
  233. package/skill-catalogue/writer/SKILL.md +2 -2
  234. package/src/admission-fixture.ts +572 -0
  235. package/src/admission.ts +816 -0
  236. package/src/agents-guide.ts +29 -0
  237. package/src/apply-command-options.check.ts +27 -0
  238. package/src/apply-plan-cli.ts +454 -14
  239. package/src/apply-plan.ts +112 -124
  240. package/src/apply-step-fixture.ts +236 -0
  241. package/src/apply-store.ts +584 -0
  242. package/src/approval-sheet.ts +164 -0
  243. package/src/body-command.ts +162 -0
  244. package/src/change-set-contract.ts +937 -0
  245. package/src/change-set-digest.ts +70 -0
  246. package/src/check-cli.ts +14 -3
  247. package/src/cli.ts +90 -22
  248. package/src/core.ts +973 -275
  249. package/src/dry-materialize.ts +353 -0
  250. package/src/generated/contract-schema.generated.ts +520 -0
  251. package/src/generated/package-scope.generated.ts +10 -0
  252. package/src/generated/plan-contracts.generated.ts +2840 -0
  253. package/src/host.ts +10 -0
  254. package/src/identity.ts +51 -0
  255. package/src/index.ts +72 -3
  256. package/src/inventory-adoption.ts +107 -29
  257. package/src/inventory-choice.ts +172 -0
  258. package/src/inventory-contract.ts +166 -0
  259. package/src/key-editor.ts +446 -0
  260. package/src/ledger-contract.ts +637 -0
  261. package/src/ledger-trust.ts +267 -0
  262. package/src/lockfile-invariants.ts +421 -0
  263. package/src/lockfile-readers.ts +749 -0
  264. package/src/lockfile-regen.ts +851 -0
  265. package/src/lockfile-tool-env.ts +131 -0
  266. package/src/materialize.ts +886 -0
  267. package/src/observe-repository.ts +1365 -0
  268. package/src/plan-bundle-setup-fixture.ts +200 -0
  269. package/src/plan-bundle.ts +964 -0
  270. package/src/plan-command.ts +509 -0
  271. package/src/plan-contract.ts +179 -0
  272. package/src/plan-digest.ts +102 -0
  273. package/src/plan-rules.ts +188 -0
  274. package/src/planned-bundle.ts +211 -0
  275. package/src/product-repository.ts +10 -1
  276. package/src/provenance-gate.ts +352 -0
  277. package/src/pull-request-body.ts +261 -0
  278. package/src/registry-snapshot.ts +534 -0
  279. package/src/release-age-edit.ts +430 -0
  280. package/src/root-entries.ts +81 -0
  281. package/src/setup-template-scripts.ts +571 -0
  282. package/src/setup-templates.ts +471 -0
  283. package/src/skills.ts +161 -18
  284. package/src/status.ts +557 -0
  285. package/src/types.ts +148 -13
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ledger-contract.d.ts","sourceRoot":"","sources":["../src/ledger-contract.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,532 @@
1
+ // The installed-state ledger (issue #1178), validated against the shared
2
+ // contract docs/contracts/installed-ledger.json -- in the public repository,
3
+ // not shipped in this package. This package's build packs it into
4
+ // src/generated/ beside the change-set and bundle contracts, and validates
5
+ // it with the same generated copy of the one contract checker. Validation
6
+ // makes a ledger well formed, not true: trusting a row needs the hub's
7
+ // change sets (see TRUST in the contract), which nothing here reads. Nothing
8
+ // in this package writes a ledger yet. The TypeScript types below describe
9
+ // the contract's shapes for callers; they validate nothing.
10
+ import { AGENTS_GUIDE_PATH, AGENTS_GUIDE_TEXT } from "./agents-guide.js";
11
+ import { formatContractViolation, readContractDocument, validateAgainstContract } from "./generated/contract-schema.generated.js";
12
+ import { EXEMPTION_SURFACES, ID_TOKEN, INTRODUCIBLE_ROOTS, LEDGER_PATH, LOCKFILE_NAMES, canonicalOrder, compareTuples, contentDigest, derivedPlanItem, dependencyPointer, discoveryLinkRole, matchesPathPattern, } from "./change-set-contract.js";
13
+ import { changeSetDigest } from "./change-set-digest.js";
14
+ import { loadContract } from "./plan-contract.js";
15
+ /** The digest of the Launcher guide's bytes: the only after an apply-phase add of the guide may carry (RENDER and S3). */
16
+ const AGENTS_GUIDE_DIGEST = contentDigest(AGENTS_GUIDE_TEXT);
17
+ const CONTRACT = "installed-ledger.json";
18
+ /** The owned path patterns, read from the packed ledger contract. */
19
+ const OWNED_PATTERNS = (() => {
20
+ const definitions = loadContract(CONTRACT).definitions;
21
+ const list = definitions?.ownedPattern?.enum;
22
+ if (!Array.isArray(list) || !list.every((entry) => typeof entry === "string"))
23
+ throw new Error("the packed ledger contract has no ownedPattern list");
24
+ return list;
25
+ })();
26
+ function repeats(values, key) {
27
+ const seen = new Map();
28
+ const out = [];
29
+ values.forEach((value, index) => {
30
+ const k = key(value);
31
+ const first = seen.get(k);
32
+ if (first === undefined)
33
+ seen.set(k, index);
34
+ else
35
+ out.push({ index, first });
36
+ });
37
+ return out;
38
+ }
39
+ /** Whether two JSON values are equal member for member, whatever their members' order. */
40
+ function sameValue(left, right) {
41
+ if (left === right)
42
+ return true;
43
+ if (typeof left !== "object" || typeof right !== "object" || left === null || right === null)
44
+ return false;
45
+ if (Array.isArray(left) !== Array.isArray(right))
46
+ return false;
47
+ if (Array.isArray(left)) {
48
+ const other = right;
49
+ return left.length === other.length && left.every((value, index) => sameValue(value, other[index]));
50
+ }
51
+ const a = left;
52
+ const b = right;
53
+ const keys = Object.keys(a);
54
+ return keys.length === Object.keys(b).length && keys.every((key) => Object.hasOwn(b, key) && sameValue(a[key], b[key]));
55
+ }
56
+ const IDENTITY = ["planItem", "act", "name", "version", "integrity", "placement"];
57
+ /** Code rules L1-L10 of installed-ledger.json, over a ledger whose schema already passes. Messages name positions, never values. */
58
+ export function ledgerRuleViolations(ledger) {
59
+ const out = [];
60
+ const push = (rule, path, message) => out.push({ rule, path, message });
61
+ const { history } = ledger;
62
+ // L1
63
+ if (ledger.generation < 1 || ledger.generation !== history.length)
64
+ push("L1", "generation", "must be 1 or more and equal the number of history entries");
65
+ history.forEach((entry, index) => {
66
+ if (entry.generation !== index + 1)
67
+ push("L1", `history[${index}].generation`, "is not its position plus 1");
68
+ });
69
+ // L2
70
+ for (const { index, first } of repeats(history, (entry) => entry.changeSet))
71
+ push("L2", `history[${index}].changeSet`, `repeats history[${first}].changeSet`);
72
+ // L3
73
+ history.forEach((entry, index) => {
74
+ const at = `history[${index}].binding`;
75
+ const { binding } = entry;
76
+ if (entry.phase === "setup" && binding.kind !== "approved") {
77
+ push("L3", at, "is not approved, and a setup entry's binding must be");
78
+ return;
79
+ }
80
+ // An approved binding's subjectDigest may differ from the entry's bundle: bundle is the run that computed the set, subjectDigest the approval.
81
+ if (binding.kind === "approved")
82
+ return;
83
+ const previous = index > 0 ? history[index - 1] : undefined;
84
+ if (previous === undefined) {
85
+ push("L3", at, "is admitted, but no setup entry comes before it");
86
+ return;
87
+ }
88
+ if (previous.changeSet !== binding.setupChangeSet)
89
+ push("L3", `${at}.setupChangeSet`, "is not the change set of the entry before it");
90
+ if (previous.phase !== "setup" || previous.binding.kind !== "approved")
91
+ push("L3", at, "is admitted, but the entry before it is not an approved setup entry");
92
+ if (previous.planDigest !== entry.planDigest)
93
+ push("L3", `history[${index}].planDigest`, "is not the plan digest of the setup entry it follows");
94
+ if (previous.binding.subjectDigest !== binding.subjectDigest)
95
+ push("L3", `${at}.subjectDigest`, "is not the approved subject of the setup entry it follows");
96
+ });
97
+ // L4
98
+ const written = new Set(history.map((entry) => entry.changeSet));
99
+ const rowArrays = [
100
+ ["files", ledger.files],
101
+ ["keys", ledger.keys],
102
+ ["entries", ledger.entries],
103
+ ["packages", ledger.packages],
104
+ ["deferred", ledger.deferred],
105
+ ];
106
+ for (const [name, rows] of rowArrays) {
107
+ rows.forEach((row, index) => {
108
+ if (!written.has(row.changeSet))
109
+ push("L4", `${name}[${index}].changeSet`, "names no history entry's change set");
110
+ });
111
+ }
112
+ const last = history.at(-1);
113
+ if (last !== undefined) {
114
+ ledger.deferred.forEach((row, index) => {
115
+ if (written.has(row.changeSet) && row.changeSet !== last.changeSet)
116
+ push("L4", `deferred[${index}].changeSet`, "is not the latest history entry's change set");
117
+ });
118
+ if (last.phase === "apply" && ledger.deferred.length > 0)
119
+ push("L4", "deferred", "must be empty after an apply generation");
120
+ }
121
+ // L5
122
+ ledger.files.forEach((row, index) => {
123
+ const at = `files[${index}]`;
124
+ const lowered = row.path.toLowerCase();
125
+ if (lowered === LEDGER_PATH.toLowerCase() || lowered === "package.json" || LOCKFILE_NAMES.includes(lowered))
126
+ push("L5", `${at}.path`, "is the ledger, package.json or a lockfile, which no files row names");
127
+ else if (!OWNED_PATTERNS.some((pattern) => matchesPathPattern(row.path, pattern)))
128
+ push("L5", `${at}.path`, "is not matched by any owned pattern");
129
+ const role = discoveryLinkRole(row.path) ?? /^\.agents\/skills\/clossys-([^/]+)\//u.exec(row.path)?.[1];
130
+ if (role !== undefined && !ID_TOKEN.test(role))
131
+ push("L5", `${at}.path`, "names a role that is not a lowercase id token");
132
+ const link = discoveryLinkRole(row.path) !== null;
133
+ if ((row.mode === "120000") !== link)
134
+ push("L5", `${at}.mode`, link ? "is not 120000, and this path is a discovery link" : "is 120000, which only a discovery link has");
135
+ });
136
+ // L6
137
+ ledger.keys.forEach((row, index) => {
138
+ const owners = ledger.packages.filter((pkg) => dependencyPointer(pkg.placement, pkg.name) === row.pointer);
139
+ if (owners.length !== 1)
140
+ push("L6", `keys[${index}].pointer`, "does not name exactly one packages row");
141
+ else if (owners[0].version !== row.value)
142
+ push("L6", `keys[${index}].value`, "is not the version of the package it names");
143
+ });
144
+ // L7
145
+ const acts = [...ledger.packages.map((row, index) => ({ row, path: `packages[${index}]` })), ...ledger.deferred.map((row, index) => ({ row, path: `deferred[${index}]` }))];
146
+ // A repeated planItem is a repeated name: L10 derives each planItem from its name.
147
+ for (const { index, first } of repeats(acts, (entry) => entry.row.name))
148
+ push("L7", `${acts[index].path}.name`, `repeats ${acts[first].path}.name`);
149
+ // L8
150
+ const order = (name, rows, key) => {
151
+ for (let index = 1; index < rows.length; index += 1) {
152
+ if (compareTuples(key(rows[index - 1]), key(rows[index])) >= 0) {
153
+ push("L8", `${name}[${index}]`, "is out of canonical order, or repeats the entry before it");
154
+ return;
155
+ }
156
+ }
157
+ };
158
+ order("files", ledger.files, (row) => [row.path]);
159
+ for (const { index, first } of repeats(ledger.files, (row) => row.path.toLowerCase()))
160
+ push("L8", `files[${index}].path`, `repeats files[${first}].path, compared case-insensitively`);
161
+ order("keys", ledger.keys, (row) => [row.file, row.pointer]);
162
+ order("entries", ledger.entries, (row) => [row.file, row.key, row.value]);
163
+ order("packages", ledger.packages, (row) => [row.planItem]);
164
+ order("deferred", ledger.deferred, (row) => [row.planItem]);
165
+ // L9
166
+ const profileRows = ledger.entries.map((row, index) => ({ row, index })).filter(({ row }) => row.key === "rootEntries");
167
+ const profileFile = profileRows[0]?.row.file;
168
+ for (const { row, index } of profileRows) {
169
+ if (row.file !== profileFile)
170
+ push("L9", `entries[${index}].file`, "is a second Controller profile, and the flow edits one");
171
+ if (!INTRODUCIBLE_ROOTS.has(row.value))
172
+ push("L9", `entries[${index}].value`, "is not a root name an owned pattern can introduce");
173
+ }
174
+ // L10: a planItem is derived from this repository's id and the package, never free text.
175
+ for (const [name, rows] of [["packages", ledger.packages], ["deferred", ledger.deferred]]) {
176
+ rows.forEach((row, index) => {
177
+ if (row.planItem !== derivedPlanItem(ledger.repository.id, row.name))
178
+ push("L10", `${name}[${index}].planItem`, "is not repository.id, a colon and the row's name");
179
+ });
180
+ }
181
+ return out;
182
+ }
183
+ function contractViolations(value, label, side) {
184
+ const where = side === undefined ? {} : { side };
185
+ const schema = validateAgainstContract(loadContract(CONTRACT), value, loadContract);
186
+ if (schema.length > 0)
187
+ return schema.map((violation) => ({ rule: "schema", ...where, path: violation.path, message: formatContractViolation(label, violation) }));
188
+ return ledgerRuleViolations(value).map((violation) => ({
189
+ ...violation,
190
+ ...where,
191
+ message: `${label}.${violation.path} ${violation.message} (rule ${violation.rule})`,
192
+ }));
193
+ }
194
+ /** Every reason a ledger is refused: the ledger contract's schema, then, once that passes, its code rules L1-L10. */
195
+ export function installedLedgerViolations(value) {
196
+ return contractViolations(value, "ledger");
197
+ }
198
+ /** Validates a ledger against installed-ledger.json and its code rules L1-L10. A valid ledger is well formed, not trusted. No reason echoes a value. */
199
+ export function validateInstalledLedger(value) {
200
+ const violations = installedLedgerViolations(value);
201
+ if (violations.length === 0)
202
+ return { valid: true };
203
+ return { valid: false, reason: violations.map((violation) => violation.message).join("; ") };
204
+ }
205
+ function successionRuleViolations(base, head) {
206
+ const out = [];
207
+ const push = (rule, path, message) => out.push({ rule, path, message });
208
+ // S2
209
+ if (base !== null && !sameValue(head.repository, base.repository))
210
+ push("S2", "head.repository", "is not the base ledger's repository");
211
+ // head.generation is base.generation plus 1 exactly when this holds, because L1 ties each ledger's generation to its history's length.
212
+ if (!sameValue(head.history.slice(0, -1), base?.history ?? []))
213
+ push("S2", "head.history", "does not keep the base ledger's history unchanged before its last entry, or is not one generation past it");
214
+ // S3
215
+ const last = head.history.at(-1);
216
+ if (last.binding.kind !== "admitted")
217
+ return out;
218
+ const at = `head.history[${head.history.length - 1}].binding`;
219
+ if (base === null) {
220
+ push("S3", at, "is admitted, but the base has no ledger holding the setup it follows");
221
+ return out;
222
+ }
223
+ // Already proved: L3 on the head makes the entry before an admitted one its approved setup entry, and S2 makes that entry the base's latest;
224
+ // L3 makes an admitted entry an apply entry, and L4 leaves no deferred row after one.
225
+ // The one file an admitted generation may add: the Launcher guide, for an install set up before it existed. Its row is the only change to
226
+ // the files, is written by this generation, holds the guide's own bytes, and so the base holds none at that path (L8 forbids a repeat in
227
+ // any letter case).
228
+ const addedFiles = head.files.filter((row) => !base.files.some((other) => sameValue(other, row)));
229
+ const droppedFiles = base.files.filter((row) => !head.files.some((other) => sameValue(other, row)));
230
+ const guideAdded = droppedFiles.length === 0 &&
231
+ addedFiles.length === 1 &&
232
+ addedFiles[0].path === AGENTS_GUIDE_PATH &&
233
+ addedFiles[0].mode === "100644" &&
234
+ addedFiles[0].after === AGENTS_GUIDE_DIGEST &&
235
+ addedFiles[0].changeSet === last.changeSet;
236
+ if (addedFiles.length + droppedFiles.length > 0 && !guideAdded)
237
+ push("S3", "head.files", "differ from the base ledger's, and an admitted generation changes no file but may add the guide's");
238
+ if (!sameValue(head.entries, base.entries))
239
+ push("S3", "head.entries", "differ from the base ledger's, and an admitted generation changes no entry");
240
+ const kept = (rows, from) => from.every((row) => rows.some((other) => sameValue(other, row)));
241
+ if (!kept(head.keys, base.keys))
242
+ push("S3", "head.keys", "drop or change a key row the base ledger has");
243
+ if (!kept(head.packages, base.packages))
244
+ push("S3", "head.packages", "drop or change a package row the base ledger has");
245
+ const added = head.packages.filter((row) => !base.packages.some((other) => sameValue(other, row)));
246
+ const matchesDeferral = (row, deferral) => IDENTITY.every((member) => row[member] === deferral[member]) && row.changeSet === last.changeSet;
247
+ const exact = added.length === base.deferred.length && base.deferred.every((deferral) => added.filter((row) => matchesDeferral(row, deferral)).length === 1);
248
+ if (!exact)
249
+ push("S3", "head.packages", "add something other than exactly the installs the base ledger's setup deferred");
250
+ const addedKeys = head.keys.filter((row) => !base.keys.some((other) => sameValue(other, row)));
251
+ const keyed = (row) => row.changeSet === last.changeSet && added.some((pkg) => dependencyPointer(pkg.placement, pkg.name) === row.pointer && pkg.version === row.value);
252
+ if (!addedKeys.every(keyed))
253
+ push("S3", "head.keys", "add a key row that is not for an install the base ledger's setup deferred");
254
+ return out;
255
+ }
256
+ /**
257
+ * Reads one side's ledger from its bytes: decoded with the strict
258
+ * `readContractDocument()` (refuses a byte order mark, invalid UTF-8, a
259
+ * syntax error and a repeated key by position), then valid under the
260
+ * contract, then compared byte for byte with `serializeInstalledLedger()`'s
261
+ * own re-encoding of it. A caller's decode is never trusted: the bytes prove
262
+ * themselves. Any argument that is not a `Uint8Array` is refused under rule
263
+ * `bytes` before anything reads it.
264
+ */
265
+ function readLedgerBytes(input, side) {
266
+ const refuse = (message) => ({ ledger: null, violations: [{ rule: "bytes", side, path: "", message: `${side} ${message} (rule bytes)` }] });
267
+ if (!(input instanceof Uint8Array))
268
+ return refuse("is not a ledger's bytes as a Uint8Array");
269
+ let parsed;
270
+ try {
271
+ parsed = readContractDocument(input);
272
+ }
273
+ catch {
274
+ return refuse("is not a ledger's exact bytes: not strict UTF-8 JSON, with no byte order mark and no repeated key");
275
+ }
276
+ const violations = contractViolations(parsed, side, side);
277
+ if (violations.length > 0)
278
+ return { ledger: null, violations };
279
+ const rendered = Buffer.from(serializeInstalledLedger(parsed), "utf8");
280
+ if (!rendered.equals(Buffer.from(input)))
281
+ return refuse("is not the exact bytes the ledger contract's RENDER section gives this ledger");
282
+ return { ledger: parsed, violations: [] };
283
+ }
284
+ /**
285
+ * Reads a ledger from the exact bytes of clossys/.state/installed.json: the
286
+ * ledger when the bytes are valid under the contract and exactly the bytes
287
+ * RENDER gives it, else null. A repeated key, a byte order mark, invalid
288
+ * UTF-8, other spacing or member order, or any schema or code-rule refusal
289
+ * gives null, never a partial ledger; a non-`Uint8Array` argument also gives
290
+ * null. Well formed is not trusted: see TRUST in the contract.
291
+ */
292
+ export function readInstalledLedger(bytes) {
293
+ return readLedgerBytes(bytes, "head").ledger;
294
+ }
295
+ /**
296
+ * Compares a pull request's head ledger with its base's, each given as the
297
+ * exact bytes of clossys/.state/installed.json (base null when the base has
298
+ * none), under the ledger contract's SUCCESSION rules. Each side must be a
299
+ * `Uint8Array`, valid and exactly canonical, or only those reasons are
300
+ * returned: a repeated key, a byte order mark, invalid UTF-8 or a second
301
+ * spelling is never read as an unchanged ledger, and two sides that decode to
302
+ * the same replacement text but differ in their actual bytes are never
303
+ * folded together, because each side is read from its own bytes independently.
304
+ * Then the head is either byte-identical to the base, or one next generation
305
+ * that keeps the base's history; and when that generation is admitted, it
306
+ * installs exactly what the base's setup deferred and changes no other row.
307
+ * An approved next generation is reported as approval-claimed: an
308
+ * unauthenticated claim, never an admission. It checks what the ledgers
309
+ * claim, not the files: whether the tree matches the head ledger is a
310
+ * separate check.
311
+ */
312
+ export function ledgerSuccession(baseBytes, headBytes) {
313
+ const base = baseBytes === null ? { ledger: null, violations: [] } : readLedgerBytes(baseBytes, "base");
314
+ const head = readLedgerBytes(headBytes, "head");
315
+ const invalid = [...base.violations, ...head.violations];
316
+ if (invalid.length > 0 || head.ledger === null)
317
+ return { change: "next-generation", admission: null, violations: invalid };
318
+ if (baseBytes !== null && Buffer.from(baseBytes).equals(Buffer.from(headBytes)))
319
+ return { change: "none", admission: null, violations: [] };
320
+ const violations = successionRuleViolations(base.ledger, head.ledger).map((violation) => ({
321
+ ...violation,
322
+ message: `${violation.path} ${violation.message} (rule ${violation.rule})`,
323
+ }));
324
+ if (violations.length > 0)
325
+ return { change: "next-generation", admission: null, violations };
326
+ const admitted = head.ledger.history.at(-1).binding.kind === "admitted";
327
+ return { change: "next-generation", admission: admitted ? "admitted" : "approval-claimed", violations: [] };
328
+ }
329
+ /** Every object's members, in the order installed-ledger.json declares them (RENDER). */
330
+ export const LEDGER_MEMBER_ORDER = {
331
+ ledger: ["schemaVersion", "kind", "repository", "generation", "history", "files", "keys", "entries", "packages", "deferred"],
332
+ repository: ["id", "nodeId"],
333
+ history: ["generation", "changeSet", "phase", "planDigest", "bundle", "baseCommit", "binding"],
334
+ approvedBinding: ["kind", "subjectDigest"],
335
+ admittedBinding: ["kind", "subjectDigest", "setupChangeSet"],
336
+ file: ["path", "mode", "after", "changeSet"],
337
+ key: ["file", "pointer", "value", "changeSet"],
338
+ entry: ["file", "key", "value", "changeSet"],
339
+ package: ["planItem", "act", "name", "version", "integrity", "placement", "changeSet"],
340
+ deferred: ["planItem", "act", "name", "version", "integrity", "placement", "reason", "changeSet"],
341
+ };
342
+ function ordered(value, members) {
343
+ const record = value;
344
+ return Object.fromEntries(members.map((member) => [member, record[member]]));
345
+ }
346
+ /**
347
+ * The exact bytes of a ledger, as the contract's RENDER section defines
348
+ * them: every object's members in the contract's declared order, two-space
349
+ * JSON and one line feed. Throws, naming positions only, when the ledger is
350
+ * refused, so no refused ledger ever gets bytes.
351
+ */
352
+ export function serializeInstalledLedger(ledger) {
353
+ const violations = installedLedgerViolations(ledger);
354
+ if (violations.length > 0)
355
+ throw new TypeError(`a refused ledger has no bytes: ${violations.map((violation) => violation.message).join("; ")}`);
356
+ const order = LEDGER_MEMBER_ORDER;
357
+ const canonical = {
358
+ ...ordered(ledger, order.ledger),
359
+ repository: ordered(ledger.repository, order.repository),
360
+ history: ledger.history.map((entry) => ({
361
+ ...ordered(entry, order.history),
362
+ binding: ordered(entry.binding, entry.binding.kind === "approved" ? order.approvedBinding : order.admittedBinding),
363
+ })),
364
+ files: ledger.files.map((row) => ordered(row, order.file)),
365
+ keys: ledger.keys.map((row) => ordered(row, order.key)),
366
+ entries: ledger.entries.map((row) => ordered(row, order.entry)),
367
+ packages: ledger.packages.map((row) => ordered(row, order.package)),
368
+ deferred: ledger.deferred.map((row) => ordered(row, order.deferred)),
369
+ };
370
+ return `${JSON.stringify(canonical, null, 2)}\n`;
371
+ }
372
+ /** Whether a change-set file entry is a whole file (not derived): the digest section's own test for the same distinction. */
373
+ function isWholeFile(file) {
374
+ return !("derived" in file);
375
+ }
376
+ const sameIdentity = (left, right) => left.planItem === right.planItem && left.act === right.act && left.name === right.name && left.version === right.version && left.integrity === right.integrity && left.placement === right.placement;
377
+ /**
378
+ * The installed-state ledger a change set with digest `set.changeSetDigest`
379
+ * and binding `binding` writes over `previous` (null at generation 0):
380
+ * installed-ledger.json's RENDER section. Returns
381
+ * serializeInstalledLedger(ledger)'s bytes, so a result that fails the
382
+ * contract or its code rules throws before it is returned rather than being
383
+ * handed back malformed. `planPackages` gives the plan's identity for each
384
+ * planItem, which a deferred row needs since a change set's own deferral
385
+ * carries none. Throws a TypeError, naming only positions, never values,
386
+ * when: `set.changeSetDigest` is not this change set's own digest;
387
+ * `set.ledger.generation` is not previous's generation (0 with no
388
+ * previous); previous's repository differs from the set's; a deferred
389
+ * row's planItem names no plan package; an apply set keeps a whole file
390
+ * (before equal to after) at a path previous holds no row for, which would
391
+ * be an adoption row and only a setup set may adopt one; or an apply set
392
+ * writes a whole file whose before does not match previous's after at that
393
+ * path, or at a path previous holds no row for. The one apply-phase add is
394
+ * the Launcher guide (AGENTS_GUIDE_PATH, mode 100644, before null, after the
395
+ * digest of AGENTS_GUIDE_TEXT) over a previous ledger that holds no row for
396
+ * the path in any letter case: the row is written like any other. An add at
397
+ * any other path, or of other bytes, still throws.
398
+ */
399
+ export function renderInstalledLedger(previous, set, binding, planPackages) {
400
+ const digest = changeSetDigest(set);
401
+ if (set.changeSetDigest !== digest)
402
+ throw new TypeError("set.changeSetDigest is not this change set's own digest");
403
+ const d = digest;
404
+ const baseGeneration = previous?.generation ?? 0;
405
+ if (set.ledger.generation !== baseGeneration)
406
+ throw new TypeError("set.ledger.generation does not match previous's generation");
407
+ if (previous !== null && (previous.repository.id !== set.repository.id || previous.repository.nodeId !== set.repository.nodeId)) {
408
+ throw new TypeError("previous.repository is not the set's repository");
409
+ }
410
+ const generation = set.ledger.generation + 1;
411
+ const history = [
412
+ ...(previous?.history ?? []),
413
+ { generation, changeSet: d, phase: set.phase, planDigest: set.planDigest, bundle: set.bundle, baseCommit: set.repository.baseCommit, binding },
414
+ ];
415
+ // files: previous's rows, then each whole file of the set (a derived file, the ledger or the lockfile, is skipped).
416
+ const filesByPath = new Map();
417
+ for (const row of previous?.files ?? [])
418
+ filesByPath.set(row.path.toLowerCase(), row);
419
+ set.files.forEach((file, index) => {
420
+ if (!isWholeFile(file))
421
+ return;
422
+ const key = file.path.toLowerCase();
423
+ if (file.after === null) {
424
+ filesByPath.delete(key);
425
+ return;
426
+ }
427
+ const existing = filesByPath.get(key);
428
+ const isKeep = file.before === file.after;
429
+ if (isKeep && existing !== undefined && existing.after === file.after)
430
+ return; // unchanged: previous's row already holds this after
431
+ if (isKeep && set.phase === "apply")
432
+ throw new TypeError(`files[${index}] keeps a file previous holds no row for, which only a setup set may adopt`);
433
+ // The one apply-phase add: the Launcher guide's own bytes, for an install set up before it existed, where previous holds no row at its
434
+ // path. A row at that path that is not 100644 would also fail the output's own validation (L5) below.
435
+ const guideAdd = previous !== null && file.path === AGENTS_GUIDE_PATH && file.before === null && file.mode === "100644" && file.after === AGENTS_GUIDE_DIGEST && existing === undefined;
436
+ if (set.phase === "apply" && !isKeep && !guideAdd && (existing === undefined || existing.after !== file.before)) {
437
+ throw new TypeError(`files[${index}] has no matching previous row for an apply update`);
438
+ }
439
+ filesByPath.set(key, { path: file.path, mode: file.mode, after: file.after, changeSet: d });
440
+ });
441
+ const files = canonicalOrder([...filesByPath.values()], (row) => [row.path]);
442
+ // keys: previous's rows, then each key of the set.
443
+ const keysByPointer = new Map();
444
+ for (const row of previous?.keys ?? [])
445
+ keysByPointer.set(row.pointer, row);
446
+ for (const key of set.keys) {
447
+ if (key.after === null)
448
+ keysByPointer.delete(key.pointer);
449
+ else
450
+ keysByPointer.set(key.pointer, { file: "package.json", pointer: key.pointer, value: key.after, changeSet: d });
451
+ }
452
+ const keys = canonicalOrder([...keysByPointer.values()], (row) => [row.file, row.pointer]);
453
+ // entries: previous's rows, then one row per exempt-release-age item and per declare-root-entry entry the set adds, unless a path refusal names the item.
454
+ const entries = [...(previous?.entries ?? [])];
455
+ const hasEntry = (file, entryKey, value) => entries.some((row) => row.file === file && row.key === entryKey && row.value === value);
456
+ const pathRefused = (path) => set.refused.some((refusal) => "path" in refusal && refusal.path === path);
457
+ for (const item of set.items) {
458
+ if (item.act === "exempt-release-age") {
459
+ if (pathRefused(item.path))
460
+ continue;
461
+ const value = `${item.scope}/*`;
462
+ if (hasEntry(item.path, EXEMPTION_SURFACES[item.surface].key, value))
463
+ continue;
464
+ entries.push(item.surface === "pnpm-workspace"
465
+ ? { file: "pnpm-workspace.yaml", key: "minimumReleaseAgeExclude", value, changeSet: d }
466
+ : { file: ".yarnrc.yml", key: "npmPreapprovedPackages", value, changeSet: d });
467
+ }
468
+ else if (item.act === "declare-root-entry") {
469
+ if (pathRefused(item.path))
470
+ continue;
471
+ for (const entry of item.entries) {
472
+ if (!hasEntry(item.path, "rootEntries", entry.name))
473
+ entries.push({ file: item.path, key: "rootEntries", value: entry.name, changeSet: d });
474
+ }
475
+ }
476
+ }
477
+ const orderedEntries = canonicalOrder(entries, (row) => [row.file, row.key, row.value]);
478
+ // packages: previous's rows, then each install or pin-starter item, unless a key refusal names its item.
479
+ let packages = [...(previous?.packages ?? [])];
480
+ const keyRefused = (itemId) => set.refused.some((refusal) => "pointer" in refusal && refusal.item === itemId);
481
+ for (const item of set.items) {
482
+ if (item.act !== "install" && item.act !== "pin-starter")
483
+ continue;
484
+ if (keyRefused(item.id))
485
+ continue;
486
+ const newRow = {
487
+ planItem: item.planItem,
488
+ act: item.act,
489
+ name: item.package.name,
490
+ version: item.package.version,
491
+ integrity: item.package.integrity,
492
+ placement: item.placement,
493
+ changeSet: d,
494
+ };
495
+ const matched = packages.filter((row) => row.planItem === newRow.planItem || row.name === newRow.name);
496
+ packages = packages.filter((row) => row.planItem !== newRow.planItem && row.name !== newRow.name);
497
+ const identical = matched.find((row) => sameIdentity(row, newRow));
498
+ packages.push(identical ?? newRow);
499
+ }
500
+ const orderedPackages = canonicalOrder(packages, (row) => [row.planItem]);
501
+ // deferred: exactly the set's deferred, with the plan's identity for each planItem.
502
+ const deferred = set.deferred.map((deferral, index) => {
503
+ const identity = planPackages.find((candidate) => candidate.planItem === deferral.planItem);
504
+ if (identity === undefined)
505
+ throw new TypeError(`deferred[${index}].planItem names no plan package identity`);
506
+ return {
507
+ planItem: identity.planItem,
508
+ act: "install",
509
+ name: identity.name,
510
+ version: identity.version,
511
+ integrity: identity.integrity,
512
+ placement: identity.placement,
513
+ reason: deferral.reason,
514
+ changeSet: d,
515
+ };
516
+ });
517
+ const orderedDeferred = canonicalOrder(deferred, (row) => [row.planItem]);
518
+ const ledger = {
519
+ schemaVersion: 1,
520
+ kind: "clossys.installed-ledger",
521
+ repository: { id: set.repository.id, nodeId: set.repository.nodeId },
522
+ generation,
523
+ history,
524
+ files,
525
+ keys,
526
+ entries: orderedEntries,
527
+ packages: orderedPackages,
528
+ deferred: orderedDeferred,
529
+ };
530
+ return serializeInstalledLedger(ledger);
531
+ }
532
+ //# sourceMappingURL=ledger-contract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ledger-contract.js","sourceRoot":"","sources":["../src/ledger-contract.ts"],"names":[],"mappings":"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"}