prismatica 0.2.0 → 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 (64) hide show
  1. package/README.md +20 -8
  2. package/dist/assurance/mainpush.js +383 -8
  3. package/dist/assurance/mainpush.js.map +1 -1
  4. package/dist/assurance/proofinputs.js +62 -34
  5. package/dist/assurance/proofinputs.js.map +1 -1
  6. package/dist/atlas/labels.js +2 -2
  7. package/dist/atlas/labels.js.map +1 -1
  8. package/dist/atlas/next.js +120 -18
  9. package/dist/atlas/next.js.map +1 -1
  10. package/dist/board/html.js +37 -9
  11. package/dist/board/html.js.map +1 -1
  12. package/dist/board/model.js +58 -14
  13. package/dist/board/model.js.map +1 -1
  14. package/dist/cli.js +70 -6
  15. package/dist/cli.js.map +1 -1
  16. package/dist/commands/delta.js +84 -1
  17. package/dist/commands/delta.js.map +1 -1
  18. package/dist/commands/doctor.js +55 -11
  19. package/dist/commands/doctor.js.map +1 -1
  20. package/dist/commands/frame.js +13 -1
  21. package/dist/commands/frame.js.map +1 -1
  22. package/dist/commands/guide.js +17 -5
  23. package/dist/commands/guide.js.map +1 -1
  24. package/dist/commands/next.js +196 -26
  25. package/dist/commands/next.js.map +1 -1
  26. package/dist/commands/release.js +950 -0
  27. package/dist/commands/release.js.map +1 -0
  28. package/dist/commands/ship.js +150 -15
  29. package/dist/commands/ship.js.map +1 -1
  30. package/dist/commands/start.js +5 -2
  31. package/dist/commands/start.js.map +1 -1
  32. package/dist/commands/update.js +435 -0
  33. package/dist/commands/update.js.map +1 -0
  34. package/dist/detect.js +40 -10
  35. package/dist/detect.js.map +1 -1
  36. package/dist/executor.js +15 -0
  37. package/dist/executor.js.map +1 -1
  38. package/dist/git.js +27 -0
  39. package/dist/git.js.map +1 -1
  40. package/dist/guide.js +254 -33
  41. package/dist/guide.js.map +1 -1
  42. package/dist/paths.js +7 -0
  43. package/dist/paths.js.map +1 -1
  44. package/dist/planning/pack.js +12 -7
  45. package/dist/planning/pack.js.map +1 -1
  46. package/dist/planning/schema.js +17 -1
  47. package/dist/planning/schema.js.map +1 -1
  48. package/dist/prepush.js +52 -0
  49. package/dist/prepush.js.map +1 -1
  50. package/dist/records/store.js +17 -1
  51. package/dist/records/store.js.map +1 -1
  52. package/dist/records/types.js +122 -7
  53. package/dist/records/types.js.map +1 -1
  54. package/dist/releases.js +287 -0
  55. package/dist/releases.js.map +1 -0
  56. package/dist/render.js +23 -0
  57. package/dist/render.js.map +1 -1
  58. package/dist/title.js +69 -0
  59. package/dist/title.js.map +1 -0
  60. package/package.json +5 -1
  61. package/dist/agent-runner.js +0 -656
  62. package/dist/agent-runner.js.map +0 -1
  63. package/dist/atlas/packs.js +0 -169
  64. package/dist/atlas/packs.js.map +0 -1
