@momentiq/dark-factory-cli 1.1.0 → 2.1.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 (149) hide show
  1. package/README.md +86 -2
  2. package/dist/adapters/critic-result-schema.d.ts +14 -14
  3. package/dist/adapters/index.d.ts +1 -0
  4. package/dist/adapters/index.d.ts.map +1 -1
  5. package/dist/adapters/index.js +7 -0
  6. package/dist/adapters/index.js.map +1 -1
  7. package/dist/adapters/static-schema-lint.d.ts +68 -0
  8. package/dist/adapters/static-schema-lint.d.ts.map +1 -0
  9. package/dist/adapters/static-schema-lint.js +813 -0
  10. package/dist/adapters/static-schema-lint.js.map +1 -0
  11. package/dist/cli.d.ts +17 -1
  12. package/dist/cli.d.ts.map +1 -1
  13. package/dist/cli.js +313 -41
  14. package/dist/cli.js.map +1 -1
  15. package/dist/commands/findings.d.ts +6 -0
  16. package/dist/commands/findings.d.ts.map +1 -0
  17. package/dist/commands/findings.js +196 -0
  18. package/dist/commands/findings.js.map +1 -0
  19. package/dist/commands/onboard.d.ts +6 -0
  20. package/dist/commands/onboard.d.ts.map +1 -0
  21. package/dist/commands/onboard.js +111 -0
  22. package/dist/commands/onboard.js.map +1 -0
  23. package/dist/commands/skills.d.ts +6 -0
  24. package/dist/commands/skills.d.ts.map +1 -0
  25. package/dist/commands/skills.js +248 -0
  26. package/dist/commands/skills.js.map +1 -0
  27. package/dist/cycle-doc-validator/validate_cycle_doc.py +131 -60
  28. package/dist/doctor.d.ts +17 -0
  29. package/dist/doctor.d.ts.map +1 -1
  30. package/dist/doctor.js +107 -0
  31. package/dist/doctor.js.map +1 -1
  32. package/dist/evidence/docker-build.d.ts +6 -0
  33. package/dist/evidence/docker-build.d.ts.map +1 -0
  34. package/dist/evidence/docker-build.js +199 -0
  35. package/dist/evidence/docker-build.js.map +1 -0
  36. package/dist/evidence/index.d.ts +1 -0
  37. package/dist/evidence/index.d.ts.map +1 -1
  38. package/dist/evidence/index.js +6 -0
  39. package/dist/evidence/index.js.map +1 -1
  40. package/dist/index.d.ts +1 -0
  41. package/dist/index.d.ts.map +1 -1
  42. package/dist/index.js +4 -0
  43. package/dist/index.js.map +1 -1
  44. package/dist/mcp/server.d.ts.map +1 -1
  45. package/dist/mcp/server.js +2 -0
  46. package/dist/mcp/server.js.map +1 -1
  47. package/dist/mcp/tools/doctor.d.ts.map +1 -1
  48. package/dist/mcp/tools/doctor.js +5 -0
  49. package/dist/mcp/tools/doctor.js.map +1 -1
  50. package/dist/mcp/tools/review-bypass.d.ts.map +1 -1
  51. package/dist/mcp/tools/review-bypass.js +21 -0
  52. package/dist/mcp/tools/review-bypass.js.map +1 -1
  53. package/dist/mcp/tools/skills-install.d.ts +6 -0
  54. package/dist/mcp/tools/skills-install.d.ts.map +1 -0
  55. package/dist/mcp/tools/skills-install.js +260 -0
  56. package/dist/mcp/tools/skills-install.js.map +1 -0
  57. package/dist/mcp/tools/stats-gate.d.ts.map +1 -1
  58. package/dist/mcp/tools/stats-gate.js +63 -15
  59. package/dist/mcp/tools/stats-gate.js.map +1 -1
  60. package/dist/onboard/analyze.d.ts +7 -0
  61. package/dist/onboard/analyze.d.ts.map +1 -0
  62. package/dist/onboard/analyze.js +86 -0
  63. package/dist/onboard/analyze.js.map +1 -0
  64. package/dist/onboard/analyzer.d.ts +15 -0
  65. package/dist/onboard/analyzer.d.ts.map +1 -0
  66. package/dist/onboard/analyzer.js +52 -0
  67. package/dist/onboard/analyzer.js.map +1 -0
  68. package/dist/onboard/analyzers/ci.d.ts +3 -0
  69. package/dist/onboard/analyzers/ci.d.ts.map +1 -0
  70. package/dist/onboard/analyzers/ci.js +112 -0
  71. package/dist/onboard/analyzers/ci.js.map +1 -0
  72. package/dist/onboard/analyzers/docs.d.ts +3 -0
  73. package/dist/onboard/analyzers/docs.d.ts.map +1 -0
  74. package/dist/onboard/analyzers/docs.js +151 -0
  75. package/dist/onboard/analyzers/docs.js.map +1 -0
  76. package/dist/onboard/analyzers/git.d.ts +3 -0
  77. package/dist/onboard/analyzers/git.d.ts.map +1 -0
  78. package/dist/onboard/analyzers/git.js +87 -0
  79. package/dist/onboard/analyzers/git.js.map +1 -0
  80. package/dist/onboard/analyzers/lockfile.d.ts +3 -0
  81. package/dist/onboard/analyzers/lockfile.d.ts.map +1 -0
  82. package/dist/onboard/analyzers/lockfile.js +285 -0
  83. package/dist/onboard/analyzers/lockfile.js.map +1 -0
  84. package/dist/onboard/analyzers/manifest.d.ts +3 -0
  85. package/dist/onboard/analyzers/manifest.d.ts.map +1 -0
  86. package/dist/onboard/analyzers/manifest.js +228 -0
  87. package/dist/onboard/analyzers/manifest.js.map +1 -0
  88. package/dist/onboard/analyzers/tree.d.ts +3 -0
  89. package/dist/onboard/analyzers/tree.d.ts.map +1 -0
  90. package/dist/onboard/analyzers/tree.js +196 -0
  91. package/dist/onboard/analyzers/tree.js.map +1 -0
  92. package/dist/onboard/fixtures/replay-git-history.d.ts +20 -0
  93. package/dist/onboard/fixtures/replay-git-history.d.ts.map +1 -0
  94. package/dist/onboard/fixtures/replay-git-history.js +91 -0
  95. package/dist/onboard/fixtures/replay-git-history.js.map +1 -0
  96. package/dist/onboard/schema.d.ts +545 -0
  97. package/dist/onboard/schema.d.ts.map +1 -0
  98. package/dist/onboard/schema.js +142 -0
  99. package/dist/onboard/schema.js.map +1 -0
  100. package/dist/policy/gate.d.ts +1 -1
  101. package/dist/policy/gate.d.ts.map +1 -1
  102. package/dist/policy/gate.js +96 -12
  103. package/dist/policy/gate.js.map +1 -1
  104. package/dist/prompt.d.ts +1 -0
  105. package/dist/prompt.d.ts.map +1 -1
  106. package/dist/prompt.js +105 -1
  107. package/dist/prompt.js.map +1 -1
  108. package/dist/report.d.ts +106 -3
  109. package/dist/report.d.ts.map +1 -1
  110. package/dist/report.js +282 -10
  111. package/dist/report.js.map +1 -1
  112. package/dist/runner.d.ts +2 -0
  113. package/dist/runner.d.ts.map +1 -1
  114. package/dist/runner.js +86 -2
  115. package/dist/runner.js.map +1 -1
  116. package/dist/self-consistency.d.ts +144 -0
  117. package/dist/self-consistency.d.ts.map +1 -0
  118. package/dist/self-consistency.js +368 -0
  119. package/dist/self-consistency.js.map +1 -0
  120. package/dist/skills/config.d.ts +176 -0
  121. package/dist/skills/config.d.ts.map +1 -0
  122. package/dist/skills/config.js +251 -0
  123. package/dist/skills/config.js.map +1 -0
  124. package/dist/skills/index.d.ts +4 -0
  125. package/dist/skills/index.d.ts.map +1 -0
  126. package/dist/skills/index.js +8 -0
  127. package/dist/skills/index.js.map +1 -0
  128. package/dist/skills/install.d.ts +62 -0
  129. package/dist/skills/install.d.ts.map +1 -0
  130. package/dist/skills/install.js +315 -0
  131. package/dist/skills/install.js.map +1 -0
  132. package/dist/skills/template.d.ts +42 -0
  133. package/dist/skills/template.d.ts.map +1 -0
  134. package/dist/skills/template.js +95 -0
  135. package/dist/skills/template.js.map +1 -0
  136. package/dist/trusted-surface/rebind.d.ts.map +1 -1
  137. package/dist/trusted-surface/rebind.js +14 -1
  138. package/dist/trusted-surface/rebind.js.map +1 -1
  139. package/package.json +36 -2
  140. package/skills/README.md +89 -0
  141. package/skills/chief-engineer-blitz/SKILL.md.tmpl +443 -0
  142. package/skills/chief-engineer-blitz/skill.json +53 -0
  143. package/skills/chief-engineer-review/SKILL.md.tmpl +184 -0
  144. package/skills/chief-engineer-review/references/review-examples.md.tmpl +130 -0
  145. package/skills/chief-engineer-review/skill.json +67 -0
  146. package/skills/chief-engineer-review/templates/code-review-prompt.md.tmpl +111 -0
  147. package/skills/chief-engineer-review/templates/escalation-prompt.md.tmpl +56 -0
  148. package/skills/chief-engineer-review/templates/plan-review-prompt.md.tmpl +74 -0
  149. package/skills/skill-schema.json +73 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"static-schema-lint.js","sourceRoot":"","sources":["../../src/adapters/static-schema-lint.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts CHANGED
@@ -1,3 +1,19 @@
1
1
  #!/usr/bin/env node
2
- export {};
2
+ import { type LoadedConfig } from "./policy/config.js";
3
+ import { type SelfConsistencyProbeFn } from "./self-consistency.js";
4
+ /**
5
+ * Cursor finding (cli.ts:560) — resolve the production
6
+ * self-consistency probe so the policy `unilateralVetoRules.requireCorroborationFor`
7
+ * actually demotes findings on the default OSS CLI path. Returns the
8
+ * probe callable when (a) the loaded policy lists `self_inconsistent`
9
+ * AND (b) `buildDefaultSelfConsistencyProbe()` returns a non-null
10
+ * factory (i.e. the env has a `GEMINI_API_KEY`). Otherwise returns
11
+ * undefined, which makes the runner skip the probe pass entirely
12
+ * (byte-identical pre-#112 behavior).
13
+ *
14
+ * Operators who want a non-Gemini probe (or the hosted worker's
15
+ * proprietary calibrated probe) replace the callable by importing
16
+ * `runReview` directly with their own `selfConsistencyProbe`.
17
+ */
18
+ export declare function resolveProductionSelfConsistencyProbe(loaded: LoadedConfig): SelfConsistencyProbeFn | undefined;
3
19
  //# sourceMappingURL=cli.d.ts.map
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AA0EA,OAAO,EAAyB,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAG9E,OAAO,EAEL,KAAK,sBAAsB,EAC5B,MAAM,uBAAuB,CAAC;AAgf/B;;;;;;;;;;;;;GAaG;AACH,wBAAgB,qCAAqC,CACnD,MAAM,EAAE,YAAY,GACnB,sBAAsB,GAAG,SAAS,CAWpC"}
package/dist/cli.js CHANGED
@@ -34,7 +34,7 @@
34
34
  // subcommands accept their own flags directly (see `cmdAudit` and
35
35
  // `cmdAdmitPr` below).
36
36
  import { spawnSync } from "node:child_process";
37
- import { accessSync, appendFileSync, constants as fsConstants, existsSync, readFileSync, } from "node:fs";
37
+ import { accessSync, appendFileSync, constants as fsConstants, existsSync, readFileSync, realpathSync, } from "node:fs";
38
38
  import { dirname, resolve } from "node:path";
39
39
  import { fileURLToPath } from "node:url";
40
40
  import { runValidateCycleDoc } from "./cycle-doc-validator/index.js";
@@ -54,10 +54,11 @@ import { AdapterRegistry, collectRequiredEnvVars, } from "./adapters/critic.js";
54
54
  import { loadAgentReviewConfig } from "./policy/config.js";
55
55
  import { buildCriticReport, buildZeroEvidenceDiagnostic } from "./report.js";
56
56
  import { runReview, runCommitGate } from "./runner.js";
57
+ import { buildDefaultSelfConsistencyProbe, } from "./self-consistency.js";
57
58
  import { resolveArtifactDir, telemetryPath } from "./paths.js";
58
59
  // Phase F-LOCAL — hook-facing subcommand support.
59
60
  import { loadDopplerBootstrapEnv, DEFAULT_BOOTSTRAP_ALLOWLIST, } from "./doppler-bootstrap.js";
60
- import { classifyDoctorState, runDoctor } from "./doctor.js";
61
+ import { classifyDoctorState, detectCloudEnv, runDoctor, } from "./doctor.js";
61
62
  import { resolveProfile } from "./policy/profile.js";
62
63
  import { commitsForPushUpdate, parsePrePushUpdates, resolveCommit, commitParent, changedFiles, } from "./git.js";
63
64
  import { runQualityGates } from "./evidence/quality-gates.js";
@@ -69,12 +70,25 @@ import { summarizeGate } from "./policy/gate.js";
69
70
  // stderr-only diagnostics) is structurally distinct from the other
70
71
  // subcommands. See docs/roadmap/cycles/cycle5-mcp-server.md.
71
72
  import { cmdMcp } from "./mcp/cli.js";
73
+ // DFP #192 — `df skills install/list` subcommand. The skills module is the
74
+ // install engine (consumer-config-driven template rendering); cmdSkills
75
+ // in commands/skills.ts is the CLI wrapper around it.
76
+ import { cmdSkills } from "./commands/skills.js";
72
77
  // Cycle 11 Phase 11.1 — `df flow` namespace surfacing the PR Flow
73
78
  // Assessor's records from momentiq-ai/df-assessments. See
74
79
  // docs/roadmap/cycles/cycle11-flow-assessor-surfacing-and-tools.md.
75
80
  import { cmdFlow } from "./commands/flow/index.js";
76
81
  import { cmdShow } from "./commands/show.js";
77
82
  import { cmdStatus } from "./commands/status.js";
83
+ // Cycle 13 (dark-factory-platform#149) — `df findings --range` surfaces
84
+ // the per-commit iteration-receipt artifacts that the new (default)
85
+ // final-commit-only `df gate-push` semantic leaves un-gated. See
86
+ // src/commands/findings.ts for the rationale.
87
+ import { cmdFindings } from "./commands/findings.js";
88
+ // Cycle 15 Phase A — `df onboard --analysis-only --json` runs the
89
+ // deterministic Stage A scanner (no LLM) and emits a bounded
90
+ // RepoAnalysis. Phase B/C extend the surface with --apply/--pr.
91
+ import { cmdOnboard } from "./commands/onboard.js";
78
92
  // Cycle 12 Phase 12.2 — agent handoff protocol (v2 — Issue-anchored, native-
79
93
  // baton). The four cmd* functions below wrap the verb orchestrators exported
80
94
  // from src/handoff/index.ts and route to them at the bottom of main(). v1
@@ -112,12 +126,23 @@ function printHelp(meta) {
112
126
  " df review Run the local critic against a commit",
113
127
  " (subscription auth — Cursor / Codex /",
114
128
  " Claude logins, NOT pay-per-token keys).",
115
- " df gate-push Pre-push gate — block a push when a",
116
- " prior commit has unresolved blockers.",
129
+ " df gate-push Pre-push gate — block a push when HEAD's",
130
+ " critic verdict has unresolved blockers.",
131
+ " Default since Cycle 13 (dark-factory-",
132
+ " platform#149): gates the HEAD commit",
133
+ " only; intermediate commits are iteration",
134
+ " receipts (see `df findings --range`).",
135
+ " Legacy per-commit gating via",
136
+ " `--full-range` / `DF_GATE_FULL_RANGE=1`.",
117
137
  " df show Render the per-commit review artifact",
118
138
  " (with --json for the structured form).",
119
139
  " df status Terse verdict + per-critic status for",
120
140
  " a commit (with --json for shell pipes).",
141
+ " df findings --range BASE..HEAD",
142
+ " Audit-inspect per-commit findings for the",
143
+ " iteration-receipt artifacts the default",
144
+ " final-commit-only `df gate-push` leaves",
145
+ " un-gated (Cycle 13). NOT a gate.",
121
146
  " df gates Run configured quality gates and",
122
147
  " triggered verification routes.",
123
148
  " df stats Pretty-print critic call stats + bypass",
@@ -155,6 +180,13 @@ function printHelp(meta) {
155
180
  " + prompt catalog. Run `df mcp --help` for the",
156
181
  " .mcp.json wiring snippet.",
157
182
  "",
183
+ "Bundled skills (consumer-shape):",
184
+ " df skills install <name> Render + install a bundled skill into",
185
+ " .claude/skills/<name>/, driven by the consumer's",
186
+ " darkfactory.yaml. --all installs every skill",
187
+ " flagged enabled: true.",
188
+ " df skills list List bundled skill names + summaries.",
189
+ "",
158
190
  "PR Flow Assessor surfacing:",
159
191
  " df flow Surface the PR Flow Assessor's records.",
160
192
  " Six sub-subcommands: show / agent /",
@@ -294,14 +326,27 @@ const CYCLE12_SUBCOMMANDS = new Set([
294
326
  // not at the top level, so the surface stays grouped (`df flow --help` is
295
327
  // authoritative) and we don't pollute the top-level `df` namespace.
296
328
  const CYCLE11_SUBCOMMANDS = new Set(["flow"]);
297
- // `df show` / `df status` CLI mirrors of the df_show_run / df_findings
298
- // MCP tools. Both routes share the loader + mappers in
329
+ // `df show` / `df status` / `df findings` CLI artifact-inspection
330
+ // subcommands. `show` + `status` mirror the df_show_run / df_findings MCP
331
+ // tools per-commit (cycle 5); `findings --range <base>..<head>` (Cycle
332
+ // 13, dark-factory-platform#149) walks the iteration-receipt artifacts
333
+ // the new default final-commit-only `df gate-push` semantic leaves
334
+ // un-gated. All three share the loader + mappers in
299
335
  // src/lib/show-status-core.ts so the CLI's `--json` output stays
300
336
  // byte-equivalent with the MCP tool's structuredContent envelope (cycle 5
301
337
  // spec requirement). Registered here so the early --help interception
302
- // forwards `df show --help` / `df status --help` to the per-subcommand
303
- // help printers.
304
- const SHOW_STATUS_SUBCOMMANDS = new Set(["show", "status"]);
338
+ // forwards each `df <cmd> --help` to its per-subcommand help printer.
339
+ const SHOW_STATUS_SUBCOMMANDS = new Set(["show", "status", "findings"]);
340
+ // `df skills` bundled-skill installer (Cycle: DFP #192). The namespace
341
+ // fans out into `install/list` sub-subcommands handled inside cmdSkills;
342
+ // registered here so the early --help interception above forwards
343
+ // `df skills --help` to cmdSkills' own help printer instead of the
344
+ // top-level printHelp.
345
+ const SKILLS_SUBCOMMANDS = new Set(["skills"]);
346
+ // `df onboard` — cycle 15 Phase A deterministic repo analyzer. Registered
347
+ // here so `df onboard --help` reaches cmdOnboard's per-subcommand help
348
+ // printer instead of falling through to the top-level printHelp.
349
+ const ONBOARD_SUBCOMMANDS = new Set(["onboard"]);
305
350
  function cmdStatusCheck(_rest) {
306
351
  // pr-status-check is a sentinel aggregator. As cycle 331.1 Phase E
307
352
  // documents in `.github/workflows/pr-status-check.yml`, this gate is
@@ -345,6 +390,12 @@ const ADAPTER_LOADERS = [
345
390
  { id: "codex-sdk", modulePath: "./adapters/codex-sdk.js", className: "CodexSdkAdapter" },
346
391
  { id: "gemini-sdk", modulePath: "./adapters/gemini-sdk.js", className: "GeminiSdkAdapter" },
347
392
  { id: "grok-direct-sdk", modulePath: "./adapters/grok-direct-sdk.js", className: "GrokDirectSdkAdapter" },
393
+ // Consumer dark-factory-platform#107 — deterministic schema-lint adapter.
394
+ // No vendor SDK, no env vars, no network; pure ajv-backed validation of
395
+ // schema-annotated code blocks in changed markdown / config files.
396
+ // Loads alongside the LLM adapters so the local profile can include it
397
+ // without any additional toolchain.
398
+ { id: "static-schema-lint", modulePath: "./adapters/static-schema-lint.js", className: "StaticSchemaLintAdapter" },
348
399
  ];
349
400
  async function buildDefaultAdapterRegistry() {
350
401
  // Each adapter reads its API key from the corresponding env var by
@@ -397,6 +448,31 @@ function appendStepSummary(markdown) {
397
448
  // best-effort — never let a summary-write failure change the gate outcome.
398
449
  }
399
450
  }
451
+ /**
452
+ * Cursor finding (cli.ts:560) — resolve the production
453
+ * self-consistency probe so the policy `unilateralVetoRules.requireCorroborationFor`
454
+ * actually demotes findings on the default OSS CLI path. Returns the
455
+ * probe callable when (a) the loaded policy lists `self_inconsistent`
456
+ * AND (b) `buildDefaultSelfConsistencyProbe()` returns a non-null
457
+ * factory (i.e. the env has a `GEMINI_API_KEY`). Otherwise returns
458
+ * undefined, which makes the runner skip the probe pass entirely
459
+ * (byte-identical pre-#112 behavior).
460
+ *
461
+ * Operators who want a non-Gemini probe (or the hosted worker's
462
+ * proprietary calibrated probe) replace the callable by importing
463
+ * `runReview` directly with their own `selfConsistencyProbe`.
464
+ */
465
+ export function resolveProductionSelfConsistencyProbe(loaded) {
466
+ const flags = loaded.config.aggregation.unilateralVetoRules?.requireCorroborationFor ?? [];
467
+ if (!flags.includes("self_inconsistent"))
468
+ return undefined;
469
+ const probe = buildDefaultSelfConsistencyProbe();
470
+ if (probe === null) {
471
+ process.stderr.write("[critic] self-consistency probe disabled — GEMINI_API_KEY unset; policy `unilateralVetoRules.requireCorroborationFor: [self_inconsistent]` is configured but probe-flagged findings will not be demoted on this run.\n");
472
+ return undefined;
473
+ }
474
+ return probe;
475
+ }
400
476
  async function cmdCritic(rest) {
401
477
  if (rest.includes("--help") || rest.includes("-h")) {
402
478
  process.stdout.write([
@@ -437,11 +513,13 @@ async function cmdCritic(rest) {
437
513
  // audit trail on its own PRs.
438
514
  const artifactDir = await resolveArtifactDir(loaded);
439
515
  const sink = new FileTelemetrySink(telemetryPath(artifactDir));
516
+ const selfConsistencyProbe = resolveProductionSelfConsistencyProbe(loaded);
440
517
  const outcome = await runReview({
441
518
  loaded,
442
519
  registry,
443
520
  ref: opts.ref,
444
521
  telemetry: sink,
522
+ ...(selfConsistencyProbe !== undefined ? { selfConsistencyProbe } : {}),
445
523
  });
446
524
  // sage3c#2213 — surface per-critic errors + a loud degradation
447
525
  // warning. `buildCriticReport` is pure; it turns the artifact's
@@ -625,12 +703,14 @@ async function cmdReview(rest) {
625
703
  const ref = flags["commit"] ?? "HEAD";
626
704
  const foreground = flags["foreground"] === true || flags["foreground"] === "true";
627
705
  try {
706
+ const selfConsistencyProbe = resolveProductionSelfConsistencyProbe(loaded);
628
707
  const outcome = await runReview({
629
708
  loaded,
630
709
  registry,
631
710
  ref,
632
711
  telemetry: sink,
633
712
  profileName,
713
+ ...(selfConsistencyProbe !== undefined ? { selfConsistencyProbe } : {}),
634
714
  });
635
715
  // Issue #51 — loud post-completion diagnostic for zero-evidence
636
716
  // reviews. When every critic errored (no completed verdicts), the
@@ -672,19 +752,93 @@ function hasProfileEntry(config, profileName) {
672
752
  return config.profiles[profileName] !== undefined;
673
753
  }
674
754
  // ----- df gate-push -----
755
+ //
756
+ // Cycle 13 (dark-factory-platform#149) — semantic flip:
757
+ //
758
+ // DEFAULT MODE: final-commit-only. The HEAD (last) commit of each
759
+ // push update is the only one whose verdict decides the gate. The
760
+ // intermediate commits' per-SHA artifacts still exist on disk
761
+ // (`.git/agent-reviews/<sha>.json`) as iteration receipts and stay
762
+ // visible via `df findings --range <base>..<head>`, but they do
763
+ // NOT influence the push outcome. This matches the documented
764
+ // find-fix-new-commit pattern: commit B fixes commit A's blockers,
765
+ // B's verdict is what gates the push.
766
+ //
767
+ // Soundness caveat: each per-SHA artifact reviews `parent..commit`
768
+ // only, NOT `base..tip`. HEAD's APPROVED verdict therefore proves
769
+ // the LAST incremental change is safe; it does NOT prove the
770
+ // cumulative `base..tip` diff is safe. The banner + help text
771
+ // surface this so operators can choose `--full-range` (or rely on
772
+ // the CI cold-path agent-critic workflow that reviews the full PR
773
+ // diff) when cumulative soundness matters more than termination of
774
+ // the find-fix loop.
775
+ //
776
+ // LEGACY MODE: full-range — gate every commit in the push update,
777
+ // block on any single commit's blockers. Opt-in via `--full-range`
778
+ // OR `DF_GATE_FULL_RANGE=1`. Use cases: forensic replay, per-commit
779
+ // audit (each commit is independently reviewed in a deploy log),
780
+ // cumulative-state evidence requirements.
781
+ //
782
+ // The legacy mode was the implicit default before Cycle 13. It
783
+ // makes the find-fix-new-commit pattern non-terminating in practice
784
+ // (any iteration round produces stale intermediate `CHANGES_REQUESTED`
785
+ // verdicts that block the push and force a squash, which spawns a
786
+ // fresh full-diff review that surfaces new findings — see
787
+ // consumer-side dark-factory-platform#149 for the full failure mode).
788
+ //
789
+ // The mode banner — `GATE MODE: final-commit-only (HEAD=<sha>)` or
790
+ // `GATE MODE: full-range (N commits)` — prints once per push update so
791
+ // operators see which semantic is active without needing to remember
792
+ // the env-var / flag state.
793
+ //
794
+ // `--commit SHA --ci` mode is a single-commit replay path (CI cold-
795
+ // path); the legacy/default split does not apply to it (one commit
796
+ // only).
797
+ function isFullRangeRequested(flags) {
798
+ if (flags["full-range"] === true || flags["full-range"] === "true") {
799
+ return true;
800
+ }
801
+ const env = process.env["DF_GATE_FULL_RANGE"];
802
+ if (env !== undefined && env !== "" && env !== "0" && env.toLowerCase() !== "false") {
803
+ return true;
804
+ }
805
+ return false;
806
+ }
675
807
  async function cmdGatePush(rest) {
676
808
  if (rest.includes("--help") || rest.includes("-h")) {
677
809
  process.stdout.write([
678
- "df gate-push — block a push when prior commits have unresolved blockers.",
810
+ "df gate-push — gate a push on the local-critic verdict.",
679
811
  "",
680
812
  "Usage:",
681
- " df gate-push [--profile NAME] # local pre-push",
682
- " df gate-push --commit SHA --ci [--profile NAME] # CI replay",
813
+ " df gate-push [--profile NAME] # local pre-push",
814
+ " df gate-push --full-range [--profile NAME] # legacy: gate every commit",
815
+ " df gate-push --commit SHA --ci [--profile NAME] # CI replay (single commit)",
816
+ "",
817
+ "Designed for .husky/pre-push. Reads git's pre-push protocol on stdin.",
683
818
  "",
684
- "Designed for .husky/pre-push. Reads git's pre-push protocol on stdin",
685
- "and gates each commit in the pushed range against the per-SHA artifact",
686
- "written by `df review`. Exit 1 if any commit has unresolved BLOCKER",
687
- "findings under the configured aggregation policy.",
819
+ "Default mode (Cycle 13 dark-factory-platform#149):",
820
+ " Gates ONLY the HEAD (final) commit of each push update. Intermediate",
821
+ " commits' per-SHA artifacts at .git/agent-reviews/<sha>.json are still",
822
+ " written (iteration audit), but they DO NOT influence the gate.",
823
+ " Inspect them with: `df findings --range <base>..HEAD`.",
824
+ "",
825
+ "Legacy mode — opt in via `--full-range` OR `DF_GATE_FULL_RANGE=1`:",
826
+ " Gates EVERY commit in the push range; any single commit's blocker",
827
+ " blocks the push. Use for forensic replay or per-commit deploy-log",
828
+ " audit. Note: this was the implicit default before Cycle 13 and is",
829
+ " what produced the find-fix-new-commit termination failure.",
830
+ "",
831
+ "Soundness caveat (default mode):",
832
+ " Each per-SHA artifact reviews `parent..commit` only, NOT `base..tip`.",
833
+ " HEAD's APPROVED verdict therefore proves the LAST incremental change",
834
+ " is safe; it does NOT prove the cumulative `base..tip` diff is safe.",
835
+ " For cumulative-state evidence either pass `--full-range` (or set",
836
+ " `DF_GATE_FULL_RANGE=1`) for per-commit gating, or rely on the CI",
837
+ " cold-path agent-critic workflow (which reviews the full PR diff).",
838
+ "",
839
+ "Exit code:",
840
+ " 1 if the gating verdict (HEAD-only or full-range, per mode) blocks.",
841
+ " 0 otherwise.",
688
842
  "",
689
843
  "Bypass:",
690
844
  " AGENT_REVIEW_BYPASS=\"<reason>\" git push # logged to _runs.ndjson",
@@ -723,6 +877,7 @@ async function cmdGatePush(rest) {
723
877
  process.stdout.write(`-- ${sha.slice(0, 12)}\n${summarizeGate(result)}\n`);
724
878
  return result.blocked ? 1 : 0;
725
879
  }
880
+ const fullRange = isFullRangeRequested(flags);
726
881
  const stdin = await readStdinUtf8FromTtyOrStream();
727
882
  const updates = parsePrePushUpdates(stdin);
728
883
  if (updates.length === 0) {
@@ -736,18 +891,45 @@ async function cmdGatePush(rest) {
736
891
  const commits = await commitsForPushUpdate(update);
737
892
  if (commits.length === 0)
738
893
  continue;
739
- process.stdout.write(`df gate-push: gating ${commits.length} commit(s) on ${update.localRef} -> ${update.remoteRef}\n`);
740
- for (const sha of commits) {
741
- const result = await runCommitGate({
742
- loaded,
743
- commit: sha,
744
- telemetry: sink,
745
- profileName,
746
- });
747
- process.stdout.write(`-- ${sha.slice(0, 12)}\n${summarizeGate(result)}\n`);
748
- if (result.blocked)
749
- blockedAny = true;
894
+ if (fullRange) {
895
+ // Legacy mode gate every commit in the range. Pre-Cycle-13
896
+ // behavior, kept for forensic replay and per-commit audit
897
+ // contexts (e.g. production-deploy push where each commit is
898
+ // independently reviewed in the deploy log).
899
+ process.stdout.write(`GATE MODE: full-range (${commits.length} commits) — ${update.localRef} -> ${update.remoteRef}\n`);
900
+ for (const sha of commits) {
901
+ const result = await runCommitGate({
902
+ loaded,
903
+ commit: sha,
904
+ telemetry: sink,
905
+ profileName,
906
+ });
907
+ process.stdout.write(`-- ${sha.slice(0, 12)}\n${summarizeGate(result)}\n`);
908
+ if (result.blocked)
909
+ blockedAny = true;
910
+ }
911
+ continue;
750
912
  }
913
+ // Default mode (Cycle 13) — final-commit-only. The last commit in
914
+ // the range (`commitsForPushUpdate` returns the rev-list reverse,
915
+ // so HEAD is the last element) is the only one whose verdict
916
+ // gates the push. Intermediate commits' artifacts are iteration
917
+ // receipts; inspect them with `df findings --range`.
918
+ const headSha = commits[commits.length - 1] ?? "";
919
+ process.stdout.write(`GATE MODE: final-commit-only (HEAD=${headSha.slice(0, 12)}) — ${update.localRef} -> ${update.remoteRef}\n`);
920
+ if (commits.length > 1) {
921
+ process.stdout.write(` intermediate commits (${commits.length - 1}) are iteration receipts; inspect with: df findings --range ${update.remoteRef === "" ? "<base>" : `${update.remoteSha.slice(0, 12)}..${headSha.slice(0, 12)}`}\n`);
922
+ process.stdout.write(` soundness caveat: HEAD's verdict covers parent..HEAD only, NOT base..HEAD; use --full-range (or the CI agent-critic on the full PR diff) when cumulative-state evidence is required.\n`);
923
+ }
924
+ const result = await runCommitGate({
925
+ loaded,
926
+ commit: headSha,
927
+ telemetry: sink,
928
+ profileName,
929
+ });
930
+ process.stdout.write(`-- ${headSha.slice(0, 12)}\n${summarizeGate(result)}\n`);
931
+ if (result.blocked)
932
+ blockedAny = true;
751
933
  }
752
934
  return blockedAny ? 1 : 0;
753
935
  }
@@ -758,11 +940,18 @@ async function cmdDoctor(rest) {
758
940
  "df doctor — verify the environment for hook-facing critic invocation.",
759
941
  "",
760
942
  "Usage:",
761
- " df doctor [--profile NAME]",
943
+ " df doctor [--profile NAME] [--json]",
762
944
  "",
763
945
  "Checks: node version, hooks dir, hook executable, core.hooksPath,",
764
- "artifact dir, doppler bootstrap, per-adapter doctor() (subscription",
765
- "auth lives here).",
946
+ "artifact dir, doppler bootstrap, cloud-env detection, per-adapter",
947
+ "doctor() (subscription auth lives here; skipped in cloud envs).",
948
+ "",
949
+ "Flags:",
950
+ " --json Emit a machine-readable JSON",
951
+ " report on stdout instead of the",
952
+ " human-readable INFO/OK/FAIL lines",
953
+ " (for consumer-side pre-push hooks",
954
+ " that fail-fast on auth_pending).",
766
955
  "",
767
956
  "Environment:",
768
957
  " AGENT_REVIEW_PROFILE=<name> Profile to validate (default: local)",
@@ -770,6 +959,12 @@ async function cmdDoctor(rest) {
770
959
  " DF_DOCTOR_SKIP_HOOKS=1 Skip git-core-hookspath check",
771
960
  " DF_DOCTOR_SKIP_DOPPLER=1 Skip doppler-cli-on-path check",
772
961
  "",
962
+ "Cloud-env markers (any-of triggers subscription-auth skip):",
963
+ " CODESPACES=true GitHub Codespaces",
964
+ " REMOTE_CONTAINERS=true VS Code Dev Containers",
965
+ " CLAUDE_CODE_SANDBOX=true Claude Code web sandbox",
966
+ " DEVCONTAINER=true generic devcontainer images",
967
+ "",
773
968
  ].join("\n"));
774
969
  return 0;
775
970
  }
@@ -800,16 +995,46 @@ async function cmdDoctor(rest) {
800
995
  profileName,
801
996
  perCriticChecks: checks,
802
997
  });
998
+ const cloudEnv = detectCloudEnv();
999
+ const allOk = checks.every((c) => c.passed || c.optional);
1000
+ // --json — machine-readable output for consumer-side pre-push hooks
1001
+ // (DFP issue #56). Shape is stable and documented in
1002
+ // packages/schemas/src/index.ts (DoctorReport). Exit code semantics
1003
+ // are the same as the human path: 0 = all required checks passed,
1004
+ // 1 = at least one required check failed.
1005
+ if (flags["json"]) {
1006
+ const report = {
1007
+ version: 1,
1008
+ schema: "df-doctor-report-v1",
1009
+ triage: { state: triage.state, line: triage.line },
1010
+ cloudEnv: {
1011
+ detected: cloudEnv.detected,
1012
+ markers: cloudEnv.markers,
1013
+ },
1014
+ // `profile` is part of the stable field set; `JSON.stringify`
1015
+ // omits `undefined`, so we default explicitly here even though
1016
+ // `resolveProfile` already returns `"local"` on the no-flag /
1017
+ // no-env path. Belt-and-braces — keeps the contract intact if the
1018
+ // resolver signature ever loosens.
1019
+ profile: profileName || "local",
1020
+ ok: allOk,
1021
+ checks,
1022
+ };
1023
+ process.stdout.write(`${JSON.stringify(report, null, 2)}\n`);
1024
+ return allOk ? 0 : 1;
1025
+ }
803
1026
  process.stdout.write(`${triage.line}\n`);
804
- let allOk = true;
805
1027
  for (const c of checks) {
806
- const label = c.passed ? "OK" : c.optional ? "INFO" : "FAIL";
1028
+ const label = c.passed ? (c.optional ? "INFO" : "OK") : c.optional ? "INFO" : "FAIL";
807
1029
  process.stdout.write(`[${label}] ${c.name}: ${c.detail}\n`);
808
1030
  if (!c.passed && c.remediation) {
809
1031
  process.stdout.write(` fix: ${c.remediation}\n`);
810
1032
  }
811
- if (!c.passed && !c.optional)
812
- allOk = false;
1033
+ else if (c.passed && c.optional && c.remediation) {
1034
+ // INFO-with-remediation surfaces the cloud-env bypass hint loudly
1035
+ // even though the check itself "passed" (it's informational).
1036
+ process.stdout.write(` note: ${c.remediation}\n`);
1037
+ }
813
1038
  }
814
1039
  return allOk ? 0 : 1;
815
1040
  }
@@ -1500,7 +1725,9 @@ async function main(argv) {
1500
1725
  !PHASE_G_SUBCOMMANDS.has(sub0) &&
1501
1726
  !CYCLE12_SUBCOMMANDS.has(sub0) &&
1502
1727
  !CYCLE11_SUBCOMMANDS.has(sub0) &&
1503
- !SHOW_STATUS_SUBCOMMANDS.has(sub0)) {
1728
+ !SHOW_STATUS_SUBCOMMANDS.has(sub0) &&
1729
+ !SKILLS_SUBCOMMANDS.has(sub0) &&
1730
+ !ONBOARD_SUBCOMMANDS.has(sub0)) {
1504
1731
  printHelp(meta);
1505
1732
  return 0;
1506
1733
  }
@@ -1585,12 +1812,57 @@ async function main(argv) {
1585
1812
  stderr: (s) => process.stderr.write(s),
1586
1813
  });
1587
1814
  }
1815
+ // Cycle 13 (dark-factory-platform#149) — `df findings --range` audit
1816
+ // surface for the iteration-receipt artifacts the new default
1817
+ // final-commit-only `df gate-push` semantic intentionally leaves
1818
+ // un-gated. NOT a gate; opt-in inspection only.
1819
+ if (sub === "findings") {
1820
+ return await cmdFindings(rest, {
1821
+ stdout: (s) => process.stdout.write(s),
1822
+ stderr: (s) => process.stderr.write(s),
1823
+ });
1824
+ }
1825
+ // DFP #192 — bundled-skill installer surface. The subcommand fans out
1826
+ // into `install/list` inside cmdSkills, mirroring the `df flow` pattern.
1827
+ if (sub === "skills") {
1828
+ return await cmdSkills(rest);
1829
+ }
1830
+ // Cycle 15 Phase A — `df onboard --analysis-only --json [target]` runs
1831
+ // the deterministic Stage A scanner and emits a bounded RepoAnalysis.
1832
+ if (sub === "onboard") {
1833
+ return await cmdOnboard(rest, {
1834
+ stdout: (s) => process.stdout.write(s),
1835
+ stderr: (s) => process.stderr.write(s),
1836
+ });
1837
+ }
1588
1838
  return notImplemented(sub);
1589
1839
  }
1590
- main(process.argv).then((code) => {
1591
- process.exitCode = code;
1592
- }, (err) => {
1593
- process.stderr.write(`df: fatal: ${err.message}\n`);
1594
- process.exitCode = 1;
1595
- });
1840
+ // Only run main() when this module is the program entry point.
1841
+ // Tests and other modules can `import` cli.ts to reuse helpers
1842
+ // (e.g. `resolveProductionSelfConsistencyProbe`) without triggering
1843
+ // `main(process.argv)` as a side-effect of the import. The realpath
1844
+ // dance handles symlinked installs (npm bin shims often symlink
1845
+ // `dist/cli.js` into `node_modules/.bin/df`). Same posture as
1846
+ // sage-cli (see commit f0f945e). Cursor finding (cli.ts:560) tests
1847
+ // reach `resolveProductionSelfConsistencyProbe` by importing this
1848
+ // module; without the guard they'd trigger the help path on import.
1849
+ function isInvokedAsMain() {
1850
+ const entry = process.argv[1];
1851
+ if (!entry)
1852
+ return false;
1853
+ try {
1854
+ return realpathSync(entry) === realpathSync(fileURLToPath(import.meta.url));
1855
+ }
1856
+ catch {
1857
+ return false;
1858
+ }
1859
+ }
1860
+ if (isInvokedAsMain()) {
1861
+ main(process.argv).then((code) => {
1862
+ process.exitCode = code;
1863
+ }, (err) => {
1864
+ process.stderr.write(`df: fatal: ${err.message}\n`);
1865
+ process.exitCode = 1;
1866
+ });
1867
+ }
1596
1868
  //# sourceMappingURL=cli.js.map