@voltro/plan 0.86.0 → 0.88.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.
@@ -1,6 +1,6 @@
1
1
  # Third-Party Notices — @voltro/plan
2
2
 
3
- This package uses the open-source software listed below. Each is the
3
+ This package uses the third-party software listed below. Each is the
4
4
  property of its respective copyright holders and is used under the terms of
5
5
  its license. This file is provided for attribution; it grants no rights in
6
6
  @voltro/plan itself, which is proprietary (see LICENSE).
package/dist/canonical.js CHANGED
@@ -1,4 +1,4 @@
1
- //#region src/canonical.ts
1
+ // src/canonical.ts
2
2
  var e = (e) => JSON.stringify(t(e)), t = (e) => {
3
3
  if (Array.isArray(e)) return e.map(t);
4
4
  if (typeof e == "object" && e) {
@@ -114,5 +114,4 @@ var e = (e) => JSON.stringify(t(e)), t = (e) => {
114
114
  }
115
115
  return [...o].map((e) => e.toString(16).padStart(8, "0")).join("");
116
116
  }, i = (t) => `sha256:${r(e(t))}`;
117
- //#endregion
118
117
  export { e as canonicalJson, i as fingerprint, r as sha256Hex };
package/dist/closure.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { fingerprint as e } from "./canonical.js";
2
2
  import { Schema as t } from "effect";
3
- //#region src/closure.ts
3
+ // src/closure.ts
4
4
  var n = "voltro-plan-closure/v1", r = t.String.pipe(t.check(t.isMinLength(1))), i = t.String.pipe(t.check(t.isPattern(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}(:\d{2}(\.\d+)?)?(Z|[+-]\d{2}:\d{2})$/))), a = t.String.pipe(t.check(t.isPattern(/^sha256:[a-f0-9]{64}$/))), o = (e) => {
5
5
  let o = e.grammar, s = (e) => t.String.pipe(t.check(t.isPattern(e))), c = t.Struct({
6
6
  id: s(o.closureRun),
@@ -112,5 +112,4 @@ var n = "voltro-plan-closure/v1", r = t.String.pipe(t.check(t.isMinLength(1))),
112
112
  certificate: y
113
113
  };
114
114
  };
115
- //#endregion
116
115
  export { n as CLOSURE_SCHEMA_VERSION, o as closureFileSchema, c as closureState, d as decideClosure, s as planRevision };
@@ -1,8 +1,7 @@
1
- //#region src/diagnostics.ts
1
+ // src/diagnostics.ts
2
2
  var e = {
3
3
  security: 0,
4
4
  error: 1,
5
5
  warning: 2
6
6
  }, t = (e, t) => (e ?? "") < (t ?? "") ? -1 : +((e ?? "") > (t ?? "")), n = (n) => [...n].sort((n, r) => e[n.severity] - e[r.severity] || t(n.locator.plan, r.locator.plan) || t(n.locator.workItem, r.locator.workItem) || t(n.ruleId, r.ruleId) || t(n.locator.file, r.locator.file) || t(n.locator.path, r.locator.path) || t(n.message, r.message)), r = (e, t = !1) => e.some((e) => e.severity !== "warning" || t);
7
- //#endregion
8
7
  export { r as blocks, n as sortDiagnostics };
package/dist/envelope.js CHANGED
@@ -1,4 +1,4 @@
1
- //#region src/envelope.ts
1
+ // src/envelope.ts
2
2
  var e = "voltro-plan-command/v1", t = (t) => ({
3
3
  schemaVersion: e,
4
4
  ...t
@@ -12,5 +12,4 @@ var e = "voltro-plan-command/v1", t = (t) => ({
12
12
  security: 6,
13
13
  internal: 70
14
14
  };
15
- //#endregion
16
15
  export { e as COMMAND_SCHEMA_VERSION, n as EXIT, t as envelope };
package/dist/evidence.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { canonicalJson as e } from "./canonical.js";
2
2
  import { EVIDENCE_KINDS as t } from "./schema.js";
3
3
  import { EXIT as n } from "./envelope.js";
4
- //#region src/evidence.ts
4
+ // src/evidence.ts
5
5
  var r = (e, t, n, r, i, a) => ({
6
6
  outcome: "refused",
7
7
  exit: a,
@@ -61,7 +61,13 @@ var r = (e, t, n, r, i, a) => ({
61
61
  } : r("evidence/idempotency-conflict", "error", `the key "${s.idempotencyKey}" was used for other evidence (${t.id})`, "Use a new key for new evidence.", c.id, n.conflict);
62
62
  }
63
63
  }
64
- let d = `EVD-${c.id}-`, f = a.evidence.filter((e) => e.id.startsWith(d)).map((e) => Number(e.id.slice(d.length))), p = String(Math.max(0, ...f) + 1).padStart(3, "0");
64
+ let d = `EVD-${c.id}-`, f = 0n;
65
+ for (let e of a.evidence) {
66
+ if (!e.id.startsWith(d)) continue;
67
+ let t = BigInt(e.id.slice(d.length));
68
+ t > f && (f = t);
69
+ }
70
+ let p = String(f + 1n).padStart(3, "0");
65
71
  return o.evidence.test(`${d}${p}`) ? {
66
72
  outcome: "add",
67
73
  evidence: {
@@ -70,7 +76,6 @@ var r = (e, t, n, r, i, a) => ({
70
76
  observedAt: s.observedAt,
71
77
  ...s.idempotencyKey === void 0 ? {} : { idempotencyKey: s.idempotencyKey }
72
78
  }
73
- } : r("evidence/exhausted", "error", `${c.id} has no evidence number left`, "Supersede the item.", c.id, n.failed);
79
+ } : r("evidence/identifier", "error", `${c.id} cannot form a valid evidence identifier`, "Check the program identifier grammar.", c.id, n.failed);
74
80
  };
75
- //#endregion
76
81
  export { a as decideEvidence };
package/dist/ids.js CHANGED
@@ -1,4 +1,4 @@
1
- //#region src/ids.ts
1
+ // src/ids.ts
2
2
  var e = /^[A-Z][A-Z0-9]{1,9}$/, t = (t) => {
3
3
  if (!e.test(t)) throw Error(`plan id prefix "${t}" is not 2 to 10 capital letters or digits, starting with a letter`);
4
4
  return {
@@ -8,7 +8,7 @@ var e = /^[A-Z][A-Z0-9]{1,9}$/, t = (t) => {
8
8
  acceptance: RegExp(`^${t}-[0-9]{2}-[0-9]{3}-A[0-9]{2}$`),
9
9
  requirement: RegExp(`^${t}-[0-9]{2}-[0-9]{3}-E[0-9]{2}$`),
10
10
  source: RegExp(`^SRC-${t}-[0-9]{2}-[0-9]{3}-[0-9]{3}$`),
11
- evidence: RegExp(`^EVD-${t}-[0-9]{2}-[0-9]{3}-[0-9]{3}$`),
11
+ evidence: RegExp(`^EVD-${t}-[0-9]{2}-[0-9]{3}-[0-9]{3,}$`),
12
12
  finding: RegExp(`^FND-${t}-[0-9]{2}-[0-9]{3}-[0-9]{3}$`),
13
13
  adr: RegExp(`^ADR-${t}-[0-9]{3}$`),
14
14
  closureRun: RegExp(`^CLR-${t}-[0-9]{2}-[0-9]{3}$`),
@@ -21,5 +21,4 @@ var e = /^[A-Z][A-Z0-9]{1,9}$/, t = (t) => {
21
21
  let n = RegExp(`(?:^|-)(${e.prefix}-[0-9]{2}-[0-9]{3})(?:-|$)`).exec(t);
22
22
  return n === null ? null : n[1];
23
23
  };
24
- //#endregion
25
24
  export { t as idGrammar, r as ownerItemOf, n as planNumberOf };
package/dist/impact.js CHANGED
@@ -1,4 +1,4 @@
1
- //#region src/impact.ts
1
+ // src/impact.ts
2
2
  var e = [
3
3
  ".",
4
4
  ":",
@@ -61,5 +61,4 @@ var e = [
61
61
  unknown: a
62
62
  };
63
63
  };
64
- //#endregion
65
64
  export { n as impactOf };
package/dist/lint.js CHANGED
@@ -4,7 +4,7 @@ import { sortDiagnostics as a } from "./diagnostics.js";
4
4
  import { DERIVED as o, TRANSITIONS as s, derivedStatus as c, indexEvidence as l, verificationGaps as u } from "./state.js";
5
5
  import { closureFileSchema as d, closureState as f, planRevision as p } from "./closure.js";
6
6
  import { Cause as m, Exit as h, Schema as g, SchemaIssue as _ } from "effect";
7
- //#region src/lint.ts
7
+ // src/lint.ts
8
8
  var v = (e, t, n, r, i, a = []) => ({
9
9
  ruleId: e,
10
10
  severity: t,
@@ -269,5 +269,4 @@ var v = (e, t, n, r, i, a = []) => ({
269
269
  diagnostics: a(y)
270
270
  };
271
271
  };
272
- //#endregion
273
272
  export { C as dependencyCycles, w as lintProgram };
package/dist/manifest.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { Schema as e } from "effect";
2
- //#region src/manifest.ts
2
+ // src/manifest.ts
3
3
  var t = "voltro-plan-manifest/v1", n = e.String.pipe(e.check(e.isMinLength(1)), e.check(e.makeFilter((e) => !e.startsWith("/") && !/^[A-Za-z]:/.test(e) && !e.split("/").includes("..") || "a path stays inside the project root"))), r = e.Struct({
4
4
  schemaVersion: e.Literal(t),
5
5
  prefix: e.String.pipe(e.check(e.isPattern(/^[A-Z][A-Z0-9]{1,9}$/))),
@@ -12,5 +12,4 @@ var t = "voltro-plan-manifest/v1", n = e.String.pipe(e.check(e.isMinLength(1)),
12
12
  adrDir: e.optional(n),
13
13
  findings: e.optional(e.Array(n))
14
14
  });
15
- //#endregion
16
15
  export { t as MANIFEST_SCHEMA_VERSION, r as Manifest };
package/dist/next.js CHANGED
@@ -1,4 +1,4 @@
1
- //#region src/next.ts
1
+ // src/next.ts
2
2
  var e = {
3
3
  P0: 0,
4
4
  P1: 1,
@@ -60,5 +60,4 @@ var e = {
60
60
  file: f?.entry.file ?? null
61
61
  };
62
62
  };
63
- //#endregion
64
63
  export { t as nextItem };
package/dist/schema.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { Schema as e } from "effect";
2
- //#region src/schema.ts
2
+ // src/schema.ts
3
3
  var t = e.String.pipe(e.check(e.isMinLength(1))), n = e.String.pipe(e.check(e.isPattern(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}(:\d{2}(\.\d+)?)?(Z|[+-]\d{2}:\d{2})$/))), r = e.String.pipe(e.check(e.isPattern(/^sha256:[a-f0-9]{64}$/))), i = (t) => e.Array(t).pipe(e.check(e.makeFilter((e) => new Set(e).size === e.length || "items are listed twice"))), a = (t) => e.Array(t).pipe(e.check(e.isMinLength(1))), o = e.String.pipe(e.check(e.isPattern(/^[a-z0-9]+(?:[.:/-][a-z0-9]+)*$/))), s = [
4
4
  "proposed",
5
5
  "ready",
@@ -212,5 +212,4 @@ var t = e.String.pipe(e.check(e.isMinLength(1))), n = e.String.pipe(e.check(e.is
212
212
  openedAt: n,
213
213
  resolvedAt: e.optional(n)
214
214
  });
215
- //#endregion
216
215
  export { l as EVIDENCE_KINDS, d as ITEM_KINDS, c as PLAN_STATUSES, u as PRIORITIES, s as WORK_ITEM_STATUSES, m as evidenceSchema, h as findingSchema, p as planInstanceSchema };
package/dist/state.js CHANGED
@@ -1,4 +1,4 @@
1
- //#region src/state.ts
1
+ // src/state.ts
2
2
  var e = {
3
3
  proposed: ["ready", "blocked"],
4
4
  ready: [
@@ -63,5 +63,4 @@ var e = {
63
63
  }
64
64
  return a;
65
65
  }, a = (e, n) => n.length === 0 ? "verified" : t.has(e.status) ? "active" : e.status;
66
- //#endregion
67
66
  export { t as DERIVED, e as TRANSITIONS, a as derivedStatus, n as indexEvidence, i as verificationGaps };
package/dist/status.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { WORK_ITEM_STATUSES as e } from "./schema.js";
2
- //#region src/status.ts
2
+ // src/status.ts
3
3
  var t = () => Object.fromEntries(e.map((e) => [e, 0])), n = (e) => {
4
4
  let n = t();
5
5
  return {
@@ -31,5 +31,4 @@ var t = () => Object.fromEntries(e.map((e) => [e, 0])), n = (e) => {
31
31
  items: e.items.size
32
32
  };
33
33
  };
34
- //#endregion
35
34
  export { n as programStatus };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@voltro/plan",
3
- "version": "0.86.0",
3
+ "version": "0.88.0",
4
4
  "description": "The executable plan contract: ids, the v1 schema, lint, derived state, status and the next item — pure and browser-safe; the voltro plan CLI feeds it.",
5
5
  "keywords": [
6
6
  "voltro",
@@ -34,7 +34,7 @@
34
34
  },
35
35
  "dependencies": {},
36
36
  "peerDependencies": {
37
- "effect": "4.0.1"
37
+ "effect": "4.1.0"
38
38
  },
39
39
  "publishConfig": {
40
40
  "access": "public"