@patronage/software-factory 1.0.0-alpha.26 → 1.0.0-alpha.28

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/dist/cli.js ADDED
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env node
2
+ import { PrPublishFollowUpError, run } from "./index.js";
3
+ //#region src/cli.ts
4
+ try {
5
+ await run(process.argv, import.meta.filename);
6
+ } catch (error) {
7
+ if (error instanceof PrPublishFollowUpError) console.error(JSON.stringify(error.result, null, 2));
8
+ else console.error("\nError:", error instanceof Error ? error.message : String(error));
9
+ process.exit(1);
10
+ }
11
+ //#endregion
12
+ export {};
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
- import { existsSync, readFileSync, rmSync } from "node:fs";
2
1
  import { Command } from "commander";
3
2
  import { z } from "zod";
3
+ import { existsSync, readFileSync, rmSync } from "node:fs";
4
4
  import { PreviewProofRegistration } from "@patronage/factory-ci";
5
5
 
6
6
  //#region src/review-rungs.d.ts
@@ -1186,6 +1186,58 @@ declare const followUpFromArgv: (argv: string[]) => FollowUpAction;
1186
1186
  /** Canonical zod schema for the optional follow-up field on JSON outputs. */
1187
1187
  declare const FollowUpActionSchema: z.ZodType<FollowUpAction>;
1188
1188
  //#endregion
1189
+ //#region src/user-config.d.ts
1190
+ declare const githubAppConfigSchema: z.ZodObject<{
1191
+ appId: z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>;
1192
+ installationId: z.ZodOptional<z.ZodNumber>;
1193
+ privateKeyPath: z.ZodString;
1194
+ }, z.core.$strip>;
1195
+ type GithubAppConfig = z.infer<typeof githubAppConfigSchema>;
1196
+ declare const factoryUserConfigSchema: z.ZodObject<{
1197
+ githubApp: z.ZodOptional<z.ZodObject<{
1198
+ appId: z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>;
1199
+ installationId: z.ZodOptional<z.ZodNumber>;
1200
+ privateKeyPath: z.ZodString;
1201
+ }, z.core.$strip>>;
1202
+ hqAllowedOrigins: z.ZodOptional<z.ZodArray<z.ZodString>>;
1203
+ hqIngestCredentials: z.ZodOptional<z.ZodObject<{
1204
+ clientIdRef: z.ZodString;
1205
+ clientSecretRef: z.ZodString;
1206
+ }, z.core.$strip>>;
1207
+ schemaVersion: z.ZodLiteral<2>;
1208
+ }, z.core.$strip>;
1209
+ type FactoryUserConfig = z.infer<typeof factoryUserConfigSchema>;
1210
+ interface LoadUserConfigResult {
1211
+ path: string;
1212
+ config: FactoryUserConfig;
1213
+ ignoredKeys?: string[];
1214
+ }
1215
+ //#endregion
1216
+ //#region src/github-app-access.d.ts
1217
+ interface FactoryAppAccessDependencies {
1218
+ env?: NodeJS.ProcessEnv;
1219
+ existsSync?: (path: string) => boolean;
1220
+ exchangeBroker?: (input: {
1221
+ fetch?: typeof fetch;
1222
+ oidc: string;
1223
+ owner: string;
1224
+ repo: string;
1225
+ timeoutMs?: number;
1226
+ url?: string;
1227
+ }) => Promise<string>;
1228
+ fetch?: typeof fetch;
1229
+ githubApp?: GithubAppConfig;
1230
+ mintCursorOidc?: (input: {
1231
+ audience?: string;
1232
+ socketPath?: string;
1233
+ timeoutMs?: number;
1234
+ }) => Promise<string>;
1235
+ now?: () => number;
1236
+ timeoutMs?: number;
1237
+ token?: string;
1238
+ transportAttempts?: number;
1239
+ }
1240
+ //#endregion
1189
1241
  //#region src/pr-verify-mode.d.ts
