@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.
- package/README.md +86 -2
- package/dist/adapters/critic-result-schema.d.ts +14 -14
- package/dist/adapters/index.d.ts +1 -0
- package/dist/adapters/index.d.ts.map +1 -1
- package/dist/adapters/index.js +7 -0
- package/dist/adapters/index.js.map +1 -1
- package/dist/adapters/static-schema-lint.d.ts +68 -0
- package/dist/adapters/static-schema-lint.d.ts.map +1 -0
- package/dist/adapters/static-schema-lint.js +813 -0
- package/dist/adapters/static-schema-lint.js.map +1 -0
- package/dist/cli.d.ts +17 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +313 -41
- package/dist/cli.js.map +1 -1
- package/dist/commands/findings.d.ts +6 -0
- package/dist/commands/findings.d.ts.map +1 -0
- package/dist/commands/findings.js +196 -0
- package/dist/commands/findings.js.map +1 -0
- package/dist/commands/onboard.d.ts +6 -0
- package/dist/commands/onboard.d.ts.map +1 -0
- package/dist/commands/onboard.js +111 -0
- package/dist/commands/onboard.js.map +1 -0
- package/dist/commands/skills.d.ts +6 -0
- package/dist/commands/skills.d.ts.map +1 -0
- package/dist/commands/skills.js +248 -0
- package/dist/commands/skills.js.map +1 -0
- package/dist/cycle-doc-validator/validate_cycle_doc.py +131 -60
- package/dist/doctor.d.ts +17 -0
- package/dist/doctor.d.ts.map +1 -1
- package/dist/doctor.js +107 -0
- package/dist/doctor.js.map +1 -1
- package/dist/evidence/docker-build.d.ts +6 -0
- package/dist/evidence/docker-build.d.ts.map +1 -0
- package/dist/evidence/docker-build.js +199 -0
- package/dist/evidence/docker-build.js.map +1 -0
- package/dist/evidence/index.d.ts +1 -0
- package/dist/evidence/index.d.ts.map +1 -1
- package/dist/evidence/index.js +6 -0
- package/dist/evidence/index.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +2 -0
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools/doctor.d.ts.map +1 -1
- package/dist/mcp/tools/doctor.js +5 -0
- package/dist/mcp/tools/doctor.js.map +1 -1
- package/dist/mcp/tools/review-bypass.d.ts.map +1 -1
- package/dist/mcp/tools/review-bypass.js +21 -0
- package/dist/mcp/tools/review-bypass.js.map +1 -1
- package/dist/mcp/tools/skills-install.d.ts +6 -0
- package/dist/mcp/tools/skills-install.d.ts.map +1 -0
- package/dist/mcp/tools/skills-install.js +260 -0
- package/dist/mcp/tools/skills-install.js.map +1 -0
- package/dist/mcp/tools/stats-gate.d.ts.map +1 -1
- package/dist/mcp/tools/stats-gate.js +63 -15
- package/dist/mcp/tools/stats-gate.js.map +1 -1
- package/dist/onboard/analyze.d.ts +7 -0
- package/dist/onboard/analyze.d.ts.map +1 -0
- package/dist/onboard/analyze.js +86 -0
- package/dist/onboard/analyze.js.map +1 -0
- package/dist/onboard/analyzer.d.ts +15 -0
- package/dist/onboard/analyzer.d.ts.map +1 -0
- package/dist/onboard/analyzer.js +52 -0
- package/dist/onboard/analyzer.js.map +1 -0
- package/dist/onboard/analyzers/ci.d.ts +3 -0
- package/dist/onboard/analyzers/ci.d.ts.map +1 -0
- package/dist/onboard/analyzers/ci.js +112 -0
- package/dist/onboard/analyzers/ci.js.map +1 -0
- package/dist/onboard/analyzers/docs.d.ts +3 -0
- package/dist/onboard/analyzers/docs.d.ts.map +1 -0
- package/dist/onboard/analyzers/docs.js +151 -0
- package/dist/onboard/analyzers/docs.js.map +1 -0
- package/dist/onboard/analyzers/git.d.ts +3 -0
- package/dist/onboard/analyzers/git.d.ts.map +1 -0
- package/dist/onboard/analyzers/git.js +87 -0
- package/dist/onboard/analyzers/git.js.map +1 -0
- package/dist/onboard/analyzers/lockfile.d.ts +3 -0
- package/dist/onboard/analyzers/lockfile.d.ts.map +1 -0
- package/dist/onboard/analyzers/lockfile.js +285 -0
- package/dist/onboard/analyzers/lockfile.js.map +1 -0
- package/dist/onboard/analyzers/manifest.d.ts +3 -0
- package/dist/onboard/analyzers/manifest.d.ts.map +1 -0
- package/dist/onboard/analyzers/manifest.js +228 -0
- package/dist/onboard/analyzers/manifest.js.map +1 -0
- package/dist/onboard/analyzers/tree.d.ts +3 -0
- package/dist/onboard/analyzers/tree.d.ts.map +1 -0
- package/dist/onboard/analyzers/tree.js +196 -0
- package/dist/onboard/analyzers/tree.js.map +1 -0
- package/dist/onboard/fixtures/replay-git-history.d.ts +20 -0
- package/dist/onboard/fixtures/replay-git-history.d.ts.map +1 -0
- package/dist/onboard/fixtures/replay-git-history.js +91 -0
- package/dist/onboard/fixtures/replay-git-history.js.map +1 -0
- package/dist/onboard/schema.d.ts +545 -0
- package/dist/onboard/schema.d.ts.map +1 -0
- package/dist/onboard/schema.js +142 -0
- package/dist/onboard/schema.js.map +1 -0
- package/dist/policy/gate.d.ts +1 -1
- package/dist/policy/gate.d.ts.map +1 -1
- package/dist/policy/gate.js +96 -12
- package/dist/policy/gate.js.map +1 -1
- package/dist/prompt.d.ts +1 -0
- package/dist/prompt.d.ts.map +1 -1
- package/dist/prompt.js +105 -1
- package/dist/prompt.js.map +1 -1
- package/dist/report.d.ts +106 -3
- package/dist/report.d.ts.map +1 -1
- package/dist/report.js +282 -10
- package/dist/report.js.map +1 -1
- package/dist/runner.d.ts +2 -0
- package/dist/runner.d.ts.map +1 -1
- package/dist/runner.js +86 -2
- package/dist/runner.js.map +1 -1
- package/dist/self-consistency.d.ts +144 -0
- package/dist/self-consistency.d.ts.map +1 -0
- package/dist/self-consistency.js +368 -0
- package/dist/self-consistency.js.map +1 -0
- package/dist/skills/config.d.ts +176 -0
- package/dist/skills/config.d.ts.map +1 -0
- package/dist/skills/config.js +251 -0
- package/dist/skills/config.js.map +1 -0
- package/dist/skills/index.d.ts +4 -0
- package/dist/skills/index.d.ts.map +1 -0
- package/dist/skills/index.js +8 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/skills/install.d.ts +62 -0
- package/dist/skills/install.d.ts.map +1 -0
- package/dist/skills/install.js +315 -0
- package/dist/skills/install.js.map +1 -0
- package/dist/skills/template.d.ts +42 -0
- package/dist/skills/template.d.ts.map +1 -0
- package/dist/skills/template.js +95 -0
- package/dist/skills/template.js.map +1 -0
- package/dist/trusted-surface/rebind.d.ts.map +1 -1
- package/dist/trusted-surface/rebind.js +14 -1
- package/dist/trusted-surface/rebind.js.map +1 -1
- package/package.json +36 -2
- package/skills/README.md +89 -0
- package/skills/chief-engineer-blitz/SKILL.md.tmpl +443 -0
- package/skills/chief-engineer-blitz/skill.json +53 -0
- package/skills/chief-engineer-review/SKILL.md.tmpl +184 -0
- package/skills/chief-engineer-review/references/review-examples.md.tmpl +130 -0
- package/skills/chief-engineer-review/skill.json +67 -0
- package/skills/chief-engineer-review/templates/code-review-prompt.md.tmpl +111 -0
- package/skills/chief-engineer-review/templates/escalation-prompt.md.tmpl +56 -0
- package/skills/chief-engineer-review/templates/plan-review-prompt.md.tmpl +74 -0
- 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
|
-
|
|
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
|
|
116
|
-
"
|
|
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`
|
|
298
|
-
//
|
|
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
|
|
303
|
-
|
|
304
|
-
|
|
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 —
|
|
810
|
+
"df gate-push — gate a push on the local-critic verdict.",
|
|
679
811
|
"",
|
|
680
812
|
"Usage:",
|
|
681
|
-
" df gate-push [--profile NAME]
|
|
682
|
-
" df gate-push --
|
|
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
|
-
"
|
|
685
|
-
"
|
|
686
|
-
"
|
|
687
|
-
"
|
|
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
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
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
|
|
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 (
|
|
812
|
-
|
|
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(
|
|
1591
|
-
|
|
1592
|
-
|
|
1593
|
-
|
|
1594
|
-
|
|
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
|