@@ -0,0 +1,287 @@
1
+ /**
2
+ * Pure release-lifecycle logic: no filesystem, no network, no git, no npm.
3
+ * Every fact this module needs is handed in already resolved by the caller
4
+ * (`commands/release.ts`, which owns every git/gh/npm call); every answer
5
+ * here is data, never an action. That split is what makes "re-derive state,
6
+ * never a stored step counter" checkable in isolation — the whole release
7
+ * state machine is a pure function of the facts of the moment.
8
+ */
9
+ const SEMVER_PATTERN = /^(\d+)\.(\d+)\.(\d+)$/;
10
+ export function parseSemver(version) {
11
+ const match = SEMVER_PATTERN.exec(version.trim());
12
+ if (!match) {
13
+ return null;
14
+ }
15
+ return { major: Number(match[1]), minor: Number(match[2]), patch: Number(match[3]) };
16
+ }
17
+ /** -1, 0, 1. Throws on either input not being a plain X.Y.Z semver. */
18
+ export function compareSemver(a, b) {
19
+ const pa = parseSemver(a);
20
+ const pb = parseSemver(b);
21
+ if (!pa || !pb) {
22
+ throw new Error(`not a plain X.Y.Z semver: "${!pa ? a : b}"`);
23
+ }
24
+ if (pa.major !== pb.major)
25
+ return pa.major < pb.major ? -1 : 1;
26
+ if (pa.minor !== pb.minor)
27
+ return pa.minor < pb.minor ? -1 : 1;
28
+ if (pa.patch !== pb.patch)
29
+ return pa.patch < pb.patch ? -1 : 1;
30
+ return 0;
31
+ }
32
+ export function bumpVersion(current, kind) {
33
+ const parsed = parseSemver(current);
34
+ if (!parsed) {
35
+ throw new Error(`current version "${current}" is not a plain X.Y.Z semver`);
36
+ }
37
+ if (kind === 'major') {
38
+ return `${parsed.major + 1}.0.0`;
39
+ }
40
+ if (kind === 'minor') {
41
+ return `${parsed.major}.${parsed.minor + 1}.0`;
42
+ }
43
+ return `${parsed.major}.${parsed.minor}.${parsed.patch + 1}`;
44
+ }
45
+ /** What `release prepare <patch|minor|major>` or `release prepare --version X.Y.Z` targets. */
46
+ export function resolveTargetVersion(current, target) {
47
+ if (target.kind === 'explicit') {
48
+ if (!parseSemver(target.version)) {
49
+ throw new Error(`"${target.version}" is not a plain X.Y.Z semver`);
50
+ }
51
+ return target.version;
52
+ }
53
+ return bumpVersion(current, target.kind);
54
+ }
55
+ // ── The semantic pure-version-bump diff classifier ───────────────────────────
56
+ //
57
+ // "Pure" is a claim about MEANING, not a field count: the parsed JSON must be
58
+ // identical except the exact fields `npm version` touches, and no other
59
+ // non-record file may have changed. Prismatica's own governance records
60
+ // (contract, report, evidence, ledger) legitimately ride the release branch —
61
+ // callers exclude them the same way `git.EXCLUDE_RECORDS` already does before
62
+ // calling this, so `changedNonRecordFiles` never contains a `.prismatica/` path.
63
+ const VERSION_BUMP_FILES = ['package.json', 'package-lock.json'];
64
+ function isPlainObject(value) {
65
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
66
+ }
67
+ /**
68
+ * Deep-equal, except any path that exactly matches one of `except` (each a
69
+ * segment array — `''` is a legal segment, matching `package-lock.json`'s
70
+ * `packages[""]` root entry).
71
+ */
72
+ function deepEqualExceptPaths(a, b, except, path = []) {
73
+ if (except.some((p) => p.length === path.length && p.every((seg, i) => seg === path[i]))) {
74
+ return true;
75
+ }
76
+ if (a === b) {
77
+ return true;
78
+ }
79
+ if (Array.isArray(a) || Array.isArray(b)) {
80
+ if (!Array.isArray(a) || !Array.isArray(b) || a.length !== b.length) {
81
+ return false;
82
+ }
83
+ return a.every((item, i) => deepEqualExceptPaths(item, b[i], except, [...path, String(i)]));
84
+ }
85
+ if (isPlainObject(a) || isPlainObject(b)) {
86
+ if (!isPlainObject(a) || !isPlainObject(b)) {
87
+ return false;
88
+ }
89
+ const keys = new Set([...Object.keys(a), ...Object.keys(b)]);
90
+ for (const key of keys) {
91
+ if (!deepEqualExceptPaths(a[key], b[key], except, [...path, key])) {
92
+ return false;
93
+ }
94
+ }
95
+ return true;
96
+ }
97
+ return false;
98
+ }
99
+ function readPath(value, path) {
100
+ let current = value;
101
+ for (const segment of path) {
102
+ if (!isPlainObject(current)) {
103
+ return undefined;
104
+ }
105
+ current = current[segment];
106
+ }
107
+ return current;
108
+ }
109
+ /**
110
+ * Is this merged commit's NON-RECORD diff semantically the pure version
111
+ * transformation `npm version --no-git-tag-version` performs — never a field
112
+ * count, never "these two files changed and nothing else". Every non-version
113
+ * field in both files must be byte-identical to what it was before.
114
+ */
115
+ export function classifyVersionBumpDiff(input) {
116
+ const extra = input.changedNonRecordFiles.filter((file) => !VERSION_BUMP_FILES.includes(file));
117
+ if (extra.length > 0) {
118
+ return { pure: false, reason: `non-record file(s) beyond the version bump: ${extra.join(', ')}` };
119
+ }
120
+ if (!input.changedNonRecordFiles.includes('package.json')) {
121
+ return { pure: false, reason: 'package.json did not change' };
122
+ }
123
+ if (!isPlainObject(input.oldPackageJson) || !isPlainObject(input.newPackageJson)) {
124
+ return { pure: false, reason: 'package.json is not a JSON object' };
125
+ }
126
+ if (input.newPackageJson.version !== input.expectedVersion) {
127
+ return {
128
+ pure: false,
129
+ reason: `package.json.version is "${String(input.newPackageJson.version)}", expected "${input.expectedVersion}"`,
130
+ };
131
+ }
132
+ if (!deepEqualExceptPaths(input.oldPackageJson, input.newPackageJson, [['version']])) {
133
+ return { pure: false, reason: 'package.json changed fields beyond .version' };
134
+ }
135
+ if (input.changedNonRecordFiles.includes('package-lock.json')) {
136
+ if (!isPlainObject(input.oldLock) || !isPlainObject(input.newLock)) {
137
+ return { pure: false, reason: 'package-lock.json is not a JSON object' };
138
+ }
139
+ if (input.newLock.version !== input.expectedVersion) {
140
+ return {
141
+ pure: false,
142
+ reason: `package-lock.json.version is "${String(input.newLock.version)}", expected "${input.expectedVersion}"`,
143
+ };
144
+ }
145
+ const rootVersion = readPath(input.newLock, ['packages', '', 'version']);
146
+ if (rootVersion !== input.expectedVersion) {
147
+ return {
148
+ pure: false,
149
+ reason: `package-lock.json .packages[""].version is "${String(rootVersion)}", expected "${input.expectedVersion}"`,
150
+ };
151
+ }
152
+ if (!deepEqualExceptPaths(input.oldLock, input.newLock, [['version'], ['packages', '', 'version']])) {
153
+ return {
154
+ pure: false,
155
+ reason: 'package-lock.json changed fields beyond .version and .packages[""].version',
156
+ };
157
+ }
158
+ }
159
+ return { pure: true };
160
+ }
161
+ export function classifyPreflight(facts) {
162
+ if (!facts.mainClean || !facts.mainCurrent) {
163
+ return {
164
+ ok: false,
165
+ reason: 'dirty-or-behind',
166
+ detail: 'main must be clean and current (not behind its remote) before a release',
167
+ };
168
+ }
169
+ if (!facts.registryReachable) {
170
+ return { ok: false, reason: 'unreachable-registry', detail: 'the npm registry is unreachable' };
171
+ }
172
+ if (facts.publicVersions === null || facts.distTags === null || facts.stagedCandidates === null) {
173
+ return {
174
+ ok: false,
175
+ reason: 'query-uncertain',
176
+ detail: 'could not read the registry or the staged candidates — failing closed',
177
+ };
178
+ }
179
+ if (facts.unfinishedReleaseInFlight) {
180
+ return {
181
+ ok: false,
182
+ reason: 'unfinished-release',
183
+ detail: 'an earlier release is still in flight — finish it with `release publish`, or close it with `release prepare --supersede`',
184
+ };
185
+ }
186
+ if (facts.targetTagExists) {
187
+ return { ok: false, reason: 'tag-exists', detail: `tag v${facts.targetVersion} already exists` };
188
+ }
189
+ if (compareSemver(facts.targetVersion, facts.mainVersion) <= 0) {
190
+ return {
191
+ ok: false,
192
+ reason: 'target-not-newer-than-main',
193
+ detail: `${facts.targetVersion} is not newer than main's current ${facts.mainVersion}`,
194
+ };
195
+ }
196
+ if (facts.publicVersions.includes(facts.targetVersion)) {
197
+ return { ok: false, reason: 'target-public', detail: `${facts.targetVersion} is already published` };
198
+ }
199
+ const staged = facts.stagedCandidates.find((candidate) => candidate.version === facts.targetVersion);
200
+ if (staged) {
201
+ return {
202
+ ok: false,
203
+ reason: 'target-staged',
204
+ detail: `${facts.targetVersion} is already staged (${staged.id})`,
205
+ stagedCandidate: staged,
206
+ };
207
+ }
208
+ const newestPublic = facts.publicVersions.reduce((max, version) => {
209
+ if (!parseSemver(version)) {
210
+ return max;
211
+ }
212
+ return max === null || compareSemver(version, max) > 0 ? version : max;
213
+ }, null);
214
+ if (newestPublic && compareSemver(newestPublic, facts.mainVersion) > 0) {
215
+ return {
216
+ ok: false,
217
+ reason: 'registry-newer-than-main',
218
+ detail: `published ${newestPublic} is newer than main's ${facts.mainVersion}`,
219
+ };
220
+ }
221
+ const latest = facts.distTags.latest;
222
+ return { ok: true, rollbackInEffect: latest !== undefined && latest !== facts.mainVersion };
223
+ }
224
+ export function classifySupersede(facts) {
225
+ if (facts.publicVersions === null || facts.stagedCandidates === null) {
226
+ return {
227
+ ok: false,
228
+ reason: 'query-uncertain',
229
+ detail: 'could not read the registry or the staged candidates — failing closed',
230
+ };
231
+ }
232
+ const staged = facts.stagedCandidates.find((candidate) => candidate.version === facts.targetVersion);
233
+ if (staged) {
234
+ return {
235
+ ok: false,
236
+ reason: 'target-staged',
237
+ detail: `${facts.targetVersion} is staged as ${staged.id} — continue that release, or \`npm stage reject ${staged.id}\` (owner-interactive, 2FA) then rerun`,
238
+ stagedCandidate: staged,
239
+ };
240
+ }
241
+ if (facts.publicVersions.includes(facts.targetVersion)) {
242
+ return {
243
+ ok: false,
244
+ reason: 'target-public',
245
+ detail: `${facts.targetVersion} is already published — run \`prismatica release publish\` to record it, not supersede`,
246
+ };
247
+ }
248
+ return { ok: true };
249
+ }
250
+ export function deriveReleaseNextAction(facts) {
251
+ if (facts.recordExists) {
252
+ return { action: 'already-recorded' };
253
+ }
254
+ if (facts.publicVersions === null || facts.distTags === null || facts.stagedCandidates === null) {
255
+ return {
256
+ action: 'query-uncertain',
257
+ detail: 'could not read the registry or the staged candidates — failing closed',
258
+ };
259
+ }
260
+ // The staged entry disappears the instant `stage approve` succeeds — public
261
+ // presence is the one durable fact a rerun can still see after that, so it
262
+ // is checked BEFORE tag/staging state, which a rerun in this exact window
263
+ // can no longer read at all.
264
+ if (facts.publicVersions.includes(facts.version)) {
265
+ return { action: 'reconstruct-record-from-public' };
266
+ }
267
+ if (!facts.tagExists) {
268
+ return { action: 'create-tag-and-dispatch' };
269
+ }
270
+ const staged = facts.stagedCandidates.find((candidate) => candidate.version === facts.version);
271
+ if (!staged) {
272
+ // Tagged with no staged candidate yet: either never dispatched, or an
273
+ // earlier dispatch ran and produced nothing stageable (a defective
274
+ // workflow). Re-dispatching main's current definition against the
275
+ // untouched, immutable tag is the one recovery for both.
276
+ return { action: 'dispatch-workflow' };
277
+ }
278
+ if (staged.tag !== facts.intendedTag) {
279
+ return {
280
+ action: 'refuse-wrong-stage',
281
+ detail: `the staged candidate for ${facts.version} is tagged ${staged.tag ?? '(unreadable)'}, not ${facts.intendedTag}`,
282
+ stagedCandidate: staged,
283
+ };
284
+ }
285
+ return { action: 'await-approval', stagedCandidate: staged };
286
+ }
287
+ //# sourceMappingURL=releases.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"releases.js","sourceRoot":"","sources":["../src/releases.ts"],"names":[],"mappings":"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"}
package/dist/render.js CHANGED
@@ -272,4 +272,27 @@ smoke journey passed, and the rollback route was tested. Rollback is a new recor
272
272
  never an erased one.