1190
1242
  /**
1191
1243
  * The verification mode `pr:verify` resolved for a run.
@@ -1222,33 +1274,6 @@ interface PostCommitStatusInput {
1222
1274
  }
1223
1275
  type PostCommitStatus = (input: PostCommitStatusInput) => void;
1224
1276
  //#endregion
1225
- //#region src/user-config.d.ts
1226
- declare const githubAppConfigSchema: z.ZodObject<{
1227
- appId: z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>;
1228
- installationId: z.ZodOptional<z.ZodNumber>;
1229
- privateKeyPath: z.ZodString;
1230
- }, z.core.$strip>;
1231
- type GithubAppConfig = z.infer<typeof githubAppConfigSchema>;
1232
- declare const factoryUserConfigSchema: z.ZodObject<{
1233
- githubApp: z.ZodOptional<z.ZodObject<{
1234
- appId: z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>;
1235
- installationId: z.ZodOptional<z.ZodNumber>;
1236
- privateKeyPath: z.ZodString;
1237
- }, z.core.$strip>>;
1238
- hqAllowedOrigins: z.ZodOptional<z.ZodArray<z.ZodString>>;
1239
- hqIngestCredentials: z.ZodOptional<z.ZodObject<{
1240
- clientIdRef: z.ZodString;
1241
- clientSecretRef: z.ZodString;
1242
- }, z.core.$strip>>;
1243
- schemaVersion: z.ZodLiteral<2>;
1244
- }, z.core.$strip>;
1245
- type FactoryUserConfig = z.infer<typeof factoryUserConfigSchema>;
1246
- interface LoadUserConfigResult {
1247
- path: string;
1248
- config: FactoryUserConfig;
1249
- ignoredKeys?: string[];
1250
- }
1251
- //#endregion
1252
1277
  //#region src/github-check-runs.d.ts
1253
1278
  declare const FACTORY_CHECK_NAMES: {
1254
1279
  readonly "pr-ready": "patronage-factory/pr-ready";
@@ -1273,10 +1298,7 @@ interface PublishFactoryCheckInput {
1273
1298
  sha: string;
1274
1299
  status?: "completed" | "in_progress";
1275
1300
  }
1276
- interface CheckRunDependencies {
1277
- fetch?: typeof fetch;
1278
- githubApp?: GithubAppConfig;
1279
- now?: () => number;
1301
+ interface CheckRunDependencies extends FactoryAppAccessDependencies {
1280
1302
  postCommitStatus?: PostCommitStatus;
1281
1303
  resolveDetailsUrl?: (input: PublishFactoryCheckInput) => Promise<string> | string;
1282
1304
  /**
@@ -1291,18 +1313,18 @@ interface CheckRunDependencies {
1291
1313
  };
1292
1314
  /** Injectable delay for the bounded retry (tests only). */
1293
1315
  sleep?: (ms: number) => Promise<void>;
1294
- /** Overrides GITHUB_PUBLISH_TIMEOUT_MS for the App fetch calls (tests only). */
1295
- timeoutMs?: number;
1296
1316
  }
