empirical-sdd 0.26.0 → 0.26.1

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.
package/CHANGELOG.md CHANGED
@@ -8,6 +8,16 @@ under the alpha rules in [docs/versioning.md](docs/versioning.md).
8
8
 
9
9
  ## [Unreleased]
10
10
 
11
+ ## [0.26.1] - 2026-08-21
12
+
13
+ ### Fixed
14
+
15
+ - Made `empirical update` invoke and verify the CLI installed under npm's actual
16
+ global prefix, then fail with actionable diagnostics when an older Empirical
17
+ installation still shadows it through `PATH`.
18
+ - Bounded Linear team discovery pages so the nested project and workflow-state
19
+ connections stay below Linear's GraphQL query-complexity limit.
20
+
11
21
  ## [0.26.0] - 2026-08-20
12
22
 
13
23
  ### Added
@@ -183,7 +193,8 @@ Published through GitHub Actions trusted publishing with npm provenance.
183
193
 
184
194
  - Prepared and released package version `0.20.2`.
185
195
 
186
- [Unreleased]: https://github.com/goempirical/empirical-sdd/compare/v0.26.0...HEAD
196
+ [Unreleased]: https://github.com/goempirical/empirical-sdd/compare/v0.26.1...HEAD
197
+ [0.26.1]: https://github.com/goempirical/empirical-sdd/compare/v0.26.0...v0.26.1
187
198
  [0.26.0]: https://github.com/goempirical/empirical-sdd/compare/v0.25.0...v0.26.0
188
199
  [0.25.0]: https://github.com/goempirical/empirical-sdd/compare/v0.24.1...v0.25.0
189
200
  [0.24.1]: https://github.com/goempirical/empirical-sdd/compare/v0.24.0...v0.24.1
package/dist/cli.js CHANGED
@@ -14862,7 +14862,7 @@ function verifyReceiptDigest(receipt) {
14862
14862
  throw new Error(`Evidence receipt ${parsed.id} has an asserted result inconsistent with its provenance.`);
14863
14863
  }
14864
14864
  }
