sneakoscope 4.8.7 → 5.3.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 +51 -726
- package/config/bench-baseline.json +7 -0
- package/crates/sks-core/Cargo.lock +1 -1
- package/crates/sks-core/Cargo.toml +1 -1
- package/crates/sks-core/src/main.rs +1 -1
- package/dist/bin/install.js +35 -0
- package/dist/bin/sks.js +1 -1
- package/dist/cli/cli-theme.js +51 -0
- package/dist/cli/command-registry.js +15 -4
- package/dist/cli/help-fast.js +18 -8
- package/dist/cli/insane-search-command.js +36 -8
- package/dist/cli/install-helpers.js +32 -0
- package/dist/commands/codex-lb.js +2 -0
- package/dist/commands/doctor.js +94 -9
- package/dist/commands/proof.js +6 -3
- package/dist/config/skills-manifest.json +82 -54
- package/dist/core/agents/agent-conflict-graph.js +5 -0
- package/dist/core/agents/agent-lease.js +5 -0
- package/dist/core/agents/agent-ledger-schemas.js +1 -0
- package/dist/core/agents/agent-lifecycle.js +5 -3
- package/dist/core/agents/agent-orchestrator.js +268 -62
- package/dist/core/agents/agent-output-validator.js +14 -3
- package/dist/core/agents/agent-patch-queue-store.js +95 -2
- package/dist/core/agents/agent-patch-queue.js +6 -3
- package/dist/core/agents/agent-patch-schema.js +13 -0
- package/dist/core/agents/agent-proof-evidence.js +6 -1
- package/dist/core/agents/agent-runner-fake.js +40 -0
- package/dist/core/agents/agent-worker-pipeline.js +36 -2
- package/dist/core/agents/codex-exec-worker-adapter.js +2 -0
- package/dist/core/agents/native-cli-worker.js +0 -1
- package/dist/core/agents/native-worker-backend-router.js +58 -1
- package/dist/core/codex-app/sks-menubar.js +477 -132
- package/dist/core/codex-app.js +1 -0
- package/dist/core/codex-control/codex-sdk-config-policy.js +2 -1
- package/dist/core/codex-control/codex-sdk-env-policy.js +1 -1
- package/dist/core/codex-control/schemas/agent-worker-result.schema.js +12 -3
- package/dist/core/codex-hooks/codex-hook-managed-install.js +5 -0
- package/dist/core/codex-hooks/codex-hook-state-writer.js +70 -11
- package/dist/core/codex-hooks/codex-hook-trust-doctor.js +2 -2
- package/dist/core/codex-lb/codex-lb-env.js +20 -1
- package/dist/core/commands/basic-cli.js +18 -1
- package/dist/core/commands/check-command.js +37 -5
- package/dist/core/commands/computer-use-command.js +62 -7
- package/dist/core/commands/db-command.js +31 -5
- package/dist/core/commands/fast-mode-command.js +3 -0
- package/dist/core/commands/gate-result-contract.js +43 -0
- package/dist/core/commands/gates-command.js +6 -1
- package/dist/core/commands/gc-command.js +29 -2
- package/dist/core/commands/goal-command.js +9 -2
- package/dist/core/commands/gx-command.js +79 -7
- package/dist/core/commands/image-ux-review-command.js +188 -13
- package/dist/core/commands/mad-db-command.js +85 -176
- package/dist/core/commands/mad-sks-command.js +230 -29
- package/dist/core/commands/menubar-command.js +24 -2
- package/dist/core/commands/naruto-command.js +64 -10
- package/dist/core/commands/plan-command.js +76 -0
- package/dist/core/commands/ppt-command.js +159 -24
- package/dist/core/commands/qa-loop-command.js +6 -2
- package/dist/core/commands/release-command.js +55 -2
- package/dist/core/commands/research-command.js +1 -1
- package/dist/core/commands/review-command.js +217 -0
- package/dist/core/commands/route-success-helpers.js +59 -0
- package/dist/core/commands/run-command.js +19 -7
- package/dist/core/commands/seo-command.js +49 -1
- package/dist/core/commands/ui-command.js +161 -0
- package/dist/core/commands/uninstall-command.js +15 -1
- package/dist/core/db-safety.js +2 -2
- package/dist/core/doctor/doctor-dirty-planner.js +51 -7
- package/dist/core/doctor/doctor-transaction.js +8 -0
- package/dist/core/doctor/doctor-zellij-repair.js +1 -0
- package/dist/core/doctor/imagegen-repair.js +161 -0
- package/dist/core/feature-fixture-runner.js +2 -2
- package/dist/core/feature-fixtures.js +58 -37
- package/dist/core/feature-registry.js +102 -2
- package/dist/core/fsx.js +39 -6
- package/dist/core/image-ux-review/imagegen-adapter.js +48 -11
- package/dist/core/image-ux-review.js +16 -0
- package/dist/core/imagegen/imagegen-capability.js +11 -5
- package/dist/core/imagegen/require-imagegen.js +57 -0
- package/dist/core/init/skills.js +10 -5
- package/dist/core/mad-db/mad-db-coordinator.js +94 -18
- package/dist/core/mad-db/mad-db-policy.js +12 -10
- package/dist/core/mad-sks/executors/executor-base.js +8 -2
- package/dist/core/mad-sks/executors/index.js +4 -0
- package/dist/core/mad-sks/executors/sql-plane-executor.js +194 -0
- package/dist/core/naruto/naruto-active-pool.js +15 -4
- package/dist/core/naruto/naruto-real-worker-child.js +11 -1
- package/dist/core/naruto/naruto-role-policy.js +3 -0
- package/dist/core/naruto/naruto-task-hints.js +10 -0
- package/dist/core/naruto/naruto-work-graph.js +8 -2
- package/dist/core/naruto/naruto-work-item.js +6 -0
- package/dist/core/naruto/solution-tournament.js +101 -0
- package/dist/core/permission-gates.js +30 -0
- package/dist/core/pipeline-internals/runtime-core.js +11 -3
- package/dist/core/pipeline-internals/runtime-gates.js +27 -0
- package/dist/core/ppt-review/index.js +6 -1
- package/dist/core/ppt-review/slide-imagegen-review.js +75 -10
- package/dist/core/ppt.js +70 -2
- package/dist/core/proof/auto-finalize.js +70 -11
- package/dist/core/proof/proof-schema.js +2 -0
- package/dist/core/proof/route-adapter.js +5 -1
- package/dist/core/proof/route-finalizer.js +8 -5
- package/dist/core/proof/selftest-proof-fixtures.js +18 -5
- package/dist/core/proof/validation.js +2 -0
- package/dist/core/provider/model-router.js +53 -0
- package/dist/core/release/release-gate-node.js +3 -0
- package/dist/core/release/release-gate-resource-governor.js +1 -0
- package/dist/core/routes/constants.js +1 -1
- package/dist/core/routes.js +65 -18
- package/dist/core/safety/mutation-guard.js +5 -1
- package/dist/core/stop-gate/gate-evaluator.js +102 -0
- package/dist/core/stop-gate/stop-gate-check.js +16 -1
- package/dist/core/stop-gate/stop-gate-writer.js +4 -0
- package/dist/core/triwiki/agents-md-projector.js +184 -0
- package/dist/core/triwiki-wrongness/wrongness-schema.js +3 -1
- package/dist/core/trust-kernel/trust-kernel-schema.js +1 -0
- package/dist/core/trust-kernel/trust-report.js +1 -1
- package/dist/core/trust-kernel/trust-status.js +2 -0
- package/dist/core/ui/dashboard-html.js +111 -0
- package/dist/core/update/update-migration-state.js +386 -15
- package/dist/core/update-check.js +178 -81
- package/dist/core/verification/diff-quality.js +100 -0
- package/dist/core/verification/impact-scan.js +164 -0
- package/dist/core/verification/machine-feedback.js +146 -0
- package/dist/core/verification/mistake-rule-compiler.js +195 -0
- package/dist/core/version.js +1 -1
- package/dist/core/zellij/zellij-self-heal.js +9 -6
- package/dist/core/zellij/zellij-slot-telemetry.js +1 -1
- package/dist/scripts/check-feature-quality.js +2 -2
- package/dist/scripts/cli-output-consistency-check.js +57 -0
- package/dist/scripts/coding-bench-check.js +136 -0
- package/dist/scripts/doctor-imagegen-repair-check.js +62 -0
- package/dist/scripts/ensure-bin-executable.js +11 -3
- package/dist/scripts/harness-benchmark-check.js +104 -0
- package/dist/scripts/legacy-update-e2e-check.js +228 -0
- package/dist/scripts/mad-db-command-check.js +11 -8
- package/dist/scripts/mad-db-route-identity-check.js +8 -6
- package/dist/scripts/mad-db-safety-conflict-matrix-check.js +31 -8
- package/dist/scripts/mad-db-skill-policy-snapshot-check.js +4 -5
- package/dist/scripts/naruto-real-active-pool-runtime-check.js +26 -1
- package/dist/scripts/ppt-real-imagegen-wiring-check.js +5 -1
- package/dist/scripts/proof-root-cause-policy-check.js +2 -0
- package/dist/scripts/release-dag-full-coverage-check.js +13 -4
- package/dist/scripts/release-gate-dag-runner.js +14 -0
- package/dist/scripts/release-gate-existence-audit.js +2 -1
- package/dist/scripts/release-gate-planner.js +2 -1
- package/dist/scripts/release-gate-script-parity-check.js +45 -17
- package/dist/scripts/release-metadata-1-19-check.js +2 -1
- package/dist/scripts/seo-geo-feature-fixture-quality-check.js +1 -1
- package/dist/scripts/sks-1-11-gate-lib.js +8 -6
- package/dist/scripts/sks-menubar-install-check.js +57 -20
- package/dist/scripts/ux-review-real-loop-fixture-check.js +9 -4
- package/dist/scripts/ux-review-run-wires-imagegen-check.js +4 -0
- package/dist/scripts/zellij-slot-telemetry-runtime-check.js +1 -0
- package/docs/assets/sneakoscope-architecture-pipeline.jpg +0 -0
- package/docs/demo.tape +28 -0
- package/package.json +31 -24
- package/schemas/codex/completion-proof.schema.json +3 -2
- package/schemas/release/release-gate-node.schema.json +2 -1
- package/dist/scripts/agent-backfill-route-blackbox.js +0 -5
- package/dist/scripts/agent-dynamic-pool-route-blackbox.js +0 -5
- package/dist/scripts/agent-parallel-write-blackbox.js +0 -56
- package/dist/scripts/agent-patch-swarm-route-blackbox.js +0 -10
- package/dist/scripts/agent-route-blackbox-lib.js +0 -132
- package/dist/scripts/blackbox-command-import-smoke.js +0 -143
- package/dist/scripts/blackbox-global-shim.js +0 -77
- package/dist/scripts/blackbox-matrix.js +0 -70
- package/dist/scripts/blackbox-npx-one-shot.js +0 -69
- package/dist/scripts/blackbox-pack-install.js +0 -174
- package/dist/scripts/brand-neutrality-zero-leakage-blackbox.js +0 -4
- package/dist/scripts/build-once-runner-blackbox.js +0 -34
- package/dist/scripts/codex-0140-integration-blackbox.js +0 -13
- package/dist/scripts/codex-agent-type-blackbox.js +0 -4
- package/dist/scripts/codex-app-harness-blackbox.js +0 -4
- package/dist/scripts/codex-app-skill-agent-blackbox.js +0 -4
- package/dist/scripts/codex-hook-approval-blackbox.js +0 -4
- package/dist/scripts/codex-init-deep-directory-local-blackbox.js +0 -4
- package/dist/scripts/codex-native-feature-broker-blackbox.js +0 -4
- package/dist/scripts/codex-native-pattern-analysis-blackbox.js +0 -4
- package/dist/scripts/codex-native-read-repair-split-blackbox.js +0 -55
- package/dist/scripts/codex-native-reference-cache-blackbox.js +0 -41
- package/dist/scripts/core-skill-integrity-blackbox.js +0 -32
- package/dist/scripts/dfix-fast-blackbox-check.js +0 -37
- package/dist/scripts/dfix-parallel-write-blackbox.js +0 -48
- package/dist/scripts/dfix-patch-swarm-route-blackbox.js +0 -10
- package/dist/scripts/doctor-dirty-repair-blackbox.js +0 -22
- package/dist/scripts/doctor-dirty-semantic-blackbox.js +0 -8
- package/dist/scripts/doctor-native-capability-repair-blackbox.js +0 -39
- package/dist/scripts/doctor-transaction-engine-blackbox.js +0 -28
- package/dist/scripts/doctor-zellij-fix-blackbox.js +0 -4
- package/dist/scripts/doctor-zellij-no-homebrew-blackbox.js +0 -4
- package/dist/scripts/doctor-zellij-upgrade-blackbox.js +0 -4
- package/dist/scripts/gate-pack-runner-blackbox.js +0 -27
- package/dist/scripts/gate-pack-v2-blackbox.js +0 -18
- package/dist/scripts/geo-cli-blackbox-check.js +0 -18
- package/dist/scripts/loop-collision-blackbox.js +0 -3
- package/dist/scripts/loop-concurrency-oversubscription-blackbox.js +0 -3
- package/dist/scripts/loop-fixture-production-misuse-blackbox.js +0 -3
- package/dist/scripts/loop-kill-interrupt-real-blackbox.js +0 -3
- package/dist/scripts/loop-merge-strategy-blackbox.js +0 -3
- package/dist/scripts/loop-mesh-production-e2e-blackbox.js +0 -3
- package/dist/scripts/loop-side-effect-blackbox.js +0 -3
- package/dist/scripts/mad-db-operation-lifecycle-blackbox.js +0 -29
- package/dist/scripts/mad-sks-actual-executor-blackbox.js +0 -5
- package/dist/scripts/mad-zellij-headless-fallback-blackbox.js +0 -4
- package/dist/scripts/mad-zellij-self-heal-blackbox.js +0 -4
- package/dist/scripts/naruto-loop-mesh-blackbox.js +0 -3
- package/dist/scripts/naruto-real-parallelism-blackbox.js +0 -307
- package/dist/scripts/naruto-worktree-coding-blackbox.js +0 -29
- package/dist/scripts/parallel-runtime-real-blackbox.js +0 -44
- package/dist/scripts/pipeline-codex-native-doctor-mad-routing-real-blackbox.js +0 -77
- package/dist/scripts/pipeline-codex-native-e2e-blackbox.js +0 -13
- package/dist/scripts/pipeline-codex-native-image-routing-real-blackbox.js +0 -50
- package/dist/scripts/pipeline-codex-native-loop-routing-real-blackbox.js +0 -74
- package/dist/scripts/pipeline-codex-native-qa-routing-real-blackbox.js +0 -51
- package/dist/scripts/pipeline-codex-native-research-routing-real-blackbox.js +0 -45
- package/dist/scripts/pipeline-execution-profile-routing-blackbox.js +0 -4
- package/dist/scripts/postinstall-global-doctor-blackbox.js +0 -12
- package/dist/scripts/ppt-full-e2e-blackbox-check.js +0 -109
- package/dist/scripts/ppt-imagegen-blackbox-check.js +0 -46
- package/dist/scripts/qa-backfill-route-blackbox.js +0 -5
- package/dist/scripts/qa-patch-swarm-route-blackbox.js +0 -10
- package/dist/scripts/release-full-parallelism-blackbox.js +0 -41
- package/dist/scripts/release-triwiki-first-runner-blackbox.js +0 -48
- package/dist/scripts/release-wiring-3110-blackbox.js +0 -27
- package/dist/scripts/release-wiring-3112-blackbox.js +0 -17
- package/dist/scripts/release-wiring-3113-blackbox.js +0 -17
- package/dist/scripts/research-backfill-route-blackbox.js +0 -5
- package/dist/scripts/research-final-reviewer-blackbox.js +0 -70
- package/dist/scripts/research-stage-cycle-runtime-blackbox.js +0 -40
- package/dist/scripts/research-synthesis-writer-blackbox.js +0 -24
- package/dist/scripts/route-blackbox-realism-check.js +0 -21
- package/dist/scripts/scheduler-resource-claim-blackbox.js +0 -24
- package/dist/scripts/seo-cli-blackbox-check.js +0 -18
- package/dist/scripts/sks-3110-all-feature-regression-blackbox.js +0 -116
- package/dist/scripts/sks-3112-all-feature-regression-blackbox.js +0 -29
- package/dist/scripts/sks-3113-all-feature-regression-blackbox.js +0 -17
- package/dist/scripts/sks-400-all-feature-regression-blackbox.js +0 -21
- package/dist/scripts/sks-400-extreme-parallel-blackbox.js +0 -8
- package/dist/scripts/sks-400-five-minute-blackbox.js +0 -9
- package/dist/scripts/sks-400-legacy-purge-blackbox.js +0 -8
- package/dist/scripts/sks-401-all-feature-regression-blackbox.js +0 -46
- package/dist/scripts/sks-401-five-minute-actual-blackbox.js +0 -23
- package/dist/scripts/sks-402-all-feature-regression-blackbox.js +0 -9
- package/dist/scripts/sks-402-five-minute-real-blackbox.js +0 -22
- package/dist/scripts/sksd-warm-cache-blackbox.js +0 -12
- package/dist/scripts/team-backfill-route-blackbox.js +0 -5
- package/dist/scripts/team-parallel-write-blackbox.js +0 -55
- package/dist/scripts/team-patch-swarm-route-blackbox.js +0 -10
- package/dist/scripts/triwiki-affected-graph-blackbox.js +0 -28
- package/dist/scripts/triwiki-proof-bank-blackbox.js +0 -30
- package/dist/scripts/triwiki-proof-bank-lock-blackbox.js +0 -7
- package/dist/scripts/ux-patch-swarm-route-blackbox.js +0 -10
- package/dist/scripts/ux-review-imagegen-blackbox-check.js +0 -67
- package/dist/scripts/zellij-initial-main-only-blackbox.js +0 -28
- package/dist/scripts/zellij-pane-lock-concurrency-blackbox.js +0 -80
- package/dist/scripts/zellij-pane-lock-open-worker-integration-blackbox.js +0 -137
- package/dist/scripts/zellij-self-heal-typed-blackbox.js +0 -4
- package/dist/scripts/zellij-slot-telemetry-real-blackbox.js +0 -20
- package/dist/scripts/zellij-stacked-fallback-integration-blackbox.js +0 -81
- package/dist/scripts/zellij-worker-pane-real-ui-blackbox.js +0 -202
package/dist/core/db-safety.js
CHANGED
|
@@ -609,8 +609,8 @@ export function dbBlockReason(decision) {
|
|
|
609
609
|
return [
|
|
610
610
|
'Sneakoscope Codex Database Safety Gate blocked this operation.',
|
|
611
611
|
`Reasons: ${(decision.reasons || []).join(', ') || 'unknown'}.`,
|
|
612
|
-
'Default DB mode is read-only. Destructive SQL-plane operations require an explicit active
|
|
613
|
-
'Use read-only/project-scoped Supabase MCP URLs outside
|
|
612
|
+
'Default DB mode is read-only. Destructive SQL-plane operations require an explicit active MAD-SKS sql-plane capability opened by $MAD-SKS/sks mad-sks sql|apply-migration or the deprecated $MAD-DB/sks mad-db redirect.',
|
|
613
|
+
'Use read-only/project-scoped Supabase MCP URLs outside MAD-SKS sql-plane. Supabase project/account/billing/credential control-plane operations remain denied even there.'
|
|
614
614
|
].join(' ');
|
|
615
615
|
}
|
|
616
616
|
export async function scanDbSafety(root, opts = {}) {
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import fs from 'node:fs';
|
|
2
2
|
import path from 'node:path';
|
|
3
|
+
import { spawnSync } from 'node:child_process';
|
|
3
4
|
import { MANAGED_ASSET_VERSION } from '../managed-assets/managed-assets-manifest.js';
|
|
4
5
|
import { PACKAGE_VERSION, packageRoot, sha256 } from '../fsx.js';
|
|
5
6
|
import { hashJson } from '../triwiki/triwiki-cache-key.js';
|
|
7
|
+
import { SKS_MENUBAR_LABEL, sksMenuBarPaths } from '../codex-app/sks-menubar.js';
|
|
6
8
|
export const DOCTOR_DIRTY_PLAN_SCHEMA = 'sks.doctor-dirty-plan.v2';
|
|
7
9
|
export function planDoctorDirtyRepair(root, phaseIds) {
|
|
8
10
|
const phases = phaseIds.map((id) => {
|
|
@@ -10,25 +12,30 @@ export function planDoctorDirtyRepair(root, phaseIds) {
|
|
|
10
12
|
const inputHash = phaseInputHash(root, id);
|
|
11
13
|
const postcheckRequired = phaseRequiresPostcheck(id);
|
|
12
14
|
const markerState = readMarker(marker);
|
|
15
|
+
const runtimeProbeFailed = runtimeProbeFailures(root, id);
|
|
13
16
|
if (!markerState)
|
|
14
|
-
return { id, status: 'dirty', reason: 'no_clean_marker', input_hash: inputHash, last_clean_proof_id: null, postcheck_required: postcheckRequired, postcheck_pending: false };
|
|
17
|
+
return { id, status: 'dirty', reason: 'no_clean_marker', input_hash: inputHash, last_clean_proof_id: null, postcheck_required: postcheckRequired, postcheck_pending: false, runtime_probe_failed: runtimeProbeFailed };
|
|
15
18
|
if (markerState.input_hash !== inputHash) {
|
|
16
|
-
return { id, status: 'dirty', reason: 'input_hash_changed', input_hash: inputHash, last_clean_proof_id: markerState.proof_id, postcheck_required: postcheckRequired, postcheck_pending: false };
|
|
19
|
+
return { id, status: 'dirty', reason: 'input_hash_changed', input_hash: inputHash, last_clean_proof_id: markerState.proof_id, postcheck_required: postcheckRequired, postcheck_pending: false, runtime_probe_failed: runtimeProbeFailed };
|
|
17
20
|
}
|
|
18
21
|
if (markerState.proof_id && !proofExists(root, markerState.proof_id)) {
|
|
19
|
-
return { id, status: 'dirty', reason: 'clean_proof_missing', input_hash: inputHash, last_clean_proof_id: markerState.proof_id, postcheck_required: postcheckRequired, postcheck_pending: false };
|
|
22
|
+
return { id, status: 'dirty', reason: 'clean_proof_missing', input_hash: inputHash, last_clean_proof_id: markerState.proof_id, postcheck_required: postcheckRequired, postcheck_pending: false, runtime_probe_failed: runtimeProbeFailed };
|
|
20
23
|
}
|
|
21
24
|
if (!markerState.repair_applied) {
|
|
22
|
-
return { id, status: 'dirty', reason: 'repair_not_applied', input_hash: inputHash, last_clean_proof_id: markerState.proof_id, postcheck_required: postcheckRequired, postcheck_pending: false };
|
|
25
|
+
return { id, status: 'dirty', reason: 'repair_not_applied', input_hash: inputHash, last_clean_proof_id: markerState.proof_id, postcheck_required: postcheckRequired, postcheck_pending: false, runtime_probe_failed: runtimeProbeFailed };
|
|
26
|
+
}
|
|
27
|
+
if (runtimeProbeFailed.length) {
|
|
28
|
+
return { id, status: 'dirty', reason: `runtime_probe_failed:${runtimeProbeFailed.join(',')}`, input_hash: inputHash, last_clean_proof_id: markerState.proof_id, postcheck_required: postcheckRequired, postcheck_pending: false, runtime_probe_failed: runtimeProbeFailed };
|
|
23
29
|
}
|
|
24
30
|
return {
|
|
25
31
|
id,
|
|
26
|
-
status: 'clean',
|
|
32
|
+
status: markerState.postcheck_pending ? 'dirty' : 'clean',
|
|
27
33
|
reason: postcheckRequired && markerState.postcheck_pending ? 'matching_repair_marker_postcheck_pending' : 'matching_clean_proof',
|
|
28
34
|
input_hash: inputHash,
|
|
29
35
|
last_clean_proof_id: markerState.proof_id,
|
|
30
36
|
postcheck_required: postcheckRequired,
|
|
31
|
-
postcheck_pending: postcheckRequired && markerState.postcheck_pending
|
|
37
|
+
postcheck_pending: postcheckRequired && markerState.postcheck_pending,
|
|
38
|
+
runtime_probe_failed: []
|
|
32
39
|
};
|
|
33
40
|
});
|
|
34
41
|
const plan = {
|
|
@@ -37,6 +44,7 @@ export function planDoctorDirtyRepair(root, phaseIds) {
|
|
|
37
44
|
phases,
|
|
38
45
|
dirty_count: phases.filter((phase) => phase.status === 'dirty').length,
|
|
39
46
|
clean_count: phases.filter((phase) => phase.status === 'clean').length,
|
|
47
|
+
runtime_probe_failed: phases.flatMap((phase) => phase.runtime_probe_failed.map((failure) => `${phase.id}:${failure}`)),
|
|
40
48
|
semantic_dirty_plan_path: dirtyPlanPath(root)
|
|
41
49
|
};
|
|
42
50
|
writeDirtyPlan(root, plan);
|
|
@@ -236,7 +244,43 @@ function proofExists(root, proofId) {
|
|
|
236
244
|
}
|
|
237
245
|
}
|
|
238
246
|
function phaseRequiresPostcheck(id) {
|
|
239
|
-
return /zellij|context7|startup|supabase|native|secret/i.test(id);
|
|
247
|
+
return /zellij|context7|startup|supabase|native|secret|menubar/i.test(id);
|
|
248
|
+
}
|
|
249
|
+
function runtimeProbeFailures(root, id) {
|
|
250
|
+
if (!id.includes('menubar') || process.platform !== 'darwin')
|
|
251
|
+
return [];
|
|
252
|
+
const failures = [];
|
|
253
|
+
const paths = sksMenuBarPaths(process.env.HOME, root);
|
|
254
|
+
if (!fs.existsSync(paths.executable_path))
|
|
255
|
+
failures.push('menubar_app_missing');
|
|
256
|
+
if (!fs.existsSync(paths.action_script_path))
|
|
257
|
+
failures.push('action_script_missing');
|
|
258
|
+
else {
|
|
259
|
+
try {
|
|
260
|
+
fs.accessSync(paths.action_script_path, fs.constants.X_OK);
|
|
261
|
+
}
|
|
262
|
+
catch {
|
|
263
|
+
failures.push('action_script_not_executable');
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
const launchctl = process.env.SKS_MENUBAR_LAUNCHCTL || '/bin/launchctl';
|
|
267
|
+
if (!fs.existsSync(launchctl)) {
|
|
268
|
+
failures.push('launchctl_missing');
|
|
269
|
+
return failures;
|
|
270
|
+
}
|
|
271
|
+
const uid = typeof process.getuid === 'function' ? process.getuid() : null;
|
|
272
|
+
const service = `${uid === null ? 'gui' : `gui/${uid}`}/${SKS_MENUBAR_LABEL}`;
|
|
273
|
+
const result = spawnSync(launchctl, ['print', service], {
|
|
274
|
+
encoding: 'utf8',
|
|
275
|
+
timeout: 500,
|
|
276
|
+
maxBuffer: 32 * 1024
|
|
277
|
+
});
|
|
278
|
+
const text = `${result.stdout || ''}\n${result.stderr || ''}`;
|
|
279
|
+
if (result.error)
|
|
280
|
+
failures.push(`launchctl_probe_error:${result.error.message}`);
|
|
281
|
+
else if (result.status !== 0 || !(/\bstate = running\b|\bpid = \d+\b/.test(text)))
|
|
282
|
+
failures.push('launchd_not_running');
|
|
283
|
+
return failures;
|
|
240
284
|
}
|
|
241
285
|
function writeDirtyPlan(root, plan) {
|
|
242
286
|
const file = dirtyPlanPath(root);
|
|
@@ -1,14 +1,18 @@
|
|
|
1
1
|
import path from 'node:path';
|
|
2
2
|
import { nowIso, writeJsonAtomic } from '../fsx.js';
|
|
3
3
|
import { isDoctorPhaseClean, markDoctorPhaseClean } from './doctor-dirty-planner.js';
|
|
4
|
+
import { ui as cliUi } from '../../cli/cli-theme.js';
|
|
4
5
|
export async function runDoctorFixTransaction(input) {
|
|
5
6
|
const startedAt = nowIso();
|
|
6
7
|
const phases = [];
|
|
7
8
|
const proofIdsUsed = [];
|
|
8
9
|
let rollbackPerformed = false;
|
|
10
|
+
const liveOutput = input.json !== true && input.machineOnly !== true;
|
|
9
11
|
for (const definition of input.phases) {
|
|
10
12
|
const phaseStarted = nowIso();
|
|
11
13
|
const startedMs = Date.now();
|
|
14
|
+
if (liveOutput)
|
|
15
|
+
cliUi.step(`▸ ${definition.id} ...`);
|
|
12
16
|
let phase = {
|
|
13
17
|
id: definition.id,
|
|
14
18
|
ok: false,
|
|
@@ -32,6 +36,8 @@ export async function runDoctorFixTransaction(input) {
|
|
|
32
36
|
completed_at: nowIso(),
|
|
33
37
|
duration_ms: Math.max(0, Date.now() - startedMs)
|
|
34
38
|
});
|
|
39
|
+
if (liveOutput)
|
|
40
|
+
cliUi.step(`✔ ${definition.id} (${Math.round((Date.now() - startedMs) / 1000)}s)`);
|
|
35
41
|
continue;
|
|
36
42
|
}
|
|
37
43
|
try {
|
|
@@ -71,6 +77,8 @@ export async function runDoctorFixTransaction(input) {
|
|
|
71
77
|
proofIdsUsed.push(proofId);
|
|
72
78
|
}
|
|
73
79
|
phases.push(phase);
|
|
80
|
+
if (liveOutput)
|
|
81
|
+
cliUi.step(`${phase.ok ? '✔' : '✖'} ${definition.id} (${Math.round((phase.duration_ms || 0) / 1000)}s)`);
|
|
74
82
|
}
|
|
75
83
|
const writeInput = {
|
|
76
84
|
root: input.root,
|
|
@@ -10,6 +10,7 @@ export async function runDoctorZellijRepair(input) {
|
|
|
10
10
|
autoApprove: args.includes('--yes') || args.includes('-y'),
|
|
11
11
|
installHomebrew: args.includes('--install-homebrew') || process.env.SKS_ALLOW_HOMEBREW_INSTALL === '1',
|
|
12
12
|
dryRun: args.includes('--dry-run'),
|
|
13
|
+
quiet: args.includes('--json') || args.includes('--machine-only'),
|
|
13
14
|
interactive: Boolean(process.stdin.isTTY && process.stdout.isTTY && process.env.SKS_NO_QUESTION !== '1'),
|
|
14
15
|
allowHeadlessFallback: false,
|
|
15
16
|
env: process.env
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { CODEX_APP_IMAGE_GENERATION_DOC_URL } from '../routes.js';
|
|
3
|
+
import { detectImagegenCapability } from '../imagegen/imagegen-capability.js';
|
|
4
|
+
import { ensureDir, nowIso, runProcess, which, writeJsonAtomic } from '../fsx.js';
|
|
5
|
+
export const DOCTOR_IMAGEGEN_REPAIR_SCHEMA = 'sks.doctor-imagegen-repair.v1';
|
|
6
|
+
export async function repairCodexImagegen(input) {
|
|
7
|
+
const root = path.resolve(input.root || process.cwd());
|
|
8
|
+
const apply = input.apply === true;
|
|
9
|
+
const steps = [];
|
|
10
|
+
const before = await detectImagegenCapability({
|
|
11
|
+
codexBin: input.codexBin || undefined,
|
|
12
|
+
timeoutMs: input.timeoutMs || 5000
|
|
13
|
+
}).catch((err) => ({ ok: false, core_ready: false, blockers: [messageOf(err)], codex_app: { available: false, blocker: messageOf(err) } }));
|
|
14
|
+
let codexBin = input.codexBin || await which('codex').catch(() => null);
|
|
15
|
+
let versionStep;
|
|
16
|
+
if (codexBin) {
|
|
17
|
+
const version = await runProcess(codexBin, ['--version'], { timeoutMs: input.timeoutMs || 5000, maxOutputBytes: 16 * 1024 })
|
|
18
|
+
.catch((err) => ({ code: 1, stdout: '', stderr: messageOf(err) }));
|
|
19
|
+
versionStep = {
|
|
20
|
+
id: 'codex_cli_version',
|
|
21
|
+
ok: version.code === 0,
|
|
22
|
+
attempted: true,
|
|
23
|
+
command: `${codexBin} --version`,
|
|
24
|
+
exit_code: version.code,
|
|
25
|
+
stdout_tail: tail(version.stdout),
|
|
26
|
+
stderr_tail: tail(version.stderr),
|
|
27
|
+
blocker: version.code === 0 ? null : 'codex_cli_version_failed'
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
versionStep = {
|
|
32
|
+
id: 'codex_cli_version',
|
|
33
|
+
ok: false,
|
|
34
|
+
attempted: false,
|
|
35
|
+
command: 'codex --version',
|
|
36
|
+
blocker: 'codex_binary_missing'
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
steps.push(versionStep);
|
|
40
|
+
if (!codexBin && apply && (input.autoInstallCodex === true || process.env.SKS_IMAGEGEN_AUTO_INSTALL_CODEX === '1')) {
|
|
41
|
+
const npmBin = await which('npm').catch(() => null);
|
|
42
|
+
if (npmBin) {
|
|
43
|
+
const install = await runProcess(npmBin, ['i', '-g', '@openai/codex@latest'], {
|
|
44
|
+
timeoutMs: 180000,
|
|
45
|
+
maxOutputBytes: 128 * 1024
|
|
46
|
+
}).catch((err) => ({ code: 1, stdout: '', stderr: messageOf(err) }));
|
|
47
|
+
steps.push({
|
|
48
|
+
id: 'codex_cli_install',
|
|
49
|
+
ok: install.code === 0,
|
|
50
|
+
attempted: true,
|
|
51
|
+
command: `${npmBin} i -g @openai/codex@latest`,
|
|
52
|
+
exit_code: install.code,
|
|
53
|
+
stdout_tail: tail(install.stdout),
|
|
54
|
+
stderr_tail: tail(install.stderr),
|
|
55
|
+
blocker: install.code === 0 ? null : 'codex_cli_install_failed'
|
|
56
|
+
});
|
|
57
|
+
codexBin = await which('codex').catch(() => null);
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
steps.push({
|
|
61
|
+
id: 'codex_cli_install',
|
|
62
|
+
ok: false,
|
|
63
|
+
attempted: false,
|
|
64
|
+
command: 'npm i -g @openai/codex@latest',
|
|
65
|
+
blocker: 'npm_missing'
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
else if (!codexBin) {
|
|
70
|
+
steps.push({
|
|
71
|
+
id: 'codex_cli_install',
|
|
72
|
+
ok: false,
|
|
73
|
+
attempted: false,
|
|
74
|
+
command: 'npm i -g @openai/codex@latest',
|
|
75
|
+
blocker: apply ? 'auto_install_requires_SKS_IMAGEGEN_AUTO_INSTALL_CODEX_1' : 'doctor_fix_not_requested'
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
if (codexBin && before?.core_ready !== true && apply) {
|
|
79
|
+
const enable = await runProcess(codexBin, ['features', 'enable', 'image_generation'], {
|
|
80
|
+
timeoutMs: input.timeoutMs || 10000,
|
|
81
|
+
maxOutputBytes: 32 * 1024
|
|
82
|
+
}).catch((err) => ({ code: 1, stdout: '', stderr: messageOf(err) }));
|
|
83
|
+
steps.push({
|
|
84
|
+
id: 'image_generation_feature_enable',
|
|
85
|
+
ok: enable.code === 0,
|
|
86
|
+
attempted: true,
|
|
87
|
+
command: `${codexBin} features enable image_generation`,
|
|
88
|
+
exit_code: enable.code,
|
|
89
|
+
stdout_tail: tail(enable.stdout),
|
|
90
|
+
stderr_tail: tail(enable.stderr),
|
|
91
|
+
blocker: enable.code === 0 ? null : 'codex_feature_enable_unsupported_or_failed'
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
steps.push({
|
|
96
|
+
id: 'image_generation_feature_enable',
|
|
97
|
+
ok: before?.core_ready === true,
|
|
98
|
+
attempted: false,
|
|
99
|
+
command: codexBin ? `${codexBin} features enable image_generation` : 'codex features enable image_generation',
|
|
100
|
+
blocker: before?.core_ready === true ? null : apply ? 'codex_cli_missing' : 'doctor_fix_not_requested'
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
const after = await detectImagegenCapability({
|
|
104
|
+
codexBin: codexBin || undefined,
|
|
105
|
+
timeoutMs: input.timeoutMs || 5000
|
|
106
|
+
}).catch((err) => ({ ok: false, core_ready: false, blockers: [messageOf(err)], codex_app: { available: false, blocker: messageOf(err) } }));
|
|
107
|
+
steps.push({
|
|
108
|
+
id: 'imagegen_capability_redetect',
|
|
109
|
+
ok: after?.core_ready === true,
|
|
110
|
+
attempted: true,
|
|
111
|
+
command: 'codex features list --json',
|
|
112
|
+
blocker: after?.core_ready === true ? null : 'codex_app_builtin_imagegen_capability_missing'
|
|
113
|
+
});
|
|
114
|
+
const recovered = after?.core_ready === true;
|
|
115
|
+
const blockers = recovered ? [] : [
|
|
116
|
+
...new Set([
|
|
117
|
+
...(after?.core_blockers || []),
|
|
118
|
+
...(after?.blockers || []),
|
|
119
|
+
'codex_imagegen_unavailable'
|
|
120
|
+
].map(String))
|
|
121
|
+
];
|
|
122
|
+
let report = {
|
|
123
|
+
schema: DOCTOR_IMAGEGEN_REPAIR_SCHEMA,
|
|
124
|
+
generated_at: nowIso(),
|
|
125
|
+
ok: recovered,
|
|
126
|
+
attempted: before?.core_ready !== true,
|
|
127
|
+
apply,
|
|
128
|
+
recovered,
|
|
129
|
+
before,
|
|
130
|
+
after,
|
|
131
|
+
steps,
|
|
132
|
+
blockers,
|
|
133
|
+
manual_actions: recovered ? [] : [
|
|
134
|
+
`Install/update Codex CLI if missing: npm i -g @openai/codex@latest`,
|
|
135
|
+
`Open Codex App settings and enable image_generation / $imagegen.`,
|
|
136
|
+
`Verify with: codex features list --json`,
|
|
137
|
+
`Docs: ${CODEX_APP_IMAGE_GENERATION_DOC_URL}`
|
|
138
|
+
],
|
|
139
|
+
docs_url: CODEX_APP_IMAGE_GENERATION_DOC_URL
|
|
140
|
+
};
|
|
141
|
+
if (input.reportPath !== null) {
|
|
142
|
+
const reportPath = input.reportPath || path.join(root, '.sneakoscope', 'reports', 'doctor-imagegen-repair.json');
|
|
143
|
+
try {
|
|
144
|
+
await ensureDir(path.dirname(reportPath));
|
|
145
|
+
await writeJsonAtomic(reportPath, report);
|
|
146
|
+
report = { ...report, report_path: reportPath };
|
|
147
|
+
}
|
|
148
|
+
catch (err) {
|
|
149
|
+
report = { ...report, report_write_failed: true, report_write_error: messageOf(err) };
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
return report;
|
|
153
|
+
}
|
|
154
|
+
function tail(value, max = 2000) {
|
|
155
|
+
const text = String(value || '');
|
|
156
|
+
return text.length > max ? text.slice(-max) : text;
|
|
157
|
+
}
|
|
158
|
+
function messageOf(err) {
|
|
159
|
+
return err instanceof Error ? err.message : String(err);
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=imagegen-repair.js.map
|
|
@@ -181,7 +181,7 @@ function inspectExpectedArtifact(root, tempRoot, artifact, ctx = {}) {
|
|
|
181
181
|
return { ...result, failure: 'json_parse' };
|
|
182
182
|
}
|
|
183
183
|
if (schema === 'sks.completion-proof.v1')
|
|
184
|
-
return { ...result, schema_ok: parsed.schema === schema, content_ok: ['verified', 'verified_partial', 'blocked'].includes(parsed.status), status: parsed.status };
|
|
184
|
+
return { ...result, schema_ok: parsed.schema === schema, content_ok: ['verified', 'verified_partial', 'mock_only', 'blocked'].includes(parsed.status), status: parsed.status };
|
|
185
185
|
if (schema === 'sks.image-voxel-ledger.v1') {
|
|
186
186
|
const anchorCount = Array.isArray(parsed.anchors) ? parsed.anchors.length : 0;
|
|
187
187
|
const relationCount = Array.isArray(parsed.relations) ? parsed.relations.length : 0;
|
|
@@ -241,7 +241,7 @@ function renderFeatureFixtureMarkdown(report = {}) {
|
|
|
241
241
|
}
|
|
242
242
|
export function validateCompletionProofArtifact(file) {
|
|
243
243
|
const proof = JSON.parse(fs.readFileSync(file, 'utf8'));
|
|
244
|
-
return proof.schema === 'sks.completion-proof.v1' && ['verified', 'verified_partial', 'blocked'].includes(proof.status);
|
|
244
|
+
return proof.schema === 'sks.completion-proof.v1' && ['verified', 'verified_partial', 'mock_only', 'blocked'].includes(proof.status);
|
|
245
245
|
}
|
|
246
246
|
export function validateImageVoxelArtifact(file, { requireAnchors = true, requireRelations = false } = {}) {
|
|
247
247
|
const ledger = JSON.parse(fs.readFileSync(file, 'utf8'));
|
|
@@ -2,7 +2,7 @@ import { PACKAGE_VERSION } from './fsx.js';
|
|
|
2
2
|
export const FEATURE_FIXTURE_SCHEMA = 'sks.feature-fixtures.v1';
|
|
3
3
|
export const FEATURE_QUALITY_LEVELS = Object.freeze([
|
|
4
4
|
'runtime_verified',
|
|
5
|
-
'
|
|
5
|
+
'wiring_only',
|
|
6
6
|
'integration_optional',
|
|
7
7
|
'static_contract',
|
|
8
8
|
'missing'
|
|
@@ -12,21 +12,31 @@ const FIXTURES = Object.freeze({
|
|
|
12
12
|
'cli-version': fixture('execute', 'sks --version', [], 'pass'),
|
|
13
13
|
'cli-root': fixture('execute', 'sks root --json', [], 'pass'),
|
|
14
14
|
'cli-doctor': fixture('real_optional', 'sks doctor --json', [], 'pass'),
|
|
15
|
+
'doctor:imagegen-repair': fixture('execute_and_validate_artifacts', 'sks doctor --json', [{ path: '.sneakoscope/reports/feature-fixtures/doctor-imagegen-repair.json', schema: 'sks.doctor-imagegen-repair.v1', optional: true }], 'pass', {
|
|
16
|
+
quality: 'runtime_verified',
|
|
17
|
+
validates_json_fields: ['imagegen_repair', 'repair.imagegen']
|
|
18
|
+
}),
|
|
15
19
|
'cli-paths': fixture('execute_and_validate_artifacts', 'sks paths managed --json', ['.sneakoscope/managed-paths.json'], 'pass'),
|
|
16
20
|
'cli-rollback': fixture('execute', 'sks rollback list --json', [], 'pass'),
|
|
17
21
|
'cli-setup': fixture('real_optional', 'sks setup --json --local-only', [], 'pass'),
|
|
18
22
|
'cli-codex': fixture('execute', 'sks codex compatibility --json', [], 'pass'),
|
|
19
23
|
'cli-codex-app': fixture('real_optional', 'sks codex-app check --json', [], 'pass'),
|
|
20
24
|
'cli-codex-lb': fixture('execute_and_validate_artifacts', 'sks codex-lb metrics --json', [], 'pass'),
|
|
21
|
-
'cli-hooks': fixture('
|
|
25
|
+
'cli-hooks': fixture('execute', 'sks hooks trust-report --json', [], 'pass'),
|
|
22
26
|
'cli-features': fixture('execute', 'sks features check --json', [], 'pass'),
|
|
23
27
|
'cli-commands': fixture('execute', 'sks commands --json', [], 'pass'),
|
|
24
28
|
'cli-check': fixture('execute', 'sks check --tier confidence --sla 5m --plan --json', [], 'pass'),
|
|
29
|
+
'cli-plan': fixture('execute', 'sks plan "fixture" --json', [], 'pass'),
|
|
30
|
+
'cli-review': fixture('execute', 'sks review --diff HEAD --json', [], 'pass'),
|
|
31
|
+
'cli-ui': fixture('static', 'sks ui [--port 4477] [--mission latest] [--once] [--json]', [], 'pass', {
|
|
32
|
+
quality: 'static_contract',
|
|
33
|
+
reason: 'UI command opens a localhost dashboard; release fixture tracks the CLI contract without launching a server.'
|
|
34
|
+
}),
|
|
25
35
|
'cli-run': fixture('execute_and_validate_artifacts', 'sks run "fixture" --mock --json', ['run-classification.json', 'completion-proof.json', 'evidence-index.json', 'route-completion-contract.json', 'trust-report.json'], 'pass'),
|
|
26
36
|
'cli-status': fixture('execute', 'sks status --json', [], 'pass'),
|
|
27
37
|
'cli-usage': fixture('execute', 'sks usage overview', [], 'pass'),
|
|
28
38
|
'cli-quickstart': fixture('execute', 'sks quickstart', [], 'pass'),
|
|
29
|
-
'cli-update': fixture('
|
|
39
|
+
'cli-update': fixture('execute', 'sks update now --dry-run --json', [], 'pass'),
|
|
30
40
|
'cli-update-check': fixture('static', 'sks update-check --json', [], 'pass'),
|
|
31
41
|
'cli-guard': fixture('execute', 'sks guard check --json', [], 'pass'),
|
|
32
42
|
'cli-conflicts': fixture('execute', 'sks conflicts check --json', [], 'pass'),
|
|
@@ -35,20 +45,21 @@ const FIXTURES = Object.freeze({
|
|
|
35
45
|
'cli-fix-path': fixture('execute', 'sks fix-path --json', [], 'pass'),
|
|
36
46
|
'cli-selftest': fixture('execute', 'sks selftest --mock', [], 'pass'),
|
|
37
47
|
'cli-git': fixture('execute', 'sks git policy --json', [], 'pass'),
|
|
38
|
-
'cli-
|
|
48
|
+
'cli-uninstall': fixture('execute', 'sks uninstall --dry-run --json', [], 'pass'),
|
|
49
|
+
'cli-goal': fixture('execute_and_validate_artifacts', 'sks goal status latest --json', ['goal-workflow.json'], 'pass'),
|
|
39
50
|
'cli-seo-geo-optimizer': fixture('execute_and_validate_artifacts', 'sks seo-geo-optimizer fixture --mode seo --json', ['search-visibility/site-inventory.json', 'search-visibility/seo-findings.json', 'search-visibility/verification-report.json', 'seo-gate.json', 'completion-proof.json'], 'pass'),
|
|
40
|
-
'cli-research': fixture('
|
|
41
|
-
'cli-qa-loop': fixture('
|
|
42
|
-
'cli-ppt': fixture('
|
|
43
|
-
'cli-image-ux-review': fixture('
|
|
51
|
+
'cli-research': fixture('execute_and_validate_artifacts', 'sks research status latest --json', ['research-gate.json', 'completion-proof.json'], 'pass'),
|
|
52
|
+
'cli-qa-loop': fixture('execute_and_validate_artifacts', 'sks qa-loop status latest --json', ['qa-loop-proof.json', 'completion-proof.json'], 'pass'),
|
|
53
|
+
'cli-ppt': fixture('execute_and_validate_artifacts', 'sks ppt fixture --mock --json', ['ppt-imagegen-review-gate.json', 'completion-proof.json'], 'pass'),
|
|
54
|
+
'cli-image-ux-review': fixture('execute_and_validate_artifacts', 'sks image-ux-review status latest --json', ['image-ux-generated-review-ledger.json', 'image-voxel-ledger.json'], 'pass'),
|
|
44
55
|
'cli-computer-use': fixture('real_optional', 'sks computer-use status --json', [], 'pass'),
|
|
45
|
-
'cli-pipeline': fixture('
|
|
46
|
-
'cli-validate-artifacts': fixture('
|
|
47
|
-
'cli-hproof': fixture('
|
|
56
|
+
'cli-pipeline': fixture('execute_and_validate_artifacts', 'sks pipeline status latest --json', ['pipeline-plan.json'], 'pass'),
|
|
57
|
+
'cli-validate-artifacts': fixture('execute_and_validate_artifacts', 'sks validate-artifacts latest --json', ['validation-report.json'], 'pass'),
|
|
58
|
+
'cli-hproof': fixture('execute_and_validate_artifacts', 'sks hproof check latest', ['completion-proof.json'], 'pass'),
|
|
48
59
|
'cli-proof-field': fixture('execute', 'sks proof-field scan --json --intent fixture', [], 'pass'),
|
|
49
|
-
'cli-recallpulse': fixture('
|
|
60
|
+
'cli-recallpulse': fixture('execute_and_validate_artifacts', 'sks recallpulse status latest --json', ['recallpulse-report.json'], 'pass'),
|
|
50
61
|
'cli-agent': fixture('execute_and_validate_artifacts', 'sks agent run fixture --mock --json', ['agents/agent-central-ledger.json', 'agents/agent-task-board.json', 'agents/agent-leases.json', 'agents/agent-no-overlap-proof.json', 'agents/agent-session-cleanup.json', 'agents/agent-proof-evidence.json', 'agents/agent-effort-policy.json'], 'pass'),
|
|
51
|
-
'cli-gx': fixture('
|
|
62
|
+
'cli-gx': fixture('execute_and_validate_artifacts', 'sks gx validate fixture', ['gx-validation.json'], 'pass'),
|
|
52
63
|
'cli-perf': fixture('execute', 'sks perf cold-start --json --iterations 1', [], 'pass'),
|
|
53
64
|
'cli-bench': fixture('execute_and_validate_artifacts', 'sks bench core --tier npx-one-shot --json --iterations 1', ['.sneakoscope/reports/performance/core-bench.json'], 'pass'),
|
|
54
65
|
'cli-code-structure': fixture('execute', 'sks code-structure scan --json', [], 'pass'),
|
|
@@ -63,16 +74,16 @@ const FIXTURES = Object.freeze({
|
|
|
63
74
|
'cli-dfix': fixture('execute_and_validate_artifacts', 'sks dfix fixture --json', ['completion-proof.json', 'dfix-gate.json', 'dfix-verification.json'], 'pass'),
|
|
64
75
|
'cli-wiki': fixture('execute_and_validate_artifacts', 'sks wiki image-ingest test/fixtures/images/one-by-one.png --json', [{ path: '.sneakoscope/wiki/image-voxel-ledger.json', schema: 'sks.image-voxel-ledger.v1', require_anchors: false }], 'pass'),
|
|
65
76
|
'cli-db': fixture('execute', 'sks db policy', [], 'pass'),
|
|
66
|
-
'cli-wizard': fixture('
|
|
67
|
-
'cli-bootstrap': fixture('
|
|
68
|
-
'cli-deps': fixture('
|
|
69
|
-
'cli-auth': fixture('
|
|
70
|
-
'cli-codex-native': fixture('
|
|
77
|
+
'cli-wizard': fixture('execute', 'sks wizard', [], 'pass'),
|
|
78
|
+
'cli-bootstrap': fixture('execute', 'sks bootstrap --dry-run', [], 'pass'),
|
|
79
|
+
'cli-deps': fixture('execute', 'sks deps check --json', [], 'pass'),
|
|
80
|
+
'cli-auth': fixture('execute', 'sks auth status --json', [], 'pass'),
|
|
81
|
+
'cli-codex-native': fixture('execute', 'sks codex-native status --json', [], 'pass'),
|
|
71
82
|
'cli-zellij': fixture('mock', 'npm run zellij:capability --silent', [], 'pass'),
|
|
72
83
|
'cli-tmux': fixture('mock', 'removed runtime migration notice: sks tmux --json', [], 'pass'),
|
|
73
|
-
'cli-mad': fixture('
|
|
84
|
+
'cli-mad': fixture('execute', 'sks mad --help', [], 'pass'),
|
|
74
85
|
'cli-mad-sks': fixture('static', 'sks mad-sks status --json', [], 'pass'),
|
|
75
|
-
'cli-auto-review': fixture('
|
|
86
|
+
'cli-auto-review': fixture('execute', 'sks auto-review status --json', [], 'pass'),
|
|
76
87
|
'cli-commit': fixture('mock', 'sks commit --dry-run', [], 'pass'),
|
|
77
88
|
'cli-commit-and-push': fixture('mock', 'sks commit-and-push --dry-run', [], 'pass'),
|
|
78
89
|
'cli-context7': fixture('real_optional', 'sks context7 check --json', [], 'pass'),
|
|
@@ -80,29 +91,39 @@ const FIXTURES = Object.freeze({
|
|
|
80
91
|
'cli-ultra-search': fixture('execute', 'sks ultra-search doctor --json', [], 'pass'),
|
|
81
92
|
'cli-xai': fixture('real_optional', 'sks xai check --json', [], 'pass'),
|
|
82
93
|
'cli-task': fixture('execute', 'sks task instant --plan --json', [], 'pass'),
|
|
83
|
-
'cli-release': fixture('
|
|
94
|
+
'cli-release': fixture('execute', 'sks release affected --json', [], 'pass'),
|
|
84
95
|
'cli-triwiki': fixture('execute', 'sks triwiki index --json', [], 'pass'),
|
|
85
96
|
'cli-daemon': fixture('execute', 'sks daemon status --json', [], 'pass'),
|
|
86
|
-
'cli-all-features': fixture('
|
|
87
|
-
'cli-init': fixture('
|
|
88
|
-
'cli-eval': fixture('
|
|
89
|
-
'cli-harness': fixture('
|
|
90
|
-
'cli-naruto': fixture('
|
|
91
|
-
'cli-team': fixture('
|
|
92
|
-
'cli-reasoning': fixture('
|
|
93
|
-
'cli-profile': fixture('
|
|
94
|
-
'skill-db-safety-guard': fixture('
|
|
95
|
-
'skill-honest-mode': fixture('
|
|
96
|
-
'skill-imagegen': fixture('
|
|
97
|
-
'
|
|
97
|
+
'cli-all-features': fixture('execute_and_validate_artifacts', 'sks all-features complete --json', [`.sneakoscope/reports/all-feature-completion-${PACKAGE_VERSION}.json`], 'pass'),
|
|
98
|
+
'cli-init': fixture('execute', 'sks init --local-only --dry-run', [], 'pass'),
|
|
99
|
+
'cli-eval': fixture('execute', 'sks eval run --mock --json', [], 'pass'),
|
|
100
|
+
'cli-harness': fixture('execute', 'sks harness fixture --mock --json', [], 'pass'),
|
|
101
|
+
'cli-naruto': fixture('execute_and_validate_artifacts', 'sks naruto run "fixture" --backend fake --work-items 4 --json', ['completion-proof.json', 'naruto-gate.json'], 'pass'),
|
|
102
|
+
'cli-team': fixture('execute_and_validate_artifacts', 'sks team "fixture" --mock --clones 4 --backend fake --work-items 4 --json', ['naruto-gate.json', 'team-alias-to-naruto.json'], 'pass'),
|
|
103
|
+
'cli-reasoning': fixture('execute', 'sks reasoning status --json', [], 'pass'),
|
|
104
|
+
'cli-profile': fixture('execute', 'sks profile status --json', [], 'pass'),
|
|
105
|
+
'skill-db-safety-guard': fixture('execute_and_validate_artifacts', 'sks db check --sql "SELECT 1" --json', ['db-operation-report.json', 'completion-proof.json'], 'pass'),
|
|
106
|
+
'skill-honest-mode': fixture('execute_and_validate_artifacts', 'sks proof smoke --json', ['completion-proof.json', 'trust-report.json'], 'pass'),
|
|
107
|
+
'skill-imagegen': fixture('execute_and_validate_artifacts', 'sks image-ux-review fixture --mock --json', ['image-ux-generated-review-ledger.json', 'image-voxel-ledger.json'], 'pass'),
|
|
108
|
+
'ux-review:run-wires-imagegen': fixture('execute_and_validate_artifacts', 'npm run ux-review:run-wires-imagegen --silent', [{ path: 'image-ux-review-gate.json', schema: 'sks.image-ux-review-gate.v2', optional: true }], 'pass', {
|
|
109
|
+
validates_source_contracts: ['requireCodexImagegen', 'generateGptImage2CalloutReview', 'evidence_class', 'output_sha256']
|
|
110
|
+
}),
|
|
111
|
+
'ppt:real-imagegen-wiring': fixture('execute_and_validate_artifacts', 'npm run ppt:real-imagegen-wiring --silent', [{ path: 'ppt-imagegen-review-gate.json', schema: 'sks.ppt-imagegen-review-gate.v1', optional: true }], 'pass', {
|
|
112
|
+
validates_source_contracts: ['generateGptImage2CalloutReview', 'buildSlideImagegenEvidence', 'imagegen_evidence']
|
|
113
|
+
}),
|
|
114
|
+
'skill-gx-visual-validate': fixture('execute_and_validate_artifacts', 'sks gx validate fixture --mock --json', ['gx-validation.json'], 'pass'),
|
|
98
115
|
'skill-context7-docs': fixture('real_optional', 'sks context7 check --json', [], 'pass'),
|
|
99
|
-
'skill-seo-geo-optimizer': fixture('
|
|
116
|
+
'skill-seo-geo-optimizer': fixture('execute_and_validate_artifacts', 'sks seo-geo-optimizer fixture --mode geo --json', ['search-visibility/site-inventory.json', 'search-visibility/geo-findings.json', 'geo-gate.json', 'completion-proof.json'], 'pass'),
|
|
100
117
|
'cli-proof': fixture('execute_and_validate_artifacts', 'sks proof smoke --json', ['.sneakoscope/proof/latest.json'], 'pass'),
|
|
101
118
|
'cli-trust': fixture('execute_and_validate_artifacts', 'sks trust report latest --json', ['trust-report.json'], 'pass'),
|
|
102
119
|
'cli-wrongness': fixture('execute_and_validate_artifacts', 'sks wrongness add --kind missing_evidence --claim "fixture wrongness" --json', ['.sneakoscope/wiki/wrongness-ledger.json'], 'pass'),
|
|
103
120
|
'route-team': fixture('execute_and_validate_artifacts', 'sks team "fixture" --mock --clones 4 --backend fake --work-items 4 --json', ['naruto-gate.json', 'team-alias-to-naruto.json'], 'pass'),
|
|
104
121
|
'route-team-alias': fixture('execute_and_validate_artifacts', 'sks team "fixture" --mock --clones 4 --backend fake --work-items 4 --json', ['naruto-gate.json', 'team-alias-to-naruto.json'], 'pass'),
|
|
105
122
|
'route-naruto': fixture('execute_and_validate_artifacts', 'sks naruto run "fixture" --clones 4 --backend fake --work-items 4 --json', ['agents/agent-proof-evidence.json', 'agents/agent-scheduler-state.json'], 'pass'),
|
|
123
|
+
'route-work': fixture('execute_and_validate_artifacts', 'sks naruto run "fixture" --backend fake --work-items 4 --json', ['completion-proof.json', 'naruto-gate.json'], 'pass'),
|
|
124
|
+
'route-swarm': fixture('execute_and_validate_artifacts', 'sks naruto run "fixture" --backend fake --work-items 4 --json', ['completion-proof.json', 'naruto-gate.json'], 'pass'),
|
|
125
|
+
'route-plan': fixture('execute', 'sks plan "fixture" --json', [], 'pass'),
|
|
126
|
+
'route-review': fixture('execute', 'sks review --diff HEAD --json', [], 'pass'),
|
|
106
127
|
'route-shadowclone': fixture('mock', '$ShadowClone alias of $Naruto shadow-clone swarm route', [], 'pass'),
|
|
107
128
|
'route-kagebunshin': fixture('mock', '$Kagebunshin alias of $Naruto shadow-clone swarm route', [], 'pass'),
|
|
108
129
|
'route-qa-loop': fixture('execute_and_validate_artifacts', 'sks qa-loop run latest --mock --json', ['completion-proof.json', 'qa-gate.json'], 'pass'),
|
|
@@ -120,11 +141,11 @@ const FIXTURES = Object.freeze({
|
|
|
120
141
|
'route-ultrasearch': fixture('execute', 'sks run "$UltraSearch source intelligence fixture" --execute --json', [], 'pass'),
|
|
121
142
|
'route-seo-geo-optimizer': fixture('execute_and_validate_artifacts', 'sks seo-geo-optimizer fixture --mode geo --json', ['search-visibility/site-inventory.json', 'search-visibility/geo-findings.json', 'search-visibility/verification-report.json', 'geo-gate.json', 'completion-proof.json'], 'pass'),
|
|
122
143
|
'route-autoresearch': fixture('mock', '$AutoResearch fixture route', ['research-gate.json', 'completion-proof.json'], 'pass'),
|
|
123
|
-
'route-mad-sks': fixture('mock', '$MAD-SKS permission gate route', ['mad-sks-gate.json', 'completion-proof.json'], 'pass'),
|
|
144
|
+
'route-mad-sks': fixture('mock', '$MAD-SKS permission gate + sql_plane route', [{ path: 'mad-sks-gate.json', schema: 'sks.mad-sks-gate.v1' }, 'completion-proof.json'], 'pass'),
|
|
124
145
|
'route-from-chat-img': fixture('mock', '$From-Chat-IMG visual work order route', ['from-chat-img-work-order.md', 'image-voxel-ledger.json', 'completion-proof.json'], 'pass'),
|
|
125
146
|
'route-ux-review': fixture('mock', '$UX-Review image UX alias route', ['image-ux-generated-review-ledger.json', 'image-voxel-ledger.json'], 'pass'),
|
|
126
147
|
'route-db': fixture('execute_and_validate_artifacts', 'sks db check --sql "SELECT 1" --json', ['completion-proof.json', 'db-operation-report.json'], 'pass'),
|
|
127
|
-
'route-mad-db': fixture('mock', '$MAD-DB
|
|
148
|
+
'route-mad-db': fixture('mock', '$MAD-DB deprecated alias to $MAD-SKS sql-plane contract', ['mad-sks-gate.json', 'completion-proof.json'], 'pass'),
|
|
128
149
|
'route-wiki': fixture('execute_and_validate_artifacts', 'sks wiki image-ingest test/fixtures/images/one-by-one.png --json', [{ path: 'completion-proof.json', schema: 'sks.completion-proof.v1' }, { path: 'image-voxel-ledger.json', schema: 'sks.image-voxel-ledger.v1' }], 'pass'),
|
|
129
150
|
'route-gx': fixture('execute_and_validate_artifacts', 'sks gx validate fixture --mock --json', ['completion-proof.json', { path: 'image-voxel-ledger.json', schema: 'sks.image-voxel-ledger.v1' }, 'gx-validation.json'], 'pass'),
|
|
130
151
|
'route-sks': fixture('mock', '$SKS control-surface route', ['completion-proof.json'], 'pass'),
|
|
@@ -249,7 +270,7 @@ function qualityForKind(kind) {
|
|
|
249
270
|
if (kind === 'execute' || kind === 'execute_and_validate_artifacts')
|
|
250
271
|
return 'runtime_verified';
|
|
251
272
|
if (kind === 'mock')
|
|
252
|
-
return '
|
|
273
|
+
return 'wiring_only';
|
|
253
274
|
if (kind === 'real_optional')
|
|
254
275
|
return 'integration_optional';
|
|
255
276
|
if (kind === 'not_available')
|