1297
1317
  /**
1298
1318
  * Publish a factory check run and *wait* for it, so a caller that has just made
1299
1319
  * the head SHA visible on GitHub (pushed the branch, created the PR) can make
1300
1320
  * the proof reliably present for that SHA before it returns (#247).
1301
1321
  *
1302
- * Never throws and never posts a commit-status fallback: the commit status is a
1303
- * human-readable mirror, not a proof surface, so a caller that needs an
1304
- * App-verified check run must be told plainly whether it got one. Returns
1305
- * `true` only when the App-owned check run landed.
1322
+ * Never posts a commit-status fallback: the commit status is a human-readable
1323
+ * mirror, not a proof surface, so a caller that needs an App-verified check
1324
+ * run must be told plainly whether it got one. Returns `true` only when the
1325
+ * App-owned check run landed. Throws when Factory App access is fail-closed
1326
+ * (missing mint or Cursor OIDC exchange, #949): `pr:ready` must not notice
1327
+ * that miss and exit 0. An optional-App skip still returns `false`.
1306
1328
  *
1307
1329
  * "Landed" means GitHub serves it, not that the POST was accepted (#520). On
1308
1330
  * PR #519 the POST was accepted, `pr:ready` reported ready and armed, and the
@@ -1338,8 +1360,8 @@ declare const mergeFreezeStateSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
1338
1360
  generationId: z.ZodNumber;
1339
1361
  headSha: z.ZodString;
1340
1362
  outcome: z.ZodEnum<{
1341
- active: "active";
1342
1363
  stale: "stale";
1364
+ active: "active";
1343
1365
  }>;
1344
1366
  reason: z.ZodString;
1345
1367
  recordedAt: z.ZodISODateTime;
@@ -1586,10 +1608,10 @@ declare const managedReadinessLedgerSchema: z.ZodObject<{
1586
1608
  reviewedHeadSha: z.ZodOptional<z.ZodString>;
1587
1609
  reviewedPatchId: z.ZodOptional<z.ZodString>;
1588
1610
  status: z.ZodEnum<{
1589
- stale: "stale";
1590
1611
  "not-required": "not-required";
1591
1612
  blocked: "blocked";
1592
1613
  current: "current";
1614
+ stale: "stale";
1593
1615
  missing: "missing";
1594
1616
  }>;
1595
1617
  }, z.core.$strip>;
@@ -1598,10 +1620,10 @@ declare const managedReadinessLedgerSchema: z.ZodObject<{
1598
1620
  reviewedHeadSha: z.ZodOptional<z.ZodString>;
1599
1621
  reviewedPatchId: z.ZodOptional<z.ZodString>;
1600
1622
  status: z.ZodEnum<{
1601
- stale: "stale";
1602
1623
  "not-required": "not-required";
1603
1624
  blocked: "blocked";
1604
1625
  current: "current";
1626
+ stale: "stale";
1605
1627
  missing: "missing";
1606
1628
  }>;
1607
1629
  }, z.core.$strip>>;
@@ -1735,7 +1757,15 @@ interface UpsertFactoryPrStatusCommentResult {
1735
1757
  declare function upsertFactoryPrStatusComment(input: UpsertFactoryPrStatusCommentInput, dependencies?: UpsertFactoryPrStatusCommentDependencies): Promise<UpsertFactoryPrStatusCommentResult>;
1736
1758
  //#endregion
1737
1759
  //#region src/pr-verify-proof-contract.d.ts
1738
- declare const SUPPORTED_PR_VERIFY_SCHEMA_VERSIONS: readonly [1, 2, 3, 4];
1760
+ /**
1761
+ * The pr:verify proof versions a reader accepts: the current one only (#920
1762
+ * item 1). #917 narrowed the pr:ready reader the same way. A pr:verify proof
1763
+ * is per-candidate and short-lived — it is rewritten on every head — so no
1764
+ * stored v1–v3 proof can outlive the release that drops it. Pre-1.0 posture
1765
+ * applies: one current contract, no compat reader. A consumer on an older
1766
+ * factory must adopt this release before HQ ingests its pr:verify proofs.
1767
+ */
1768
+ declare const SUPPORTED_PR_VERIFY_SCHEMA_VERSIONS: readonly [4];
1739
1769
  type PrVerifySchemaVersion = (typeof SUPPORTED_PR_VERIFY_SCHEMA_VERSIONS)[number];