273
273
  `;
274
274
  }
275
+ export function renderReleaseBody(release) {
276
+ const routes = release.recoveryRoutes.length === 0
277
+ ? '_none — nothing left to do_'
278
+ : bulletList(release.recoveryRoutes, 'none');
279
+ const published = release.outcome === 'published'
280
+ ? `- **Integrity (sha512 SRI):** ${release.integrity ?? '_unknown_'}
281
+ - **Dist-tag:** ${release.distTag ?? '_unknown_'}
282
+ `
283
+ : '';
284
+ return `# Release ${release.version} — ${release.outcome}
285
+
286
+ - **Contract:** ${release.contractId}
287
+ ${release.commit ? `- **Commit:** ${release.commit}\n` : ''}${release.tag ? `- **Tag:** ${release.tag}\n` : ''}${release.pr ? `- **PR:** ${release.pr}\n` : ''}- **At:** ${release.at}
288
+ ${published}
289
+ This release is a write-once record: ${release.outcome === 'published'
290
+ ? 'the npm registry itself confirmed this exact version, artifact and dist-tag before this record was written.'
291
+ : 'the registry confirmed this version was never published or staged before this record closed the attempt.'}
292
+
293
+ ## Recovery routes
294
+
295
+ ${routes}
296
+ `;
297
+ }
275
298
  //# sourceMappingURL=render.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"render.js","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"render.js","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"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"}
package/dist/title.js ADDED
@@ -0,0 +1,69 @@
1
+ /**
2
+ * The one canonical definition of what a Prismatica change TITLE is: a
3
+ * concise, single-line, owner-facing identity — never the detailed plan
4
+ * summary. Every surface that creates or shows a title derives from the two
5
+ * primitives here; nothing else may invent its own number, regex or
6
+ * truncation.
7
+ *
8
+ * `titleProblem` is the STRICT gate for a NEW title (Start's schema,
9
+ * `frame --title`): it refuses. `clampTitle` is the DEFENSIVE fallback for a
10
+ * LEGACY or outbound title (a historical record, a generated commit subject,
11
+ * a PR title): it shortens instead of refusing, because a record already on
12
+ * disk must stay usable forever. Neither ever tightens a record schema —
13
+ * `ContractSchema.title` and `IntentSchema.title` stay `min(1)` with no
14
+ * maximum, so every title already written keeps parsing.
15
+ */
16
+ /** The hard maximum for a NEWLY created title — well inside GitHub's 256-character issue/PR title limit. */
17
+ export const CHANGE_TITLE_MAX = 120;
18
+ /**
19
+ * A conforming title: non-blank, one line, no leading or trailing whitespace.
20
+ * Anchored at both ends (`^`/`$`) so a JSON Schema validator that treats
21
+ * `pattern` as an unanchored search still behaves correctly — `.` excludes
22
+ * line terminators in JavaScript, so an embedded newline cannot be spanned by
23
+ * the middle `.*` and the anchored match fails closed.
24
+ *
25
+ * Length is deliberately NOT expressed here — that is `CHANGE_TITLE_MAX`,
26
+ * applied separately (as `.max()` in the schema, as a plain length check in
27
+ * `titleProblem`), so the two constraints stay independently readable.
28
+ */
29
+ export const TITLE_PATTERN = /^\S(?:.*\S)?$/;
30
+ /**
31
+ * Refuses a title for NEW creation (Start's schema, `frame --title`).
32
+ * Returns the reason, or `null` when the title already conforms.
33
+ */
34
+ export function titleProblem(raw) {
35
+ if (raw.length > CHANGE_TITLE_MAX) {
36
+ return `a title must be at most ${CHANGE_TITLE_MAX} characters (this one is ${raw.length})`;
37
+ }
38
+ if (TITLE_PATTERN.test(raw)) {
39
+ return null;
40
+ }
41
+ if (raw.trim() === '') {
42
+ return 'a title cannot be empty or blank';
43
+ }
44
+ return 'a title must be a single line, with no leading or trailing whitespace';
45
+ }
46
+ /**
47
+ * Shortens a LEGACY or outbound title instead of refusing it — records
48
+ * already on disk may carry anything up to and including a multi-thousand
49
+ * character plan summary. Collapses whitespace/newlines to one line, returns
50
+ * an already-conforming title byte-identical, and otherwise cuts
51
+ * deterministically to at most `CHANGE_TITLE_MAX`, preferring a word
52
+ * boundary with an ellipsis. Never invents or rewrites a word.
53
+ */
54
+ export function clampTitle(raw) {
55
+ if (titleProblem(raw) === null) {
56
+ return raw;
57
+ }
58
+ const collapsed = raw.replace(/\s+/g, ' ').trim();
59
+ if (collapsed.length <= CHANGE_TITLE_MAX) {
60
+ return collapsed;
61
+ }
62
+ const ELLIPSIS = '…';
63
+ const limit = CHANGE_TITLE_MAX - ELLIPSIS.length;
64
+ const truncated = collapsed.slice(0, limit);
65
+ const lastSpace = truncated.lastIndexOf(' ');
66
+ const atWordBoundary = lastSpace > 0 ? truncated.slice(0, lastSpace) : truncated;
67
+ return `${atWordBoundary}${ELLIPSIS}`;
68
+ }
69
+ //# sourceMappingURL=title.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"title.js","sourceRoot":"","sources":["../src/title.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,4GAA4G;AAC5G,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAEpC;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,eAAe,CAAC;AAE7C;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,GAAW;IACtC,IAAI,GAAG,CAAC,MAAM,GAAG,gBAAgB,EAAE,CAAC;QAClC,OAAO,2BAA2B,gBAAgB,4BAA4B,GAAG,CAAC,MAAM,GAAG,CAAC;IAC9F,CAAC;IACD,IAAI,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACtB,OAAO,kCAAkC,CAAC;IAC5C,CAAC;IACD,OAAO,uEAAuE,CAAC;AACjF,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,UAAU,CAAC,GAAW;IACpC,IAAI,YAAY,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;QAC/B,OAAO,GAAG,CAAC;IACb,CAAC;IACD,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IAClD,IAAI,SAAS,CAAC,MAAM,IAAI,gBAAgB,EAAE,CAAC;QACzC,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,QAAQ,GAAG,GAAG,CAAC;IACrB,MAAM,KAAK,GAAG,gBAAgB,GAAG,QAAQ,CAAC,MAAM,CAAC;IACjD,MAAM,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAC5C,MAAM,SAAS,GAAG,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAC7C,MAAM,cAAc,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACjF,OAAO,GAAG,cAAc,GAAG,QAAQ,EAAE,CAAC;AACxC,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,11 @@
1
1
  {
2
2
  "name": "prismatica",
3
- "version": "0.2.0",
3
+ "version": "0.4.0",
4
4
  "description": "Deterministic change assurance for software that AI agents write. The agent builds; Prismatica inspects; nothing ships until the intent, the proof, and the owner agree.",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "git+https://github.com/ethan-ghoreishi/prismatica-cli.git"
8
+ },
5
9
  "type": "module",
6
10
  "license": "MIT",
7
11
  "engines": {