@momentiq/dark-factory-cli 1.0.0 → 2.0.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 +121 -40
- package/dist/adapters/codex-sdk.d.ts +66 -0
- package/dist/adapters/codex-sdk.d.ts.map +1 -1
- package/dist/adapters/codex-sdk.js +321 -4
- package/dist/adapters/codex-sdk.js.map +1 -1
- package/dist/adapters/critic-result-schema.d.ts +15 -10
- package/dist/adapters/critic-result-schema.d.ts.map +1 -1
- package/dist/adapters/critic-result-schema.js +10 -0
- package/dist/adapters/critic-result-schema.js.map +1 -1
- package/dist/adapters/cursor-cli.d.ts +19 -1
- package/dist/adapters/cursor-cli.d.ts.map +1 -1
- package/dist/adapters/cursor-cli.js +96 -14
- package/dist/adapters/cursor-cli.js.map +1 -1
- 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/branch-protection/spec-default.yaml +2 -2
- package/dist/cli.d.ts +17 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +414 -113
- 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/show.d.ts +11 -0
- package/dist/commands/show.d.ts.map +1 -0
- package/dist/commands/show.js +78 -0
- package/dist/commands/show.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/commands/status.d.ts +6 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +85 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/compact/index.d.ts +2 -0
- package/dist/compact/index.d.ts.map +1 -0
- package/dist/compact/index.js +3 -0
- package/dist/compact/index.js.map +1 -0
- package/dist/compact/lockfile.d.ts +53 -0
- package/dist/compact/lockfile.d.ts.map +1 -0
- package/dist/compact/lockfile.js +626 -0
- package/dist/compact/lockfile.js.map +1 -0
- package/dist/cycle-doc-validator/validate_cycle_doc.py +39 -9
- package/dist/doctor.d.ts +51 -1
- package/dist/doctor.d.ts.map +1 -1
- package/dist/doctor.js +497 -1
- 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/handoff/handoff-verb.d.ts.map +1 -1
- package/dist/handoff/handoff-verb.js +6 -3
- package/dist/handoff/handoff-verb.js.map +1 -1
- package/dist/handoff/ports.d.ts +8 -0
- package/dist/handoff/ports.d.ts.map +1 -1
- package/dist/handoff/real-clients.js +1 -1
- package/dist/handoff/real-clients.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/show-status-core.d.ts +63 -0
- package/dist/lib/show-status-core.d.ts.map +1 -0
- package/dist/lib/show-status-core.js +156 -0
- package/dist/lib/show-status-core.js.map +1 -0
- package/dist/mcp/prompts.d.ts.map +1 -1
- package/dist/mcp/prompts.js +113 -78
- package/dist/mcp/prompts.js.map +1 -1
- package/dist/mcp/resources.js +1 -1
- package/dist/mcp/resources.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/findings.d.ts +0 -22
- package/dist/mcp/tools/findings.d.ts.map +1 -1
- package/dist/mcp/tools/findings.js +5 -73
- package/dist/mcp/tools/findings.js.map +1 -1
- package/dist/mcp/tools/handoff.d.ts.map +1 -1
- package/dist/mcp/tools/handoff.js +10 -17
- package/dist/mcp/tools/handoff.js.map +1 -1
- package/dist/mcp/tools/review-bypass.d.ts.map +1 -1
- package/dist/mcp/tools/review-bypass.js +22 -1
- 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/policy/baseline.d.ts.map +1 -1
- package/dist/policy/baseline.js +11 -3
- package/dist/policy/baseline.js.map +1 -1
- 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 +123 -4
- package/dist/prompt.js.map +1 -1
- package/dist/report.d.ts +130 -3
- package/dist/report.d.ts.map +1 -1
- package/dist/report.js +367 -10
- package/dist/report.js.map +1 -1
- package/dist/runner.d.ts +6 -0
- package/dist/runner.d.ts.map +1 -1
- package/dist/runner.js +213 -4
- 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 +199 -2
- 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
package/dist/doctor.js
CHANGED
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
// `subscription` / `api` was pinned by the profile and reports
|
|
28
28
|
// pass/fail accordingly.
|
|
29
29
|
import { spawn } from "node:child_process";
|
|
30
|
-
import { accessSync, constants, existsSync, mkdirSync } from "node:fs";
|
|
30
|
+
import { accessSync, constants, existsSync, mkdirSync, readFileSync, readdirSync, unlinkSync, } from "node:fs";
|
|
31
31
|
import { resolve } from "node:path";
|
|
32
32
|
import { gitCommonDir, gitDir } from "./git.js";
|
|
33
33
|
import { applyProfileAuth, resolveProfileWithConfig, } from "./policy/profile.js";
|
|
@@ -101,6 +101,16 @@ export async function runDoctor(options) {
|
|
|
101
101
|
? {}
|
|
102
102
|
: { remediation: `mkdir -p ${artifactDir} and ensure write permission` }),
|
|
103
103
|
});
|
|
104
|
+
// 5a. Issue #105 — orphan-lock sweep. Subagent processes killed mid-run
|
|
105
|
+
// leave behind `.git/agent-reviews/<sha>.lock` files that block every
|
|
106
|
+
// subsequent `df review` for that SHA. Walk the dir, parse each
|
|
107
|
+
// lock's PID, and remove locks whose recorded PID is dead.
|
|
108
|
+
checks.push(sweepOrphanLocks(artifactDir));
|
|
109
|
+
// 5b. Cache-tree corruption probe (issue #107). Detects the
|
|
110
|
+
// index-cache-tree-references-missing-object state a killed-mid-write
|
|
111
|
+
// `git commit` leaves the worktree in. Detect-only — the recovery
|
|
112
|
+
// (`git read-tree HEAD`) is destructive and stays operator-driven.
|
|
113
|
+
checks.push(await probeCacheTree(root));
|
|
104
114
|
// 6. Doppler bootstrap visibility (when caller supplied a BootstrapResult).
|
|
105
115
|
// For the OSS doctor, this is informational — a `no-bootstrap-file` status
|
|
106
116
|
// is perfectly fine when the user exports tokens directly in their shell.
|
|
@@ -125,6 +135,29 @@ export async function runDoctor(options) {
|
|
|
125
135
|
if (loaded.config.secrets?.doppler) {
|
|
126
136
|
checks.push(await checkDopplerOnPath(loaded));
|
|
127
137
|
}
|
|
138
|
+
// 7a. Cloud-env detection (consumer issue dark-factory-platform#56).
|
|
139
|
+
// When this process is running inside a cloud sandbox / dev-container
|
|
140
|
+
// (GitHub Codespaces, dev-container, Claude Code sandbox, etc.) the
|
|
141
|
+
// workstation OAuth flows for subscription-backed critics (`cursor-agent
|
|
142
|
+
// login`, `codex login`) are structurally unavailable — there is no
|
|
143
|
+
// browser to drive the OAuth dance and no Keychain to persist the
|
|
144
|
+
// resulting tokens. Surfacing this as a top-level INFO check (always
|
|
145
|
+
// emitted; not gated on `secrets.doppler` like the doppler probe) gives
|
|
146
|
+
// pre-push hooks a deterministic signal they can read from
|
|
147
|
+
// `df doctor --json` and short-circuit the gate with the documented
|
|
148
|
+
// `AGENT_REVIEW_BYPASS="cloud env — local quorum unavailable; W3
|
|
149
|
+
// critic is the gate"` cooperation pattern instead of churning through
|
|
150
|
+
// a per-critic "CURSOR_API_KEY is not set" failure cascade.
|
|
151
|
+
//
|
|
152
|
+
// The detection is also wired downstream: when `cloudEnv.detected` is
|
|
153
|
+
// true AND the resolved critic is pinned to a subscription auth
|
|
154
|
+
// source (`auth: "chatgpt"`), the per-adapter `doctor()` invocation is
|
|
155
|
+
// skipped and replaced with a `subscription_auth_unavailable_cloud_env`
|
|
156
|
+
// INFO check. API-auth critics (`auth: "api"`, no pin) still run their
|
|
157
|
+
// adapter `doctor()` — API keys ARE expected to be present in cloud
|
|
158
|
+
// envs via Doppler / env vars.
|
|
159
|
+
const cloudEnv = detectCloudEnv();
|
|
160
|
+
checks.push(cloudEnvCheck(cloudEnv));
|
|
128
161
|
// 8. per-adapter doctor() — this is where subscription-auth verification
|
|
129
162
|
// actually lives. Each adapter's doctor() checks ITS own credentials
|
|
130
163
|
// (env var, ~/.cursor auth, ~/.codex auth, etc.). When a profile is
|
|
@@ -145,6 +178,22 @@ export async function runDoctor(options) {
|
|
|
145
178
|
});
|
|
146
179
|
continue;
|
|
147
180
|
}
|
|
181
|
+
// Cloud-env subscription-auth skip (issue #56): when a critic is
|
|
182
|
+
// pinned to a subscription auth source in a cloud env, do NOT call
|
|
183
|
+
// the adapter's `doctor()` — there is no path to authenticate, so
|
|
184
|
+
// the probe would either spuriously fail OR (worse) consult a stale
|
|
185
|
+
// file. Surface the structural gap as a single INFO check whose
|
|
186
|
+
// remediation is the documented bypass.
|
|
187
|
+
if (cloudEnv.detected && isSubscriptionAuth(critic.auth)) {
|
|
188
|
+
checks.push({
|
|
189
|
+
name: `${critic.id}.subscription_auth_unavailable_cloud_env`,
|
|
190
|
+
passed: true,
|
|
191
|
+
optional: true,
|
|
192
|
+
detail: `cloud env detected (${cloudEnv.markers.join(", ")}); subscription auth (auth="${critic.auth ?? "(unset)"}") is structurally unavailable here — adapter doctor() skipped.`,
|
|
193
|
+
remediation: CLOUD_ENV_BYPASS_REMEDIATION,
|
|
194
|
+
});
|
|
195
|
+
continue;
|
|
196
|
+
}
|
|
148
197
|
const adapter = registry.resolve(critic.adapter);
|
|
149
198
|
const adapterChecks = await adapter.doctor(critic);
|
|
150
199
|
// Optional (shadow) critics are tagged `optional: true` so cmdDoctor
|
|
@@ -159,6 +208,74 @@ export async function runDoctor(options) {
|
|
|
159
208
|
}
|
|
160
209
|
return checks;
|
|
161
210
|
}
|
|
211
|
+
// ---------------------------------------------------------------------------
|
|
212
|
+
// Cloud-env detection (consumer issue dark-factory-platform#56).
|
|
213
|
+
//
|
|
214
|
+
// Pure: reads only `process.env` (or an injected `env` map for tests).
|
|
215
|
+
// No I/O, no time dependence. Returns the structured detection result
|
|
216
|
+
// so callers can both render the INFO check AND key behavior off
|
|
217
|
+
// `detected: true` (subscription-auth skip in `runDoctor`, fail-fast
|
|
218
|
+
// short-circuit in the consumer-side pre-push hook).
|
|
219
|
+
//
|
|
220
|
+
// Markers (any one triggers detection):
|
|
221
|
+
// - `CODESPACES=true` GitHub Codespaces native marker
|
|
222
|
+
// - `REMOTE_CONTAINERS=true` VS Code Dev Containers (local + Codespaces)
|
|
223
|
+
// - `CLAUDE_CODE_SANDBOX=true` Claude Code web sandbox marker
|
|
224
|
+
// - `DEVCONTAINER=true` generic devcontainer marker (some images set this)
|
|
225
|
+
//
|
|
226
|
+
// The marker set is *intentionally minimal* — future cloud-env brands
|
|
227
|
+
// add themselves by exporting one of these (or by extending this list
|
|
228
|
+
// upstream). The list is exported so consumers (pre-push hooks,
|
|
229
|
+
// observability sinks) can introspect what was checked.
|
|
230
|
+
// ---------------------------------------------------------------------------
|
|
231
|
+
export const CLOUD_ENV_MARKERS = [
|
|
232
|
+
"CODESPACES",
|
|
233
|
+
"REMOTE_CONTAINERS",
|
|
234
|
+
"CLAUDE_CODE_SANDBOX",
|
|
235
|
+
"DEVCONTAINER",
|
|
236
|
+
];
|
|
237
|
+
export function detectCloudEnv(options = {}) {
|
|
238
|
+
const env = options.env ?? process.env;
|
|
239
|
+
const markers = [];
|
|
240
|
+
for (const key of CLOUD_ENV_MARKERS) {
|
|
241
|
+
const raw = env[key];
|
|
242
|
+
if (raw === undefined)
|
|
243
|
+
continue;
|
|
244
|
+
const v = raw.trim().toLowerCase();
|
|
245
|
+
if (v === "true" || v === "1" || v === "yes") {
|
|
246
|
+
markers.push(key);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
return { detected: markers.length > 0, markers };
|
|
250
|
+
}
|
|
251
|
+
const CLOUD_ENV_BYPASS_REMEDIATION = 'cloud env: local subscription quorum is structurally unavailable. Push with `AGENT_REVIEW_BYPASS="cloud env — local quorum unavailable; W3 critic is the gate" git push`; the hosted W3 critic remains the merge gate via branch protection.';
|
|
252
|
+
function cloudEnvCheck(detection) {
|
|
253
|
+
if (!detection.detected) {
|
|
254
|
+
return {
|
|
255
|
+
name: "cloud_env",
|
|
256
|
+
passed: true,
|
|
257
|
+
detail: `no cloud-env markers detected (${CLOUD_ENV_MARKERS.join(", ")} all unset / falsy)`,
|
|
258
|
+
};
|
|
259
|
+
}
|
|
260
|
+
return {
|
|
261
|
+
name: "cloud_env",
|
|
262
|
+
passed: true,
|
|
263
|
+
optional: true,
|
|
264
|
+
detail: `cloud env detected via ${detection.markers.join(", ")} — subscription-auth critics will be skipped (use the documented bypass)`,
|
|
265
|
+
remediation: CLOUD_ENV_BYPASS_REMEDIATION,
|
|
266
|
+
};
|
|
267
|
+
}
|
|
268
|
+
// A critic's `auth` value is "subscription" (chatgpt / subscription /
|
|
269
|
+
// composer) when its workstation auth path is OAuth-backed and therefore
|
|
270
|
+
// structurally unavailable inside a cloud env. The literal token set
|
|
271
|
+
// matches the canonical values the adapters honor (cursor-cli accepts
|
|
272
|
+
// only "chatgpt"; codex-sdk accepts "chatgpt" | "api"; future
|
|
273
|
+
// subscription tokens added upstream should land here).
|
|
274
|
+
function isSubscriptionAuth(auth) {
|
|
275
|
+
if (auth === undefined)
|
|
276
|
+
return false;
|
|
277
|
+
return auth === "chatgpt" || auth === "subscription" || auth === "composer";
|
|
278
|
+
}
|
|
162
279
|
// `git config --local core.hooksPath` check. Verifies that the local repo
|
|
163
280
|
// is configured to use the configured hookPath. Skipped in CI where
|
|
164
281
|
// hooks aren't expected to fire (env `DF_DOCTOR_SKIP_HOOKS=1` or
|
|
@@ -326,4 +443,383 @@ function canCreateDir(path) {
|
|
|
326
443
|
return false;
|
|
327
444
|
}
|
|
328
445
|
}
|
|
446
|
+
export function classifyDoctorState(options) {
|
|
447
|
+
const { config, profileName, perCriticChecks } = options;
|
|
448
|
+
// (1) config_missing — checked FIRST. A missing profiles block (or a
|
|
449
|
+
// typo'd profile name) is the most actionable diagnosis; the
|
|
450
|
+
// per-critic auth checks are moot until the profile is resolvable.
|
|
451
|
+
if (profileName !== undefined) {
|
|
452
|
+
if (!config.profiles) {
|
|
453
|
+
return {
|
|
454
|
+
state: "config_missing",
|
|
455
|
+
line: `[CONFIG] config_missing: .agent-review/config.json has no 'profiles' block (requested profile: "${profileName}"). Add a 'profiles' map; mirror sage3c's pattern.`,
|
|
456
|
+
};
|
|
457
|
+
}
|
|
458
|
+
if (!config.profiles[profileName]) {
|
|
459
|
+
const available = Object.keys(config.profiles);
|
|
460
|
+
const availableStr = available.length > 0 ? available.join(", ") : "(none)";
|
|
461
|
+
return {
|
|
462
|
+
state: "config_missing",
|
|
463
|
+
line: `[CONFIG] config_missing: profile "${profileName}" not found in .agent-review/config.json profiles map (available: ${availableStr}).`,
|
|
464
|
+
};
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
// (2) auth_pending — config + profile both resolved. Walk the
|
|
468
|
+
// per-critic checks: a failing check whose name starts with
|
|
469
|
+
// `<criticId>.` AND is not flagged `optional: true` means a REQUIRED
|
|
470
|
+
// critic's auth/credentials probe failed.
|
|
471
|
+
const failingCriticAuth = perCriticChecks.filter((c) => {
|
|
472
|
+
if (c.passed)
|
|
473
|
+
return false;
|
|
474
|
+
if (c.optional)
|
|
475
|
+
return false;
|
|
476
|
+
return isCriticAuthCheckName(c.name);
|
|
477
|
+
});
|
|
478
|
+
if (failingCriticAuth.length > 0) {
|
|
479
|
+
const criticIds = uniq(failingCriticAuth.map((c) => c.name.split(".")[0] ?? c.name));
|
|
480
|
+
return {
|
|
481
|
+
state: "auth_pending",
|
|
482
|
+
line: `[AUTH] auth_pending: config OK but workstation auth pending for ${criticIds.join(", ")} — run \`df doctor --profile <name>\` for per-critic remediation.`,
|
|
483
|
+
};
|
|
484
|
+
}
|
|
485
|
+
// (3) ok — everything passed. Surface a clear all-clear line so an
|
|
486
|
+
// operator who runs `df doctor` after fixing the failure sees an
|
|
487
|
+
// explicit success signal.
|
|
488
|
+
return {
|
|
489
|
+
state: "ok",
|
|
490
|
+
line: `[OK] config + auth both OK${profileName !== undefined ? ` (profile: "${profileName}")` : ""}.`,
|
|
491
|
+
};
|
|
492
|
+
}
|
|
493
|
+
function isCriticAuthCheckName(name) {
|
|
494
|
+
// `runDoctor` namespaces per-critic checks as `<criticId>.<probe>`.
|
|
495
|
+
// Base-infra checks (`node_version`, `hook_post-commit`,
|
|
496
|
+
// `artifact_dir_writable`, `doppler_*`, `git_core_hookspath`) have
|
|
497
|
+
// no `.` in the first half of the name. Treat any name containing
|
|
498
|
+
// a `.` as a per-critic check.
|
|
499
|
+
return name.includes(".");
|
|
500
|
+
}
|
|
501
|
+
function uniq(values) {
|
|
502
|
+
return Array.from(new Set(values));
|
|
503
|
+
}
|
|
504
|
+
// ---------------------------------------------------------------------------
|
|
505
|
+
// Issue #105 — orphan-lock sweep.
|
|
506
|
+
//
|
|
507
|
+
// `df review` writes `.git/agent-reviews/<sha>.lock` containing its PID
|
|
508
|
+
// + an ISO timestamp. When the process is killed mid-run (SIGKILL, OOM,
|
|
509
|
+
// container teardown) the lock orphans and blocks every subsequent
|
|
510
|
+
// review of that SHA. `sweepOrphanLocks` walks the artifact dir, parses
|
|
511
|
+
// each lock's first line as a PID, and removes the lock when
|
|
512
|
+
// `process.kill(pid, 0)` reports ESRCH (no such process).
|
|
513
|
+
// ---------------------------------------------------------------------------
|
|
514
|
+
export function sweepOrphanLocks(artifactDir) {
|
|
515
|
+
if (!existsSync(artifactDir)) {
|
|
516
|
+
return {
|
|
517
|
+
name: "orphan_lock_sweep",
|
|
518
|
+
passed: true,
|
|
519
|
+
detail: `artifact dir not present at ${artifactDir} — no orphan locks to sweep`,
|
|
520
|
+
};
|
|
521
|
+
}
|
|
522
|
+
let entries;
|
|
523
|
+
try {
|
|
524
|
+
entries = readdirSync(artifactDir);
|
|
525
|
+
}
|
|
526
|
+
catch (err) {
|
|
527
|
+
return {
|
|
528
|
+
name: "orphan_lock_sweep",
|
|
529
|
+
passed: false,
|
|
530
|
+
detail: `failed to enumerate ${artifactDir}: ${err.message}`,
|
|
531
|
+
remediation: `verify ${artifactDir} is readable`,
|
|
532
|
+
};
|
|
533
|
+
}
|
|
534
|
+
const removed = [];
|
|
535
|
+
for (const entry of entries) {
|
|
536
|
+
if (!entry.endsWith(".lock"))
|
|
537
|
+
continue;
|
|
538
|
+
const path = resolve(artifactDir, entry);
|
|
539
|
+
const parsed = readLockPid(path);
|
|
540
|
+
if (parsed.pid === null) {
|
|
541
|
+
try {
|
|
542
|
+
unlinkSync(path);
|
|
543
|
+
removed.push({ name: entry, pid: null, reason: parsed.reason });
|
|
544
|
+
}
|
|
545
|
+
catch {
|
|
546
|
+
// best-effort; a racing process may have removed it already
|
|
547
|
+
}
|
|
548
|
+
continue;
|
|
549
|
+
}
|
|
550
|
+
if (isPidAlive(parsed.pid))
|
|
551
|
+
continue;
|
|
552
|
+
try {
|
|
553
|
+
unlinkSync(path);
|
|
554
|
+
removed.push({ name: entry, pid: parsed.pid, reason: "dead PID" });
|
|
555
|
+
}
|
|
556
|
+
catch {
|
|
557
|
+
// best-effort
|
|
558
|
+
}
|
|
559
|
+
}
|
|
560
|
+
if (removed.length === 0) {
|
|
561
|
+
return {
|
|
562
|
+
name: "orphan_lock_sweep",
|
|
563
|
+
passed: true,
|
|
564
|
+
detail: `no orphan locks under ${artifactDir}`,
|
|
565
|
+
};
|
|
566
|
+
}
|
|
567
|
+
const summary = removed
|
|
568
|
+
.map((r) => `${r.name} (pid=${r.pid ?? "unreadable"}: ${r.reason})`)
|
|
569
|
+
.join(", ");
|
|
570
|
+
return {
|
|
571
|
+
name: "orphan_lock_sweep",
|
|
572
|
+
passed: true,
|
|
573
|
+
detail: `${removed.length} orphan lock(s) removed under ${artifactDir}: ${summary}`,
|
|
574
|
+
};
|
|
575
|
+
}
|
|
576
|
+
function readLockPid(path) {
|
|
577
|
+
let contents;
|
|
578
|
+
try {
|
|
579
|
+
contents = readFileSync(path, "utf8");
|
|
580
|
+
}
|
|
581
|
+
catch (err) {
|
|
582
|
+
return { pid: null, reason: `read failed: ${err.message}` };
|
|
583
|
+
}
|
|
584
|
+
const firstLine = contents.split("\n")[0]?.trim() ?? "";
|
|
585
|
+
if (firstLine === "") {
|
|
586
|
+
return { pid: null, reason: "empty lock file" };
|
|
587
|
+
}
|
|
588
|
+
const n = Number(firstLine);
|
|
589
|
+
if (!Number.isInteger(n) || n <= 0) {
|
|
590
|
+
return { pid: null, reason: `unparseable PID "${firstLine}"` };
|
|
591
|
+
}
|
|
592
|
+
return { pid: n, reason: "" };
|
|
593
|
+
}
|
|
594
|
+
function isPidAlive(pid) {
|
|
595
|
+
try {
|
|
596
|
+
process.kill(pid, 0);
|
|
597
|
+
return true;
|
|
598
|
+
}
|
|
599
|
+
catch (err) {
|
|
600
|
+
const e = err;
|
|
601
|
+
// EPERM means the process exists but we lack permission to signal it
|
|
602
|
+
// → still alive from a lock-ownership perspective. ESRCH means no
|
|
603
|
+
// such process → orphan. Any other code: treat as alive to err on
|
|
604
|
+
// the side of NOT removing a possibly-live lock.
|
|
605
|
+
if (e.code === "ESRCH")
|
|
606
|
+
return false;
|
|
607
|
+
return true;
|
|
608
|
+
}
|
|
609
|
+
}
|
|
610
|
+
// ---------------------------------------------------------------------------
|
|
611
|
+
// Issue #107 — cache-tree corruption probe.
|
|
612
|
+
//
|
|
613
|
+
// Detects the specific corruption shape `dark-factory-platform#170`
|
|
614
|
+
// reproduced: the index's cache-tree references an object (tree or
|
|
615
|
+
// blob) that doesn't exist in `.git/objects/`. This is the state a
|
|
616
|
+
// killed-mid-write `git commit` leaves the worktree in — the cache-tree
|
|
617
|
+
// has been updated to reference the new tree SHA, but the tree object
|
|
618
|
+
// itself was never finalised before the process was killed.
|
|
619
|
+
//
|
|
620
|
+
// Probe shape: `git fsck --no-dangling` with LC_ALL=C / LANG=C, a
|
|
621
|
+
// bounded buffer and a timeout. When the cache-tree is dangling, fsck
|
|
622
|
+
// emits a line containing `invalid sha1 pointer in cache-tree`
|
|
623
|
+
// (git 2.39.x short form) or `invalid sha1 pointer in cache-tree of
|
|
624
|
+
// <path>` (git 2.50.x long form) — the regex accepts both. Adjacent
|
|
625
|
+
// bad-repo states (broken HEAD ref, missing blob NOT in cache-tree,
|
|
626
|
+
// dangling orphan objects) emit different error messages, so the
|
|
627
|
+
// probe is specific without being noisy.
|
|
628
|
+
//
|
|
629
|
+
// Detect-only: the recovery (`git read-tree HEAD`) discards staged
|
|
630
|
+
// work. The operator must decide whether to preserve the staged
|
|
631
|
+
// changes (re-add them after `read-tree`) or accept the loss. The
|
|
632
|
+
// probe surfaces the diagnosis + remediation hint and nothing more.
|
|
633
|
+
//
|
|
634
|
+
// Async: `git fsck` walks the entire object database and can take
|
|
635
|
+
// seconds-to-minutes on large repos. The probe is `async` so it
|
|
636
|
+
// doesn't freeze `runDoctor`'s overall event loop.
|
|
637
|
+
// ---------------------------------------------------------------------------
|
|
638
|
+
// Accept BOTH the git-2.39.x short form ("invalid sha1 pointer in
|
|
639
|
+
// cache-tree" with a word boundary) AND the git-2.50.x long form
|
|
640
|
+
// (suffixed with " of <path>"). Earlier revisions required the
|
|
641
|
+
// trailing " of", which silently fail-passed on git 2.39 (Debian 12).
|
|
642
|
+
export const CACHE_TREE_CORRUPTION_REGEX = /invalid sha1 pointer in cache-tree(?:\b| of)/;
|
|
643
|
+
const RECOVERY_REMEDIATION = "Run `git read-tree HEAD` in the affected worktree to rebuild the index from HEAD's tree — WARNING: this discards any staged changes; re-add them after recovery if needed.";
|
|
644
|
+
// 50 MB stdout/stderr ceiling. Real cache-tree-corruption stderr is
|
|
645
|
+
// O(KB); the ceiling exists to bound runaway fsck output on
|
|
646
|
+
// pathological repos. ENOBUFS-shape overflow is treated as
|
|
647
|
+
// non-passing, NOT silent pass.
|
|
648
|
+
const FSCK_BUFFER_BYTES = 50 * 1024 * 1024;
|
|
649
|
+
// 30 s wall-clock ceiling. fsck on huge repos can run for minutes; the
|
|
650
|
+
// probe is a doctor check, so we'd rather report indeterminate than
|
|
651
|
+
// hold up the rest of the doctor run forever. Overridable via
|
|
652
|
+
// `DF_CACHE_TREE_PROBE_TIMEOUT_MS` for testing the timeout path
|
|
653
|
+
// without making test suites wait 30s.
|
|
654
|
+
function fsckTimeoutMs() {
|
|
655
|
+
const env = process.env["DF_CACHE_TREE_PROBE_TIMEOUT_MS"];
|
|
656
|
+
if (env !== undefined) {
|
|
657
|
+
const n = Number(env);
|
|
658
|
+
if (Number.isFinite(n) && n > 0)
|
|
659
|
+
return n;
|
|
660
|
+
}
|
|
661
|
+
return 30_000;
|
|
662
|
+
}
|
|
663
|
+
function runGitFsck(repoRoot) {
|
|
664
|
+
return new Promise((resolvePromise) => {
|
|
665
|
+
let settled = false;
|
|
666
|
+
const settle = (r) => {
|
|
667
|
+
if (settled)
|
|
668
|
+
return;
|
|
669
|
+
settled = true;
|
|
670
|
+
resolvePromise(r);
|
|
671
|
+
};
|
|
672
|
+
let child;
|
|
673
|
+
try {
|
|
674
|
+
child = spawn("git", ["fsck", "--no-dangling"], {
|
|
675
|
+
cwd: repoRoot,
|
|
676
|
+
env: { ...process.env, LC_ALL: "C", LANG: "C" },
|
|
677
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
678
|
+
});
|
|
679
|
+
}
|
|
680
|
+
catch (err) {
|
|
681
|
+
settle({
|
|
682
|
+
stdout: "",
|
|
683
|
+
stderr: "",
|
|
684
|
+
code: null,
|
|
685
|
+
signal: null,
|
|
686
|
+
spawnError: err,
|
|
687
|
+
overflowed: false,
|
|
688
|
+
timedOut: false,
|
|
689
|
+
});
|
|
690
|
+
return;
|
|
691
|
+
}
|
|
692
|
+
let stdout = "";
|
|
693
|
+
let stderr = "";
|
|
694
|
+
let total = 0;
|
|
695
|
+
let overflowed = false;
|
|
696
|
+
const onData = (which) => (c) => {
|
|
697
|
+
total += c.length;
|
|
698
|
+
if (total > FSCK_BUFFER_BYTES) {
|
|
699
|
+
if (!overflowed) {
|
|
700
|
+
overflowed = true;
|
|
701
|
+
child.kill("SIGKILL");
|
|
702
|
+
}
|
|
703
|
+
return;
|
|
704
|
+
}
|
|
705
|
+
if (which === "stdout")
|
|
706
|
+
stdout += c.toString("utf8");
|
|
707
|
+
else
|
|
708
|
+
stderr += c.toString("utf8");
|
|
709
|
+
};
|
|
710
|
+
child.stdout?.on("data", onData("stdout"));
|
|
711
|
+
child.stderr?.on("data", onData("stderr"));
|
|
712
|
+
let timedOut = false;
|
|
713
|
+
const timer = setTimeout(() => {
|
|
714
|
+
timedOut = true;
|
|
715
|
+
child.kill("SIGKILL");
|
|
716
|
+
}, fsckTimeoutMs());
|
|
717
|
+
child.on("error", (err) => {
|
|
718
|
+
clearTimeout(timer);
|
|
719
|
+
settle({
|
|
720
|
+
stdout,
|
|
721
|
+
stderr,
|
|
722
|
+
code: null,
|
|
723
|
+
signal: null,
|
|
724
|
+
spawnError: err,
|
|
725
|
+
overflowed,
|
|
726
|
+
timedOut,
|
|
727
|
+
});
|
|
728
|
+
});
|
|
729
|
+
child.on("close", (code, signal) => {
|
|
730
|
+
clearTimeout(timer);
|
|
731
|
+
settle({
|
|
732
|
+
stdout,
|
|
733
|
+
stderr,
|
|
734
|
+
code,
|
|
735
|
+
signal,
|
|
736
|
+
overflowed,
|
|
737
|
+
timedOut,
|
|
738
|
+
});
|
|
739
|
+
});
|
|
740
|
+
});
|
|
741
|
+
}
|
|
742
|
+
export async function probeCacheTree(repoRoot) {
|
|
743
|
+
if (!existsSync(resolve(repoRoot, ".git"))) {
|
|
744
|
+
// `df doctor`'s base-infra checks already cover the
|
|
745
|
+
// "not-a-git-repo" case (artifact_dir_writable + git_core_hookspath
|
|
746
|
+
// both fail). Surface this informationally so the probe doesn't
|
|
747
|
+
// throw / fail-closed on the wrong condition.
|
|
748
|
+
return {
|
|
749
|
+
name: "cache_tree_probe",
|
|
750
|
+
passed: true,
|
|
751
|
+
detail: `${repoRoot} is not a git working tree — cache-tree probe skipped`,
|
|
752
|
+
};
|
|
753
|
+
}
|
|
754
|
+
const result = await runGitFsck(repoRoot);
|
|
755
|
+
const combined = `${result.stdout}\n${result.stderr}`;
|
|
756
|
+
// Inspect captured output for the corruption signature FIRST. A
|
|
757
|
+
// realistic mid-corruption fsck both prints the signature AND exits
|
|
758
|
+
// non-zero — handle the diagnostic path before the generic
|
|
759
|
+
// error-reporting paths so the operator sees the actionable line.
|
|
760
|
+
if (CACHE_TREE_CORRUPTION_REGEX.test(combined)) {
|
|
761
|
+
const matches = combined.matchAll(/([0-9a-f]{40}): invalid sha1 pointer in cache-tree(?: of (\S+))?/g);
|
|
762
|
+
const offenders = Array.from(matches).map((m) => ({
|
|
763
|
+
sha: m[1] ?? "(unknown)",
|
|
764
|
+
indexPath: m[2] ?? "(unknown)",
|
|
765
|
+
}));
|
|
766
|
+
const detail = offenders.length > 0
|
|
767
|
+
? `cache-tree references missing object${offenders.length > 1 ? "s" : ""}: ${offenders
|
|
768
|
+
.map((o) => `${o.sha} in ${o.indexPath}`)
|
|
769
|
+
.join("; ")}`
|
|
770
|
+
: `git fsck reported cache-tree corruption: ${combined.trim()}`;
|
|
771
|
+
return {
|
|
772
|
+
name: "cache_tree_probe",
|
|
773
|
+
passed: false,
|
|
774
|
+
detail,
|
|
775
|
+
remediation: RECOVERY_REMEDIATION,
|
|
776
|
+
};
|
|
777
|
+
}
|
|
778
|
+
if (result.overflowed) {
|
|
779
|
+
return {
|
|
780
|
+
name: "cache_tree_probe",
|
|
781
|
+
passed: false,
|
|
782
|
+
detail: `git fsck output exceeded ${FSCK_BUFFER_BYTES} bytes — cannot determine cache-tree state; output was truncated.`,
|
|
783
|
+
remediation: "investigate the repo's object database manually (`git fsck --no-dangling 2>&1 | head -50`); cache-tree probe is inconclusive at this output volume",
|
|
784
|
+
};
|
|
785
|
+
}
|
|
786
|
+
if (result.timedOut) {
|
|
787
|
+
return {
|
|
788
|
+
name: "cache_tree_probe",
|
|
789
|
+
passed: false,
|
|
790
|
+
detail: `git fsck exceeded ${fsckTimeoutMs()}ms — cache-tree state indeterminate`,
|
|
791
|
+
remediation: "run `git fsck --no-dangling` manually; the probe times out on very large repos",
|
|
792
|
+
};
|
|
793
|
+
}
|
|
794
|
+
if (result.spawnError) {
|
|
795
|
+
// ENOENT (git not on PATH) is genuinely informational — the rest of
|
|
796
|
+
// `df doctor` (which all shells out to git) will surface that
|
|
797
|
+
// diagnostic loudly. Don't double-report. Other spawn errors
|
|
798
|
+
// (EACCES, etc.) ARE surfaced because they indicate environment
|
|
799
|
+
// problems the operator should know about.
|
|
800
|
+
if (result.spawnError.code === "ENOENT") {
|
|
801
|
+
return {
|
|
802
|
+
name: "cache_tree_probe",
|
|
803
|
+
passed: true,
|
|
804
|
+
detail: `git fsck not runnable in ${repoRoot}: ${result.spawnError.message}`,
|
|
805
|
+
};
|
|
806
|
+
}
|
|
807
|
+
return {
|
|
808
|
+
name: "cache_tree_probe",
|
|
809
|
+
passed: false,
|
|
810
|
+
detail: `git fsck failed to spawn in ${repoRoot}: ${result.spawnError.message}`,
|
|
811
|
+
remediation: "verify the git binary is installed, on PATH, and executable from the repository working directory",
|
|
812
|
+
};
|
|
813
|
+
}
|
|
814
|
+
// No corruption signature, no overflow, no spawn error. A non-zero
|
|
815
|
+
// fsck exit (broken ref, missing blob NOT in cache-tree, etc.) is
|
|
816
|
+
// out-of-scope for THIS probe — `df doctor` covers ref/object
|
|
817
|
+
// integrity via other surfaces. The cache-tree-specific answer
|
|
818
|
+
// here is "no cache-tree corruption observed".
|
|
819
|
+
return {
|
|
820
|
+
name: "cache_tree_probe",
|
|
821
|
+
passed: true,
|
|
822
|
+
detail: `git fsck reports no cache-tree corruption in ${repoRoot}`,
|
|
823
|
+
};
|
|
824
|
+
}
|
|
329
825
|
//# sourceMappingURL=doctor.js.map
|
package/dist/doctor.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { LoadedConfig } from "../policy/config.js";
|
|
2
|
+
import type { DockerBuildEvidence } from "@momentiq/dark-factory-schemas";
|
|
3
|
+
export declare const DOCKER_BUILD_EVIDENCE_FILENAME = "_dockerbuild-evidence.json";
|
|
4
|
+
export declare function dockerBuildEvidencePath(loaded: LoadedConfig): Promise<string>;
|
|
5
|
+
export declare function readDockerBuildEvidence(loaded: LoadedConfig, expectedSha: string): Promise<DockerBuildEvidence[] | undefined>;
|
|
6
|
+
//# sourceMappingURL=docker-build.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docker-build.d.ts","sourceRoot":"","sources":["../../src/evidence/docker-build.ts"],"names":[],"mappings":"AAoCA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAK1E,eAAO,MAAM,8BAA8B,+BAA+B,CAAC;AAO3E,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,MAAM,CAAC,CAEjB;AAcD,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,YAAY,EACpB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,mBAAmB,EAAE,GAAG,SAAS,CAAC,CAuD5C"}
|