1740
1770
  interface PrVerifyCommandResult {
1741
1771
  command: string;
@@ -1746,11 +1776,11 @@ interface PrVerifyCommandResult {
1746
1776
  * mapping: a `notRequiredCommands` entry must name the target recorded HERE
1747
1777
  * for the same command, so a withholding cannot point at whichever released
1748
1778
  * target happens to be convenient. Absent for a command the profile does
1749
- * not scope, and for v1–v3 proofs, which predate the field.
1779
+ * not scope.
1750
1780
  */
1751
1781
  impactTarget?: string;
1752
1782
  name: string;
1753
- scope: "always" | "docs-only" | "trivial" | "full";
1783
+ scope: "docs-only" | "trivial" | "full";
1754
1784
  }
1755
1785
  interface PrVerifyExecutedCommand {
1756
1786
  command: string;
@@ -1761,7 +1791,7 @@ interface PrVerifyExecutedCommand {
1761
1791
  durationMs: number;
1762
1792
  exitCode: number;
1763
1793
  name: string;
1764
- scope: "always" | "docs-only" | "trivial" | "full";
1794
+ scope: "docs-only" | "trivial" | "full";
1765
1795
  }
1766
1796
  /**
1767
1797
  * Epic #550 wave 3 (#430): a verification command the impact stamp proved this
@@ -1780,8 +1810,7 @@ interface PrVerifyNotRequiredCommand {
1780
1810
  }
1781
1811
  /**
1782
1812
  * Epic #758 (#762): a consumer package a stamp-scoped selection skipped, and
1783
- * why. Bound to the proof's stamp identity — the field is v4-only (the same
1784
- * window that can carry `impactStamp`) and refused when the proof records no
1813
+ * why. Bound to the proof's stamp identity — refused when the proof records no
1785
1814
  * stamp. The factory does not write this list; consumers do.
1786
1815
  */
1787
1816
  interface PrVerifyNotDemandedRecord {
@@ -1790,7 +1819,7 @@ interface PrVerifyNotDemandedRecord {
1790
1819
  }
1791
1820
  interface PrVerifyProof {
1792
1821
  schemaVersion: PrVerifySchemaVersion;
1793
- authoringSession?: string;
1822
+ authoringSession: string;
1794
1823
  base: string;
1795
1824
  baselineFullProofs?: {
1796
1825
  base: string;
@@ -1883,7 +1912,7 @@ declare const trustedImpactStamp: ({
1883
1912
  /**
1884
1913
  * #833: the recorded catch-up recognition, consumed ONLY when it is
1885
1914
  * identity-bound to the current candidate under exactly the rules
1886
- * `trustedImpactStamp` applies — the proof passed, is v4+, and its recorded
1915
+ * `trustedImpactStamp` applies — the proof passed, and its recorded
1887
1916
  * headSha AND patchId both name this candidate. The recognition withdraws
1888
1917
  * review and preview demands, so it earns the same strict double binding and
1889
1918
  * the same fail-closed answer (`undefined`) on every other state.
@@ -2438,7 +2467,8 @@ interface PrReadyGitDependencies {
2438
2467
  fetchOriginRef?: (cwd: string, refName: string) => void;
2439
2468
  currentHeadSha: (cwd: string) => string;
2440
2469
  mergeBaseSha: (cwd: string, base: string) => string;
2441
- objectIdAtRef: (cwd: string, ref: string, absolutePath: string) => string | undefined;
2470
+ /** `repositoryRelativePath` is repository-relative, never cwd-relative. */
2471
+ objectIdAtRef: (cwd: string, ref: string, repositoryRelativePath: string) => string | undefined;
2442
2472
  resolveCommitSha: (cwd: string, ref: string) => string | undefined;
2443
2473
  showFileAtRef: (cwd: string, ref: string, absolutePath: string) => string | undefined;
2444
2474
  stablePatchId: (cwd: string, base: string) => string;
@@ -2608,10 +2638,10 @@ declare const loadEvidenceEnvelopes: (cwd: string) => LoadedEvidenceEnvelope[];
2608
2638
  //#region src/review-proof-applicability.d.ts
2609
2639
  declare const REVIEW_STATUS_VALUES: readonly ["not-required", "current", "stale", "missing", "blocked"];
2610
2640
  declare const reviewStatusSchema: z.ZodEnum<{
2611
- stale: "stale";
2612
2641
  "not-required": "not-required";
2613
2642
  blocked: "blocked";
2614
2643
  current: "current";
2644
+ stale: "stale";
2615
2645
  missing: "missing";
2616
2646
  }>;
2617
2647
  type ReviewStatus = z.infer<typeof reviewStatusSchema>;
@@ -2901,6 +2931,13 @@ interface PrReviewArgs extends LoadProjectProfileInput {
2901
2931
  assemble?: boolean;
2902
2932
  base: string;
2903
2933
  cycle: number;
2934
+ /**
2935
+ * Issue carrying the factory-boundary manifest, which may be the work issue
2936
+ * itself. `--assemble` uses it to name the review rung the candidate's wave
2937
+ * demands, so the prompt asks for the findings schema the gate accepts
2938
+ * (#1001). It is the same handle `pr:publish` and `pr:ready` take.
2939
+ */
2940
+ epic?: number;
2904
2941
  dispositions?: string;
2905
2942
  findings?: string;
2906
2943
  historical?: boolean;
@@ -2934,7 +2971,22 @@ interface PrReviewDependencies {
2934
2971
  * test can state, never a silent pass.
2935
2972
  */
2936
2973
  basePolicy?: BaseReviewPolicyAuthority;
2974
+ /**
2975
+ * How the wave resolver reads an issue's closing pull requests (#1001).
2976
+ * Injected for the same reason `fetchIssueBody` is: the wave demand must be
2977
+ * statable in a test without a live repository.
2978
+ */
2979
+ fetchClosingPullRequests?: (input: PrReviewIssueBodyInput) => {
2980
+ number: number;
2981
+ state?: "OPEN" | "CLOSED" | "MERGED";
2982
+ }[];
2937
2983
  fetchIssueBody?: (input: PrReviewIssueBodyInput) => string;
2984
+ /**
2985
+ * How `--assemble` reads the pull request whose wave demand names the review
2986
+ * rung (#1001). Defaults to the GitHub lookup, and its result is validated
2987
+ * before use, so an injected stub is held to the same shape.
2988
+ */
2989
+ fetchWavePullRequest?: (cwd: string) => unknown;
2938
2990
  git?: PrReviewGitDependencies;
2939
2991
  hq?: HqIngestDependencies;
2940
2992
  /**
@@ -4409,13 +4461,13 @@ declare const evaluateReadiness: (input: EvaluationInput) => {
4409
4461
  reviews: {
4410
4462
  correctness: {
4411
4463
  required: boolean;
4412
- status: "stale" | "not-required" | "blocked" | "current" | "missing";
4464
+ status: "not-required" | "blocked" | "current" | "stale" | "missing";
4413
4465
  reviewedHeadSha?: string | undefined;
4414
4466
  reviewedPatchId?: string | undefined;
4415
4467
  };
4416
4468
  security?: {
4417
4469
  required: boolean;
4418
- status: "stale" | "not-required" | "blocked" | "current" | "missing";
4470
+ status: "not-required" | "blocked" | "current" | "stale" | "missing";
4419
4471
  reviewedHeadSha?: string | undefined;
4420
4472
  reviewedPatchId?: string | undefined;
4421
4473
  } | undefined;
@@ -4742,6 +4794,7 @@ interface AssembleReviewPromptInput {
4742
4794
  patchId: string;
4743
4795
  priorLedgerEntries?: FindingLedgerEntry[];
4744
4796
  profile: FactoryProjectProfile;
4797
+ waveRung?: EvidenceReviewRung;
4745
4798
  }
4746
4799
  interface AssembleReviewPromptGitDependencies {
4747
4800
  repositoryRoot: (cwd: string) => string;
@@ -4763,7 +4816,8 @@ declare const assembleReviewPrompt: ({
4763
4816
  kind,
4764
4817
  patchId,
4765
4818
  priorLedgerEntries,
4766
- profile
4819
+ profile,
4820
+ waveRung
4767
4821
  }: AssembleReviewPromptInput, dependencies?: AssembleReviewPromptDependencies) => AssembledReviewPrompt;
4768
4822
  //#endregion
4769
4823
  //#region src/review-ladder-trace.d.ts
@@ -4949,6 +5003,12 @@ interface CreateProgramOptions {
4949
5003
  output?: CliOutput;
4950
5004
  }
4951
5005
  declare function createProgram(options?: CreateProgramOptions): Command;
4952
- declare function run(argv?: string[]): Promise<void>;
5006
+ /**
5007
+ * Parse `argv` and run the matching command. `cliEntry` is the path of the
5008
+ * runnable bin module, which follow-up commands spawn; the bin entry passes its
5009
+ * own path. This function never runs itself — `./cli.js` is the only caller
5010
+ * that does (#386).
5011
+ */
5012
+ declare function run(argv?: string[], cliEntry?: string): Promise<void>;
4953
5013
  //#endregion
4954
5014
  export { type AppendFactoryTraceEventResult, type AssembledReviewPrompt, type BatteryCommandDisposition, type BatteryDisposition, type BoundaryCheckArgs, type BoundaryCheckDependencies, type BoundaryCheckProofRecord, type BuildEpicStructureEventInput, type CloudflareAccessServiceToken, type CompletedFactoryCheckSnapshot, CreateProgramOptions, DEFAULT_DEMAND_WAIVER_PATH, DEFAULT_FACTORY_REPOSITORY, DEFAULT_ROOT_SHARED_GLOBS, type DagDocument, type DemandWaiveArgs, type DemandWaiveDependencies, DemandWaiveRefusalError, type DemandWaiver, type DemandWaiverStore, EMPTY_TREE_OBJECT_HASH, EPIC_STRUCTURE_NODE_STATUSES, EPIC_STRUCTURE_SCHEMA_VERSION, type EpicStructureEvent, type EpicStructureGraphPayload, type EpicStructureNodeStatus, EpicStructureValidationError, type EvidenceEmitArgs, type EvidenceEmitDependencies, type EvidenceEmitResult, FACTORY_BASE_REF_ENV, FACTORY_CHANGED_FILES_ENV, FACTORY_CHANGED_FILES_FILE_ENV, type FactoryCliInvocation, FactoryCliInvocationSchema, type FactoryPrStatusCheckName, type FactoryPrStatusSources, type FactoryProjectProfile, type FactoryTraceDiagnostic, type FactoryTraceEnvelope, type FactoryTraceEvent, type FindingDisposition, type FindingLedgerEntry, type FollowUpAction, FollowUpActionSchema, type GitHubCheckRunMergeFreezeApi, type ImpactScopeDecision, type ImpactScopeSurface, type IssueReviewFocus, type LadderDispositionDeclaration, MERGE_FREEZE_APP_SLUG, MERGE_FREEZE_CHECK_NAME, type MergeFreezeAuthority, type MergeFreezeGeneration, type MergeFreezeState, type MergeFreezeStoreInput, type PlanFactoryPrStatusHudInput, type PrPublishArgs, type PrPublishDependencies, PrPublishFollowUpError, type PrPublishFollowUpOutcome, type PrPublishHandoff, type PrPublishResult, type PrReadyArgs, type PrReadyProof, type PresentFactoryPrStatusHudDependencies, type PresentFactoryPrStatusHudInput, type PreviewDisposition, type PreviewLifecyclePlan, type PreviewTargetPlan, type PublishEpicStructureArgs, type PublishEpicStructureResult, type PublishFollowUpPlan, REVIEW_FOCUS_SECTION, type ReadFactoryPrStatusSourcesDependencies, type ReadFactoryPrStatusSourcesInput, type RefreshFactoryPrStatusHudInput, type RenderFactoryPrStatusHudInput, type ReviewGateNotRequiredProof, type ReviewGateTraceIdentity, type ReviewLadderCycle, type ReviewLadderEvaluation, type ReviewLadderPolicy, type ReviewLadderStageEvent, type ReviewLadderTraceIdentity, type ReviewPromptSection, type ReviewPromptSectionProvenance, type ScanFactoryTraceDiagnosticsOptions, type ScanFactoryTraceOptions, type ScanFactoryTraceResult, type ScopedOutCommand, type TraceMirrorDiagnostic, type TraceSink, type TraceWriteResult, type TraceWriteSinks, type VerificationBatteryPlan, type VerificationReuse, type VerificationRunContext, type VerificationRunContextInput, type WaivedDemand, WorkerCheckoutGuardError, type WorkerCloseoutLessonsTraceEvent, appendReviewLadderStageTraceEvent, appendWithTraceSinks, applyDemandWaiver, assembleReviewPrompt, assertFactoryPrStatusIdentity, assertWorkerCheckoutAllowed, authorizeDemandWaiver, batteryScopeSummaryLines, blockingLadderFindings, boundary_manifest_d_exports as boundaryManifest, boundary_review_proof_d_exports as boundaryReviewProof, buildEpicStructureEvent, buildEpicStructurePayload, buildEvidenceEnvelope, buildReviewGateNotRequiredTraceEvent, buildReviewLadderStageTraceEvent, comment_provenance_d_exports as commentProvenance, createGitHubCheckRunMergeFreezeStore, createLocalJsonlTraceSink, createProgram, createVerificationRunContext, doctorProjectProfile, epicStructureEventId, evaluateReviewLadder, evidenceEnvelopeFilename, findingKey, followUpFromArgv, impactStampScopeDecision, inferFixedInThreadDispositions, isProductionHqUrl, loadProjectProfile, normalizeIssueComments, openLadderFindings, planFactoryPrStatusHud, planPreviewLifecycle, planPublishFollowUp, planVerificationBattery, readiness_evaluation_d_exports as prReadinessEvaluation, external_evidence_d_exports as prReadinessExternalEvidence, pr_body_renderer_d_exports as prReadinessPrBodyRenderer, proof_identity_d_exports as prReadinessProofIdentity, review_proof_d_exports as prReadinessReviewProof, status_check_rollup_d_exports as prReadinessStatusChecks, verification_proof_d_exports as prReadinessVerificationProof, presentFactoryPrStatusHud, previewLifecycleTargets, publishEpicStructure, readDemandWaivers, readFactoryPrStatusSources, readPrReadyProof, readPrReviewProof, refreshFactoryPrStatusHud, refreshFactoryPrStatusHudSafely, renderFactoryPrStatusHud, resolveFactoryRepository, resolveFindingBlocking, resolveReviewFindingCategory, resolveReviewFindingSeverity, resolveReviewLadderPolicy, resolveTraceWriteSinks, reviewCycleStateFor, reviewFocusFromIssueBody, reviewPromptSectionSchema, reviewPromptSectionsSchema, run, runBoundaryCheck, runDemandWaive, runEvidenceEmit, runPrPublish, runPrReady, runPrReview, runPrVerify, scanFactoryTraceDiagnostics, scanFactoryTraceEvents, selectWaiversForCandidate, staleRepeatLadderFindings, toFactoryTraceEnvelope, tryAppendReviewGateNotRequiredTraceEvent, tryAppendReviewLadderStageTraceEvent, validateBoundaryCheckProof, validateDagDocument, validateDemandWaiverStore, validateFactoryTraceEvent, validateMergeFreezeState, validatePrReadyProof, validatePrReviewProof, validatePrVerifyProof, validatePreviewLifecyclePlan, waivedDemandNotice, waivedDemandSchema, worktree_scratch_files_d_exports as worktreeScratchFiles };