14865
- var SCHEMA_VERSION = 5, POLICY_SCHEMA_VERSION = 2, MANIFEST_SCHEMA_VERSION = 2, RECEIPT_SCHEMA_VERSION = 1, PRODUCT_VERSION = "0.26.0", workflowSchema, executionModeSchema, riskFloorSchema, completionLevelSchema, phaseSchema, workflowStatusSchema, criterionSchema, evidenceKindSchema, commandPolicySchema, evidencePolicySchema, projectPolicySchema, impactManifestSchema, authorizationSchema, COMPLETION_ORDER, receiptProvenanceSchema, receiptBaseSchema, executedReceiptSchema, artifactRecordSchema, collectedReceiptSchema, evidenceReceiptSchema;
14865
+ var SCHEMA_VERSION = 5, POLICY_SCHEMA_VERSION = 2, MANIFEST_SCHEMA_VERSION = 2, RECEIPT_SCHEMA_VERSION = 1, PRODUCT_VERSION = "0.26.1", workflowSchema, executionModeSchema, riskFloorSchema, completionLevelSchema, phaseSchema, workflowStatusSchema, criterionSchema, evidenceKindSchema, commandPolicySchema, evidencePolicySchema, projectPolicySchema, impactManifestSchema, authorizationSchema, COMPLETION_ORDER, receiptProvenanceSchema, receiptBaseSchema, executedReceiptSchema, artifactRecordSchema, collectedReceiptSchema, evidenceReceiptSchema;
14866
14866
  var init_protocol = __esm(() => {
14867
14867
  init_zod();
14868
14868
  workflowSchema = exports_external.enum(["fast", "complex"]);
@@ -37279,6 +37279,7 @@ var TRACKER_PROGRESS_STATES = [
37279
37279
  "done"
37280
37280
  ];
37281
37281
  var TRACKER_DISCOVERY_LIMIT = 100;
37282
+ var LINEAR_TEAM_DISCOVERY_PAGE_SIZE = 10;
37282
37283
  var TRACKER_ARTIFACT_MAX_COUNT = 10;
37283
37284
  var TRACKER_ARTIFACT_MAX_BYTES = 5 * 1024 * 1024;
37284
37285
  var TRACKER_ARTIFACT_TOTAL_BYTES = 10 * 1024 * 1024;
@@ -39247,9 +39248,9 @@ async function discoverLinearResources(authorization, dependencies) {
39247
39248
  let after = null;
39248
39249
  const cursors = new Set;
39249
39250
  for (let page = 0;page < TRACKER_DISCOVERY_LIMIT; page += 1) {
39250
- const data = await linearGraphql(`query EmpiricalTrackerDiscovery($after: String) {
39251
+ const data = await linearGraphql(`query EmpiricalTrackerDiscovery($after: String, $teamFirst: Int!) {
39251
39252
  organization { id name urlKey }
39252
- teams(first: 100, after: $after) {
39253
+ teams(first: $teamFirst, after: $after) {
39253
39254
  nodes {
39254
39255
  id name key
39255
39256
  projects(first: 100) { nodes { id name url } pageInfo { hasNextPage endCursor } }
@@ -39257,7 +39258,7 @@ async function discoverLinearResources(authorization, dependencies) {
39257
39258
  }
39258
39259
  pageInfo { hasNextPage endCursor }
39259
39260
  }
39260
- }`, { after }, authorization, dependencies);
39261
+ }`, { after, teamFirst: LINEAR_TEAM_DISCOVERY_PAGE_SIZE }, authorization, dependencies);
39261
39262
  const organizationValue = data.organization ?? (typeof data.viewer === "object" && data.viewer !== null && !Array.isArray(data.viewer) ? data.viewer.organization : undefined);
39262
39263
  const organization = record4(organizationValue, "Linear organization");
39263
39264
  const workspaceId = requiredString(organization, "id", "Linear workspace id");
@@ -44197,15 +44198,38 @@ function normalizeColumns(columns) {
44197
44198
 
44198
44199
  // src/lifecycle.ts
44199
44200
  import { spawnSync as spawnSync6 } from "node:child_process";
44200
- function updateEmpirical(runner = runInherited) {
44201
- const npm = process.platform === "win32" ? "npm.cmd" : "npm";
44202
- const empirical = process.platform === "win32" ? "empirical.cmd" : "empirical";
44201
+ import { posix as posix2, win32 as win322 } from "node:path";
44202
+ function updateEmpirical(runner = runInherited, platform = process.platform) {
44203
+ const npm = platform === "win32" ? "npm.cmd" : "npm";
44204
+ const empirical = platform === "win32" ? "empirical.cmd" : "empirical";
44205
+ const latestResult = runner(npm, ["view", "empirical-sdd@latest", "version", "--json"], { capture: true });
44206
+ assertStage(latestResult, "UPDATE_LATEST_VERSION_FAILED", "npm latest-version lookup");
44207
+ const expectedVersion = parseNpmVersion(latestResult.stdout);
44203
44208
  const packageResult = runner(npm, ["install", "-g", "empirical-sdd@latest"]);
44204
44209
  assertStage(packageResult, "UPDATE_PACKAGE_FAILED", "npm package update");
44205
- const integrationResult = runner(empirical, ["install", "--yes"]);
44210
+ const prefixResult = runner(npm, ["prefix", "--global"], { capture: true });
44211
+ assertStage(prefixResult, "UPDATE_PREFIX_FAILED", "npm global-prefix discovery");
44212
+ const prefix = parseGlobalPrefix(prefixResult.stdout, platform);
44213
+ const installedEmpirical = resolveGlobalEmpirical(prefix, platform);
44214
+ const installedVersionResult = runner(installedEmpirical, ["--version"], { capture: true });
44215
+ assertStage(installedVersionResult, "UPDATE_INSTALLED_VERSION_FAILED", "npm-installed CLI verification");
44216
+ const installedVersion = parseCliVersion(installedVersionResult.stdout, "npm-installed CLI");
44217
+ if (installedVersion !== expectedVersion) {
44218
+ throw new EmpiricalError("UPDATE_INSTALLED_VERSION_MISMATCH", `npm-installed CLI version mismatch: expected ${expectedVersion}, observed ${installedVersion} at ${installedEmpirical}. Retry empirical update after checking npm's registry and global prefix.`);
44219
+ }
44220
+ const integrationResult = runner(installedEmpirical, ["install", "--yes"]);
44206
44221
  assertStage(integrationResult, "UPDATE_INTEGRATIONS_FAILED", "agent integration refresh");
44222
+ const pathVersionResult = runner(empirical, ["--version"], { capture: true });
44223
+ assertStage(pathVersionResult, "UPDATE_PATH_VERSION_FAILED", "PATH-visible CLI verification", pathRemediation(prefix, installedEmpirical, platform));
44224
+ const pathVersion = parseCliVersion(pathVersionResult.stdout, "PATH-visible CLI");
44225
+ if (pathVersion !== expectedVersion) {
44226
+ throw new EmpiricalError("UPDATE_PATH_SHADOWED", `PATH-visible empirical version mismatch: expected ${expectedVersion}, observed ${pathVersion}. npm installed the current CLI at ${installedEmpirical}, but another installation is shadowing it. ${pathRemediation(prefix, installedEmpirical, platform)}`);
44227
+ }
44207
44228
  return { package: "updated", integrations: "refreshed" };
44208
44229
  }
44230
+ function resolveGlobalEmpirical(prefix, platform) {
44231
+ return platform === "win32" ? win322.join(prefix, "empirical.cmd") : posix2.join(prefix, "bin", "empirical");
44232
+ }
44209
44233
  function uninstallEmpirical(runner = runInherited) {
44210
44234
  const npm = process.platform === "win32" ? "npm.cmd" : "npm";
44211
44235
  const result = runner(npm, ["uninstall", "-g", "empirical-sdd"]);
@@ -44215,9 +44239,55 @@ function uninstallEmpirical(runner = runInherited) {
44215
44239
  function isUninstallConfirmed(answer) {
44216
44240
  return /^(?:y|yes)$/i.test(answer.trim());
44217
44241
  }
44218
- function runInherited(command, args) {
44219
- const result = spawnSync6(command, args, { stdio: "inherit", shell: false });
44220
- return { status: result.status, ...result.error ? { error: result.error } : {} };
44242
+ function runInherited(command, args, options = {}) {
44243
+ const result = options.capture ? spawnSync6(command, args, { encoding: "utf8", stdio: ["inherit", "pipe", "pipe"], shell: false }) : spawnSync6(command, args, { stdio: "inherit", shell: false });
44244
+ return {
44245
+ status: result.status,
44246
+ ...result.error ? { error: result.error } : {},
44247
+ ...typeof result.stdout === "string" ? { stdout: result.stdout } : {}
44248
+ };
44249
+ }
44250
+ function parseNpmVersion(stdout) {
44251
+ const output = requiredOutput(stdout, "npm latest-version lookup");
44252
+ let parsed;
44253
+ try {
44254
+ parsed = JSON.parse(output);
44255
+ } catch {
44256
+ throw new EmpiricalError("UPDATE_LATEST_VERSION_INVALID", "npm latest-version lookup returned malformed JSON");
44257
+ }
44258
+ if (typeof parsed !== "string" || !isVersion(parsed)) {
44259
+ throw new EmpiricalError("UPDATE_LATEST_VERSION_INVALID", "npm latest-version lookup did not return one semantic version");
44260
+ }
44261
+ return parsed;
44262
+ }
44263
+ function parseGlobalPrefix(stdout, platform) {
44264
+ const prefix = requiredOutput(stdout, "npm global-prefix discovery");
44265
+ const absolute = platform === "win32" ? win322.isAbsolute(prefix) : posix2.isAbsolute(prefix);
44266
+ if (!absolute || /[\r\n]/u.test(prefix)) {
44267
+ throw new EmpiricalError("UPDATE_PREFIX_INVALID", "npm global-prefix discovery did not return one absolute path");
44268
+ }
44269
+ return prefix;
44270
+ }
44271
+ function parseCliVersion(stdout, stage) {
44272
+ const version2 = requiredOutput(stdout, stage);
44273
+ if (!isVersion(version2)) {
44274
+ throw new EmpiricalError("UPDATE_CLI_VERSION_INVALID", `${stage} did not return one semantic version`);
44275
+ }
44276
+ return version2;
44277
+ }
44278
+ function requiredOutput(stdout, stage) {
44279
+ const output = stdout?.trim();
44280
+ if (!output)
44281
+ throw new EmpiricalError("UPDATE_OUTPUT_MISSING", `${stage} returned no output`);
44282
+ return output;
44283
+ }
44284
+ function isVersion(value) {
44285
+ return /^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?$/u.test(value);
44286
+ }
44287
+ function pathRemediation(prefix, installedEmpirical, platform) {
44288
+ const inspect = platform === "win32" ? "where empirical" : "type -a empirical";
44289
+ const bin = platform === "win32" ? prefix : posix2.join(prefix, "bin");
44290
+ return `Run '${inspect}' and place ${bin} before the older Empirical entry in PATH. The npm-installed executable is ${installedEmpirical}.`;
44221
44291
  }
44222
44292
  function assertStage(result, code, stage, remediation) {
44223
44293
  if (!result.error && result.status === 0)
@@ -14861,7 +14861,7 @@ function verifyReceiptDigest(receipt) {
14861
14861
  throw new Error(`Evidence receipt ${parsed.id} has an asserted result inconsistent with its provenance.`);
14862
14862
  }
14863
14863
  }
14864
- var SCHEMA_VERSION = 5, POLICY_SCHEMA_VERSION = 2, MANIFEST_SCHEMA_VERSION = 2, RECEIPT_SCHEMA_VERSION = 1, PRODUCT_VERSION = "0.26.0", workflowSchema, executionModeSchema, riskFloorSchema, completionLevelSchema, phaseSchema, workflowStatusSchema, criterionSchema, evidenceKindSchema, commandPolicySchema, evidencePolicySchema, projectPolicySchema, impactManifestSchema, authorizationSchema, COMPLETION_ORDER, receiptProvenanceSchema, receiptBaseSchema, executedReceiptSchema, artifactRecordSchema, collectedReceiptSchema, evidenceReceiptSchema;
14864
+ var SCHEMA_VERSION = 5, POLICY_SCHEMA_VERSION = 2, MANIFEST_SCHEMA_VERSION = 2, RECEIPT_SCHEMA_VERSION = 1, PRODUCT_VERSION = "0.26.1", workflowSchema, executionModeSchema, riskFloorSchema, completionLevelSchema, phaseSchema, workflowStatusSchema, criterionSchema, evidenceKindSchema, commandPolicySchema, evidencePolicySchema, projectPolicySchema, impactManifestSchema, authorizationSchema, COMPLETION_ORDER, receiptProvenanceSchema, receiptBaseSchema, executedReceiptSchema, artifactRecordSchema, collectedReceiptSchema, evidenceReceiptSchema;
14865
14865
  var init_protocol = __esm(() => {
14866
14866
  init_zod();
14867
14867
  workflowSchema = exports_external.enum(["fast", "complex"]);
@@ -22323,6 +22323,7 @@ var TRACKER_PROGRESS_STATES = [
22323
22323
  "done"
22324
22324
  ];
22325
22325
  var TRACKER_DISCOVERY_LIMIT = 100;
22326
+ var LINEAR_TEAM_DISCOVERY_PAGE_SIZE = 10;
22326
22327
  var TRACKER_ARTIFACT_MAX_COUNT = 10;
22327
22328
  var TRACKER_ARTIFACT_MAX_BYTES = 5 * 1024 * 1024;
22328
22329
  var TRACKER_ARTIFACT_TOTAL_BYTES = 10 * 1024 * 1024;
@@ -24291,9 +24292,9 @@ async function discoverLinearResources(authorization, dependencies) {
24291
24292
  let after = null;
24292
24293
  const cursors = new Set;
24293
24294
  for (let page = 0;page < TRACKER_DISCOVERY_LIMIT; page += 1) {
24294
- const data = await linearGraphql(`query EmpiricalTrackerDiscovery($after: String) {
24295
+ const data = await linearGraphql(`query EmpiricalTrackerDiscovery($after: String, $teamFirst: Int!) {
24295
24296
  organization { id name urlKey }
24296
- teams(first: 100, after: $after) {
24297
+ teams(first: $teamFirst, after: $after) {
24297
24298
  nodes {
24298
24299
  id name key
24299
24300
  projects(first: 100) { nodes { id name url } pageInfo { hasNextPage endCursor } }
@@ -24301,7 +24302,7 @@ async function discoverLinearResources(authorization, dependencies) {
24301
24302
  }
24302
24303
  pageInfo { hasNextPage endCursor }
24303
24304
  }
24304
- }`, { after }, authorization, dependencies);
24305
+ }`, { after, teamFirst: LINEAR_TEAM_DISCOVERY_PAGE_SIZE }, authorization, dependencies);
24305
24306
  const organizationValue = data.organization ?? (typeof data.viewer === "object" && data.viewer !== null && !Array.isArray(data.viewer) ? data.viewer.organization : undefined);
24306
24307
  const organization = record3(organizationValue, "Linear organization");
24307
24308
  const workspaceId = requiredString(organization, "id", "Linear workspace id");
@@ -14861,7 +14861,7 @@ function verifyReceiptDigest(receipt) {
14861
14861
  throw new Error(`Evidence receipt ${parsed.id} has an asserted result inconsistent with its provenance.`);
14862
14862
  }
14863
14863
  }
14864
- var SCHEMA_VERSION = 5, POLICY_SCHEMA_VERSION = 2, MANIFEST_SCHEMA_VERSION = 2, RECEIPT_SCHEMA_VERSION = 1, PRODUCT_VERSION = "0.26.0", workflowSchema, executionModeSchema, riskFloorSchema, completionLevelSchema, phaseSchema, workflowStatusSchema, criterionSchema, evidenceKindSchema, commandPolicySchema, evidencePolicySchema, projectPolicySchema, impactManifestSchema, authorizationSchema, COMPLETION_ORDER, receiptProvenanceSchema, receiptBaseSchema, executedReceiptSchema, artifactRecordSchema, collectedReceiptSchema, evidenceReceiptSchema;
14864
+ var SCHEMA_VERSION = 5, POLICY_SCHEMA_VERSION = 2, MANIFEST_SCHEMA_VERSION = 2, RECEIPT_SCHEMA_VERSION = 1, PRODUCT_VERSION = "0.26.1", workflowSchema, executionModeSchema, riskFloorSchema, completionLevelSchema, phaseSchema, workflowStatusSchema, criterionSchema, evidenceKindSchema, commandPolicySchema, evidencePolicySchema, projectPolicySchema, impactManifestSchema, authorizationSchema, COMPLETION_ORDER, receiptProvenanceSchema, receiptBaseSchema, executedReceiptSchema, artifactRecordSchema, collectedReceiptSchema, evidenceReceiptSchema;
14865
14865
  var init_protocol = __esm(() => {
14866
14866
  init_zod();
14867
14867
  workflowSchema = exports_external.enum(["fast", "complex"]);
@@ -22323,6 +22323,7 @@ var TRACKER_PROGRESS_STATES = [
22323
22323
  "done"
22324
22324
  ];
22325
22325
  var TRACKER_DISCOVERY_LIMIT = 100;
22326
+ var LINEAR_TEAM_DISCOVERY_PAGE_SIZE = 10;
22326
22327
  var TRACKER_ARTIFACT_MAX_COUNT = 10;
22327
22328
  var TRACKER_ARTIFACT_MAX_BYTES = 5 * 1024 * 1024;
22328
22329
  var TRACKER_ARTIFACT_TOTAL_BYTES = 10 * 1024 * 1024;
@@ -24291,9 +24292,9 @@ async function discoverLinearResources(authorization, dependencies) {
24291
24292
  let after = null;
24292
24293
  const cursors = new Set;
24293
24294
  for (let page = 0;page < TRACKER_DISCOVERY_LIMIT; page += 1) {
24294
- const data = await linearGraphql(`query EmpiricalTrackerDiscovery($after: String) {
24295
+ const data = await linearGraphql(`query EmpiricalTrackerDiscovery($after: String, $teamFirst: Int!) {
24295
24296
  organization { id name urlKey }
24296
- teams(first: 100, after: $after) {
24297
+ teams(first: $teamFirst, after: $after) {
24297
24298
  nodes {
24298
24299
  id name key
24299
24300
  projects(first: 100) { nodes { id name url } pageInfo { hasNextPage endCursor } }
@@ -24301,7 +24302,7 @@ async function discoverLinearResources(authorization, dependencies) {
24301
24302
  }
24302
24303
  pageInfo { hasNextPage endCursor }
24303
24304
  }
24304
- }`, { after }, authorization, dependencies);
24305
+ }`, { after, teamFirst: LINEAR_TEAM_DISCOVERY_PAGE_SIZE }, authorization, dependencies);
24305
24306
  const organizationValue = data.organization ?? (typeof data.viewer === "object" && data.viewer !== null && !Array.isArray(data.viewer) ? data.viewer.organization : undefined);
24306
24307
  const organization = record3(organizationValue, "Linear organization");
24307
24308
  const workspaceId = requiredString(organization, "id", "Linear workspace id");
package/dist/index.js CHANGED
@@ -14861,7 +14861,7 @@ function verifyReceiptDigest(receipt) {
14861
14861
  throw new Error(`Evidence receipt ${parsed.id} has an asserted result inconsistent with its provenance.`);
14862
14862
  }
14863
14863
  }
14864
- var SCHEMA_VERSION = 5, POLICY_SCHEMA_VERSION = 2, MANIFEST_SCHEMA_VERSION = 2, RECEIPT_SCHEMA_VERSION = 1, PRODUCT_VERSION = "0.26.0", workflowSchema, executionModeSchema, riskFloorSchema, completionLevelSchema, phaseSchema, workflowStatusSchema, criterionSchema, evidenceKindSchema, commandPolicySchema, evidencePolicySchema, projectPolicySchema, impactManifestSchema, authorizationSchema, COMPLETION_ORDER, receiptProvenanceSchema, receiptBaseSchema, executedReceiptSchema, artifactRecordSchema, collectedReceiptSchema, evidenceReceiptSchema;
14864
+ var SCHEMA_VERSION = 5, POLICY_SCHEMA_VERSION = 2, MANIFEST_SCHEMA_VERSION = 2, RECEIPT_SCHEMA_VERSION = 1, PRODUCT_VERSION = "0.26.1", workflowSchema, executionModeSchema, riskFloorSchema, completionLevelSchema, phaseSchema, workflowStatusSchema, criterionSchema, evidenceKindSchema, commandPolicySchema, evidencePolicySchema, projectPolicySchema, impactManifestSchema, authorizationSchema, COMPLETION_ORDER, receiptProvenanceSchema, receiptBaseSchema, executedReceiptSchema, artifactRecordSchema, collectedReceiptSchema, evidenceReceiptSchema;
14865
14865
  var init_protocol = __esm(() => {
14866
14866
  init_zod();
14867
14867
  workflowSchema = exports_external.enum(["fast", "complex"]);
@@ -22317,6 +22317,7 @@ var TRACKER_PROGRESS_STATES = [
22317
22317
  "done"
22318
22318
  ];
22319
22319
  var TRACKER_DISCOVERY_LIMIT = 100;
22320
+ var LINEAR_TEAM_DISCOVERY_PAGE_SIZE = 10;
22320
22321
  var TRACKER_ARTIFACT_MAX_COUNT = 10;
22321
22322
  var TRACKER_ARTIFACT_MAX_BYTES = 5 * 1024 * 1024;
22322
22323
  var TRACKER_ARTIFACT_TOTAL_BYTES = 10 * 1024 * 1024;
@@ -24285,9 +24286,9 @@ async function discoverLinearResources(authorization, dependencies) {
24285
24286
  let after = null;
24286
24287
  const cursors = new Set;
24287
24288
  for (let page = 0;page < TRACKER_DISCOVERY_LIMIT; page += 1) {
24288
- const data = await linearGraphql(`query EmpiricalTrackerDiscovery($after: String) {
24289
+ const data = await linearGraphql(`query EmpiricalTrackerDiscovery($after: String, $teamFirst: Int!) {
24289
24290
  organization { id name urlKey }
24290
- teams(first: 100, after: $after) {
24291
+ teams(first: $teamFirst, after: $after) {
24291
24292
  nodes {
24292
24293
  id name key
24293
24294
  projects(first: 100) { nodes { id name url } pageInfo { hasNextPage endCursor } }
@@ -24295,7 +24296,7 @@ async function discoverLinearResources(authorization, dependencies) {
24295
24296
  }
24296
24297
  pageInfo { hasNextPage endCursor }
24297
24298
  }
24298
- }`, { after }, authorization, dependencies);
24299
+ }`, { after, teamFirst: LINEAR_TEAM_DISCOVERY_PAGE_SIZE }, authorization, dependencies);
24299
24300
  const organizationValue = data.organization ?? (typeof data.viewer === "object" && data.viewer !== null && !Array.isArray(data.viewer) ? data.viewer.organization : undefined);
24300
24301
  const organization = record3(organizationValue, "Linear organization");
24301
24302
  const workspaceId = requiredString(organization, "id", "Linear workspace id");
@@ -14861,7 +14861,7 @@ function verifyReceiptDigest(receipt) {
14861
14861
  throw new Error(`Evidence receipt ${parsed.id} has an asserted result inconsistent with its provenance.`);
14862
14862
  }
14863
14863
  }
14864
- var SCHEMA_VERSION = 5, POLICY_SCHEMA_VERSION = 2, MANIFEST_SCHEMA_VERSION = 2, RECEIPT_SCHEMA_VERSION = 1, PRODUCT_VERSION = "0.26.0", workflowSchema, executionModeSchema, riskFloorSchema, completionLevelSchema, phaseSchema, workflowStatusSchema, criterionSchema, evidenceKindSchema, commandPolicySchema, evidencePolicySchema, projectPolicySchema, impactManifestSchema, authorizationSchema, COMPLETION_ORDER, receiptProvenanceSchema, receiptBaseSchema, executedReceiptSchema, artifactRecordSchema, collectedReceiptSchema, evidenceReceiptSchema;
14864
+ var SCHEMA_VERSION = 5, POLICY_SCHEMA_VERSION = 2, MANIFEST_SCHEMA_VERSION = 2, RECEIPT_SCHEMA_VERSION = 1, PRODUCT_VERSION = "0.26.1", workflowSchema, executionModeSchema, riskFloorSchema, completionLevelSchema, phaseSchema, workflowStatusSchema, criterionSchema, evidenceKindSchema, commandPolicySchema, evidencePolicySchema, projectPolicySchema, impactManifestSchema, authorizationSchema, COMPLETION_ORDER, receiptProvenanceSchema, receiptBaseSchema, executedReceiptSchema, artifactRecordSchema, collectedReceiptSchema, evidenceReceiptSchema;
14865
14865
  var init_protocol = __esm(() => {
14866
14866
  init_zod();
14867
14867
  workflowSchema = exports_external.enum(["fast", "complex"]);
@@ -1,8 +1,12 @@
1
1
  export interface LifecycleProcessResult {
2
2
  status: number | null;
3
3
  error?: Error;
4
+ stdout?: string;
4
5
  }
5
- export type LifecycleRunner = (command: string, args: string[]) => LifecycleProcessResult;
6
+ export interface LifecycleRunOptions {
7
+ capture?: boolean;
8
+ }
9
+ export type LifecycleRunner = (command: string, args: string[], options?: LifecycleRunOptions) => LifecycleProcessResult;
6
10
  export interface UpdateReport {
7
11
  package: "updated";
8
12
  integrations: "refreshed";
@@ -10,6 +14,7 @@ export interface UpdateReport {
10
14
  export interface PackageUninstallReport {
11
15
  package: "removed";
12
16
  }
13
- export declare function updateEmpirical(runner?: LifecycleRunner): UpdateReport;
17
+ export declare function updateEmpirical(runner?: LifecycleRunner, platform?: NodeJS.Platform): UpdateReport;
18
+ export declare function resolveGlobalEmpirical(prefix: string, platform: NodeJS.Platform): string;
14
19
  export declare function uninstallEmpirical(runner?: LifecycleRunner): PackageUninstallReport;
15
20
  export declare function isUninstallConfirmed(answer: string): boolean;
package/dist/mcp.js CHANGED
@@ -14861,7 +14861,7 @@ function verifyReceiptDigest(receipt) {
14861
14861
  throw new Error(`Evidence receipt ${parsed.id} has an asserted result inconsistent with its provenance.`);
14862
14862
  }
14863
14863
  }
14864
- var SCHEMA_VERSION = 5, POLICY_SCHEMA_VERSION = 2, MANIFEST_SCHEMA_VERSION = 2, RECEIPT_SCHEMA_VERSION = 1, PRODUCT_VERSION = "0.26.0", workflowSchema, executionModeSchema, riskFloorSchema, completionLevelSchema, phaseSchema, workflowStatusSchema, criterionSchema, evidenceKindSchema, commandPolicySchema, evidencePolicySchema, projectPolicySchema, impactManifestSchema, authorizationSchema, COMPLETION_ORDER, receiptProvenanceSchema, receiptBaseSchema, executedReceiptSchema, artifactRecordSchema, collectedReceiptSchema, evidenceReceiptSchema;
14864
+ var SCHEMA_VERSION = 5, POLICY_SCHEMA_VERSION = 2, MANIFEST_SCHEMA_VERSION = 2, RECEIPT_SCHEMA_VERSION = 1, PRODUCT_VERSION = "0.26.1", workflowSchema, executionModeSchema, riskFloorSchema, completionLevelSchema, phaseSchema, workflowStatusSchema, criterionSchema, evidenceKindSchema, commandPolicySchema, evidencePolicySchema, projectPolicySchema, impactManifestSchema, authorizationSchema, COMPLETION_ORDER, receiptProvenanceSchema, receiptBaseSchema, executedReceiptSchema, artifactRecordSchema, collectedReceiptSchema, evidenceReceiptSchema;
14865
14865
  var init_protocol = __esm(() => {
14866
14866
  init_zod();
14867
14867
  workflowSchema = exports_external.enum(["fast", "complex"]);
@@ -37278,6 +37278,7 @@ var TRACKER_PROGRESS_STATES = [
37278
37278
  "done"
37279
37279
  ];
37280
37280
  var TRACKER_DISCOVERY_LIMIT = 100;
37281
+ var LINEAR_TEAM_DISCOVERY_PAGE_SIZE = 10;
37281
37282
  var TRACKER_ARTIFACT_MAX_COUNT = 10;
37282
37283
  var TRACKER_ARTIFACT_MAX_BYTES = 5 * 1024 * 1024;
37283
37284
  var TRACKER_ARTIFACT_TOTAL_BYTES = 10 * 1024 * 1024;
@@ -39246,9 +39247,9 @@ async function discoverLinearResources(authorization, dependencies) {
39246
39247
  let after = null;
39247
39248
  const cursors = new Set;
39248
39249
  for (let page = 0;page < TRACKER_DISCOVERY_LIMIT; page += 1) {
39249
- const data = await linearGraphql(`query EmpiricalTrackerDiscovery($after: String) {
39250
+ const data = await linearGraphql(`query EmpiricalTrackerDiscovery($after: String, $teamFirst: Int!) {
39250
39251
  organization { id name urlKey }
39251
- teams(first: 100, after: $after) {
39252
+ teams(first: $teamFirst, after: $after) {
39252
39253
  nodes {
39253
39254
  id name key
39254
39255
  projects(first: 100) { nodes { id name url } pageInfo { hasNextPage endCursor } }
@@ -39256,7 +39257,7 @@ async function discoverLinearResources(authorization, dependencies) {
39256
39257
  }
39257
39258
  pageInfo { hasNextPage endCursor }
39258
39259
  }
39259
- }`, { after }, authorization, dependencies);
39260
+ }`, { after, teamFirst: LINEAR_TEAM_DISCOVERY_PAGE_SIZE }, authorization, dependencies);
39260
39261
  const organizationValue = data.organization ?? (typeof data.viewer === "object" && data.viewer !== null && !Array.isArray(data.viewer) ? data.viewer.organization : undefined);
39261
39262
  const organization = record4(organizationValue, "Linear organization");
39262
39263
  const workspaceId = requiredString(organization, "id", "Linear workspace id");
@@ -3,7 +3,7 @@ export declare const SCHEMA_VERSION: 5;
3
3
  export declare const POLICY_SCHEMA_VERSION: 2;
4
4
  export declare const MANIFEST_SCHEMA_VERSION: 2;
5
5
  export declare const RECEIPT_SCHEMA_VERSION: 1;
6
- export declare const PRODUCT_VERSION = "0.26.0";
6
+ export declare const PRODUCT_VERSION = "0.26.1";
7
7
  export declare const workflowSchema: z.ZodEnum<{
8
8
  complex: "complex";
9
9
  fast: "fast";
package/dist/protocol.js CHANGED
@@ -14861,7 +14861,7 @@ function verifyReceiptDigest(receipt) {
14861
14861
  throw new Error(`Evidence receipt ${parsed.id} has an asserted result inconsistent with its provenance.`);
14862
14862
  }
14863
14863
  }
14864
- var SCHEMA_VERSION = 5, POLICY_SCHEMA_VERSION = 2, MANIFEST_SCHEMA_VERSION = 2, RECEIPT_SCHEMA_VERSION = 1, PRODUCT_VERSION = "0.26.0", workflowSchema, executionModeSchema, riskFloorSchema, completionLevelSchema, phaseSchema, workflowStatusSchema, criterionSchema, evidenceKindSchema, commandPolicySchema, evidencePolicySchema, projectPolicySchema, impactManifestSchema, authorizationSchema, COMPLETION_ORDER, receiptProvenanceSchema, receiptBaseSchema, executedReceiptSchema, artifactRecordSchema, collectedReceiptSchema, evidenceReceiptSchema;
14864
+ var SCHEMA_VERSION = 5, POLICY_SCHEMA_VERSION = 2, MANIFEST_SCHEMA_VERSION = 2, RECEIPT_SCHEMA_VERSION = 1, PRODUCT_VERSION = "0.26.1", workflowSchema, executionModeSchema, riskFloorSchema, completionLevelSchema, phaseSchema, workflowStatusSchema, criterionSchema, evidenceKindSchema, commandPolicySchema, evidencePolicySchema, projectPolicySchema, impactManifestSchema, authorizationSchema, COMPLETION_ORDER, receiptProvenanceSchema, receiptBaseSchema, executedReceiptSchema, artifactRecordSchema, collectedReceiptSchema, evidenceReceiptSchema;
14865
14865
  var init_protocol = __esm(() => {
14866
14866
  init_zod();
14867
14867
  workflowSchema = exports_external.enum(["fast", "complex"]);
package/docs/demo.md CHANGED
@@ -1,4 +1,4 @@
1
- # Empirical 0.26.0 demo
1
+ # Empirical 0.26.1 demo
2
2
 
3
3
  ## Install once
4
4
 
@@ -25,12 +25,10 @@ and the prepared changelog heading must match it. `SCHEMA_VERSION` changes only
25
25
  when durable state compatibility changes; a package version change does not
26
26
  imply a schema change.
27
27
 
28
- The prepared `0.26.0` release is an alpha MINOR: it adds public concise/detailed
29
- question modes, strict Tracker Policy v2 ticket-requirement matrices, safe
30
- optional no-ticket behavior, and a packaged offline demo while leaving Schema 5
31
- and Tracker Policy v1/v2 compatible. Existing repositories require no state
32
- migration; repositories without an explicit question mode retain detailed
33
- questions until configured otherwise.
28
+ The prepared `0.26.1` release is an alpha PATCH: it bounds Linear team pages so
29
+ tracker discovery remains below Linear's GraphQL query-complexity limit. Schema
30
+ 5 and Tracker Policy v1/v2 remain compatible, and existing repositories require
31
+ no state migration.
34
32
 
35
33
  ## Changelog rules
36
34
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "empirical-sdd",
3
- "version": "0.26.0",
3
+ "version": "0.26.1",
4
4
  "description": "Agent-neutral, resumable spec-driven development for every terminal-capable coding agent",
5
5
  "type": "module",
6
6
  "bin": {