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
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
// @ts-nocheck
|
|
3
|
-
import fs from 'node:fs';
|
|
4
|
-
import os from 'node:os';
|
|
5
|
-
import path from 'node:path';
|
|
6
|
-
import { assertGate, emitGate, importDist } from './sks-1-18-gate-lib.js';
|
|
7
|
-
const research = await importDist('core/research.js');
|
|
8
|
-
const reviewer = await importDist('core/research/research-final-reviewer.js');
|
|
9
|
-
const fsx = await importDist('core/fsx.js');
|
|
10
|
-
const badDir = fs.mkdtempSync(path.join(os.tmpdir(), 'sks-research-final-review-bad-'));
|
|
11
|
-
await research.writeResearchPlan(badDir, 'bad final reviewer fixture', { missionId: 'M-FINAL-BAD' });
|
|
12
|
-
await fsx.writeTextAtomic(path.join(badDir, 'research-report.md'), '# Bad\n\nToo short.\n');
|
|
13
|
-
const bad = await reviewer.runResearchFinalReviewer(badDir, { codexRequired: true });
|
|
14
|
-
assertGate(bad.approved === false, 'static failure must not approve final review', bad);
|
|
15
|
-
const templateDir = fs.mkdtempSync(path.join(os.tmpdir(), 'sks-research-final-review-template-'));
|
|
16
|
-
const templatePlan = await research.writeResearchPlan(templateDir, 'template final reviewer fixture', { missionId: 'M-FINAL-TEMPLATE' });
|
|
17
|
-
await research.writeMockResearchResult(templateDir, templatePlan);
|
|
18
|
-
await fsx.writeTextAtomic(path.join(templateDir, 'research-report.md'), [
|
|
19
|
-
'# SKS Research Report',
|
|
20
|
-
'',
|
|
21
|
-
'## Question',
|
|
22
|
-
'Runtime evidence note: This paragraph exists to make report quality measurable.',
|
|
23
|
-
'',
|
|
24
|
-
'## Methodology',
|
|
25
|
-
'Runtime evidence note: This paragraph exists to make report quality measurable.',
|
|
26
|
-
'',
|
|
27
|
-
'## Source Map',
|
|
28
|
-
'mock-source-1 mock-source-2 mock-source-3 mock-source-4 mock-source-5 mock-source-6 mock-source-7 mock-source-8.',
|
|
29
|
-
'',
|
|
30
|
-
'## Key Claims',
|
|
31
|
-
'- mock-claim-1 cites mock-source-1 and mock-counter-1.',
|
|
32
|
-
'',
|
|
33
|
-
'## Evidence Matrix Summary',
|
|
34
|
-
Array.from({ length: 36 }, () => 'Runtime evidence note: This paragraph exists to make report quality measurable while deterministic fixture text repeats the same sentence for mock-claim-1 using mock-source-1 and mock-counter-1.').join('\n\n'),
|
|
35
|
-
'',
|
|
36
|
-
'## Counterevidence',
|
|
37
|
-
'mock-counter-1 and mock-counter-2 challenge the report.',
|
|
38
|
-
'',
|
|
39
|
-
'## Falsification',
|
|
40
|
-
'Runtime evidence note: This paragraph exists to make report quality measurable.',
|
|
41
|
-
'',
|
|
42
|
-
'## Implementation Blueprint',
|
|
43
|
-
'Runtime evidence note: This paragraph exists to make report quality measurable.',
|
|
44
|
-
'',
|
|
45
|
-
'## Experiment / Validation Plan',
|
|
46
|
-
'Runtime evidence note: This paragraph exists to make report quality measurable.',
|
|
47
|
-
'',
|
|
48
|
-
'## Limitations',
|
|
49
|
-
'Runtime evidence note: This paragraph exists to make report quality measurable.',
|
|
50
|
-
'',
|
|
51
|
-
'## References',
|
|
52
|
-
'- mock-source-1',
|
|
53
|
-
'- mock-counter-1'
|
|
54
|
-
].join('\n\n'));
|
|
55
|
-
await fsx.rmrf(path.join(templateDir, 'research-final-review.codex.json'));
|
|
56
|
-
const template = await reviewer.runResearchFinalReviewer(templateDir, { codexRequired: true });
|
|
57
|
-
assertGate(template.approved === false, 'template/repeated report must not approve final review', template);
|
|
58
|
-
assertGate((template.blockers || []).some((reason) => String(reason).includes('research_report_repeated_paragraphs') || String(reason).includes('research_report_template_phrase_hit')), 'template blockers must include repetition/template reasons', template);
|
|
59
|
-
const goodDir = fs.mkdtempSync(path.join(os.tmpdir(), 'sks-research-final-review-good-'));
|
|
60
|
-
const plan = await research.writeResearchPlan(goodDir, 'good final reviewer fixture', { missionId: 'M-FINAL-GOOD' });
|
|
61
|
-
await research.writeMockResearchResult(goodDir, plan);
|
|
62
|
-
const good = JSON.parse(fs.readFileSync(path.join(goodDir, 'research-final-review.json'), 'utf8'));
|
|
63
|
-
assertGate(good.approved === true, 'complete package must approve final review with mock Codex reviewer', good);
|
|
64
|
-
assertGate(good.codex_review?.verdict === 'approve', 'merged final review must include Codex/mock approval', good);
|
|
65
|
-
assertGate(good.codex_review?.template_like_prose === false, 'mock Codex review must preserve template_like_prose=false', good);
|
|
66
|
-
assertGate(good.codex_review?.source_density_ok === true, 'mock Codex review must preserve source_density_ok=true', good);
|
|
67
|
-
assertGate(good.codex_review?.implementation_concreteness_ok === true, 'mock Codex review must preserve implementation_concreteness_ok=true', good);
|
|
68
|
-
assertGate(good.codex_review?.evidence_bound_synthesis_ok === true, 'mock Codex review must preserve evidence_bound_synthesis_ok=true', good);
|
|
69
|
-
emitGate('research:final-reviewer-blackbox', { bad_dir: badDir, template_dir: templateDir, good_dir: goodDir });
|
|
70
|
-
//# sourceMappingURL=research-final-reviewer-blackbox.js.map
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
// @ts-nocheck
|
|
3
|
-
import fs from 'node:fs';
|
|
4
|
-
import os from 'node:os';
|
|
5
|
-
import path from 'node:path';
|
|
6
|
-
import { assertGate, emitGate, importDist } from './sks-1-18-gate-lib.js';
|
|
7
|
-
const research = await importDist('core/research.js');
|
|
8
|
-
const workGraph = await importDist('core/research/research-work-graph.js');
|
|
9
|
-
const cycleRunner = await importDist('core/research/research-cycle-runner.js');
|
|
10
|
-
const quality = await importDist('core/research/research-report-quality.js');
|
|
11
|
-
const dir = fs.mkdtempSync(path.join(os.tmpdir(), 'sks-research-stage-cycle-'));
|
|
12
|
-
const plan = await research.writeResearchPlan(dir, 'stage cycle runtime blackbox', { missionId: 'M-STAGE-RUNTIME' });
|
|
13
|
-
const graph = workGraph.buildResearchWorkGraph(plan);
|
|
14
|
-
const result = await cycleRunner.runResearchCycle({ root: process.cwd(), dir, plan, graph, cycle: 1, backend: 'mock', timeoutMs: 120000, maxParallelStages: 4, mock: true });
|
|
15
|
-
const shardDir = path.join(dir, 'research', 'cycle-1', 'source-shards');
|
|
16
|
-
const shardFiles = fs.readdirSync(shardDir).filter((file) => file.endsWith('.json'));
|
|
17
|
-
const sourceLedger = JSON.parse(fs.readFileSync(path.join(dir, 'source-ledger.json'), 'utf8'));
|
|
18
|
-
const sourceQuality = JSON.parse(fs.readFileSync(path.join(dir, 'source-quality-report.json'), 'utf8'));
|
|
19
|
-
const claimMatrix = JSON.parse(fs.readFileSync(path.join(dir, 'claim-evidence-matrix.json'), 'utf8'));
|
|
20
|
-
const blueprint = JSON.parse(fs.readFileSync(path.join(dir, 'implementation-blueprint.json'), 'utf8'));
|
|
21
|
-
const finalReview = JSON.parse(fs.readFileSync(path.join(dir, 'research-final-review.json'), 'utf8'));
|
|
22
|
-
const reportQuality = quality.analyzeResearchReportQuality(fs.readFileSync(path.join(dir, 'research-report.md'), 'utf8'));
|
|
23
|
-
const cycleRecord = JSON.parse(fs.readFileSync(path.join(dir, 'research-cycle-runner.json'), 'utf8'));
|
|
24
|
-
assertGate(result.status === 'passed', 'mock stage cycle must pass', result);
|
|
25
|
-
assertGate(shardFiles.length >= 8, 'source shard outputs must exist', { shardFiles });
|
|
26
|
-
assertGate(fs.existsSync(path.join(dir, 'source-ledger.json')), 'source-ledger merge must exist');
|
|
27
|
-
assertGate(sourceLedger.sources.length + sourceLedger.counterevidence_sources.length >= 12, 'source-ledger must include at least 12 sources', sourceLedger);
|
|
28
|
-
assertGate(sourceQuality.ok === true, 'source-quality-report must pass', sourceQuality);
|
|
29
|
-
assertGate(fs.existsSync(path.join(dir, 'claim-evidence-matrix.json')), 'claim matrix must exist');
|
|
30
|
-
assertGate(claimMatrix.key_claim_ids.length >= 8, 'claim matrix must include at least 8 key claims', claimMatrix);
|
|
31
|
-
assertGate(fs.existsSync(path.join(dir, 'implementation-blueprint.json')), 'blueprint must exist');
|
|
32
|
-
assertGate(blueprint.repository_aware === true, 'blueprint must be repository aware', blueprint);
|
|
33
|
-
assertGate(fs.existsSync(path.join(dir, 'research-synthesis-output.json')), 'synthesis output must exist');
|
|
34
|
-
assertGate(reportQuality.ok === true, 'research report must pass repetition detector and density checks', reportQuality);
|
|
35
|
-
assertGate(fs.existsSync(path.join(dir, 'research-final-review.json')), 'final review must exist');
|
|
36
|
-
assertGate(finalReview.approved === true, 'final review must approve complete mock cycle', finalReview);
|
|
37
|
-
assertGate(result.parallelism?.max_observed_parallel >= 2, 'source shards must execute with observed parallelism', result.parallelism);
|
|
38
|
-
assertGate(cycleRecord.legacy_final_md_loop === false, 'stage cycle must not use legacy final.md loop', cycleRecord);
|
|
39
|
-
emitGate('research:stage-cycle-runtime-blackbox', { dir, parallelism: result.parallelism, shard_count: shardFiles.length, report_quality: reportQuality });
|
|
40
|
-
//# sourceMappingURL=research-stage-cycle-runtime-blackbox.js.map
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
// @ts-nocheck
|
|
3
|
-
import fs from 'node:fs';
|
|
4
|
-
import os from 'node:os';
|
|
5
|
-
import path from 'node:path';
|
|
6
|
-
import { assertGate, emitGate, importDist } from './sks-1-18-gate-lib.js';
|
|
7
|
-
const research = await importDist('core/research.js');
|
|
8
|
-
const workGraph = await importDist('core/research/research-work-graph.js');
|
|
9
|
-
const cycleRunner = await importDist('core/research/research-cycle-runner.js');
|
|
10
|
-
const quality = await importDist('core/research/research-report-quality.js');
|
|
11
|
-
const dir = fs.mkdtempSync(path.join(os.tmpdir(), 'sks-research-synthesis-blackbox-'));
|
|
12
|
-
const plan = await research.writeResearchPlan(dir, 'synthesis writer blackbox', { missionId: 'M-SYNTHESIS-BLACKBOX' });
|
|
13
|
-
const graph = workGraph.buildResearchWorkGraph(plan);
|
|
14
|
-
const result = await cycleRunner.runResearchCycle({ root: process.cwd(), dir, plan, graph, cycle: 1, backend: 'mock', timeoutMs: 120000, maxParallelStages: 6, mock: true });
|
|
15
|
-
const synthesis = JSON.parse(fs.readFileSync(path.join(dir, 'research-synthesis-output.json'), 'utf8'));
|
|
16
|
-
const reportText = fs.readFileSync(path.join(dir, 'research-report.md'), 'utf8');
|
|
17
|
-
const reportQuality = quality.analyzeResearchReportQuality(reportText);
|
|
18
|
-
assertGate(result.status === 'passed', 'mock research cycle must pass synthesis blackbox', result);
|
|
19
|
-
assertGate(synthesis.schema === 'sks.research-synthesis-output.v1', 'synthesis output artifact must use v1 schema', synthesis);
|
|
20
|
-
assertGate(synthesis.quality_signals.report_word_count >= 2200, 'synthesis output must meet report word floor', synthesis.quality_signals);
|
|
21
|
-
assertGate(synthesis.quality_signals.unique_source_ids_cited >= 8, 'synthesis output must cite at least 8 unique source ids', synthesis.quality_signals);
|
|
22
|
-
assertGate(reportQuality.ok === true, 'blackbox report must pass report quality', reportQuality);
|
|
23
|
-
emitGate('research:synthesis-writer-blackbox', { dir, synthesis: synthesis.quality_signals, parallelism: result.parallelism });
|
|
24
|
-
//# sourceMappingURL=research-synthesis-writer-blackbox.js.map
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
// @ts-nocheck
|
|
3
|
-
import fs from 'node:fs';
|
|
4
|
-
import { assertGate, emitGate, root } from './sks-1-18-gate-lib.js';
|
|
5
|
-
import path from 'node:path';
|
|
6
|
-
const lib = fs.readFileSync(path.join(root, 'src', 'scripts', 'agent-route-blackbox-lib.ts'), 'utf8');
|
|
7
|
-
const proof = fs.readFileSync(path.join(root, 'src', 'core', 'agents', 'agent-proof-evidence.ts'), 'utf8');
|
|
8
|
-
const packageJson = JSON.parse(fs.readFileSync(path.join(root, 'package.json'), 'utf8'));
|
|
9
|
-
for (const token of ['runActualAgentBackfillBlackbox', 'runActualTeamBackfillBlackbox', 'runActualResearchBackfillBlackbox', 'runActualQaBackfillBlackbox']) {
|
|
10
|
-
assertGate(lib.includes(token), `route blackbox helper missing ${token}`);
|
|
11
|
-
}
|
|
12
|
-
for (const token of ['actual_agent_command', 'actual_team_command', 'actual_research_command', 'actual_qa_command']) {
|
|
13
|
-
assertGate(lib.includes(token), `route blackbox helper missing exact kind ${token}`);
|
|
14
|
-
}
|
|
15
|
-
assertGate(proof.includes('non_agent_route_used_generic_agent_run_route_standin'), 'proof must block non-agent route stand-ins');
|
|
16
|
-
assertGate(proof.includes('real_route_command_used'), 'proof must record real_route_command_used');
|
|
17
|
-
assertGate(Boolean(packageJson.scripts['dfix:fixture']), 'DFix route fixture gate must exist');
|
|
18
|
-
assertGate(Boolean(packageJson.scripts['ppt:full-e2e-blackbox']), 'PPT route blackbox gate must exist');
|
|
19
|
-
assertGate(Boolean(packageJson.scripts['ux-review:imagegen-blackbox']), 'UX route blackbox gate must exist');
|
|
20
|
-
emitGate('route:blackbox-realism', { actual_route_helpers: 4, standin_blocker: true });
|
|
21
|
-
//# sourceMappingURL=route-blackbox-realism-check.js.map
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import fs from 'node:fs/promises';
|
|
2
|
-
import path from 'node:path';
|
|
3
|
-
import { assertGate, emitGate, makeTempRoot, writeText } from './sks-3-1-8-check-lib.js';
|
|
4
|
-
import { importDist } from './sks-1-18-gate-lib.js';
|
|
5
|
-
const tmp = await makeTempRoot('sks-scheduler-claim-');
|
|
6
|
-
await writeText(path.join(tmp, 'package.json'), JSON.stringify({ version: '4.0.2', scripts: { 'secret:one': 'node -e "setTimeout(()=>process.exit(0),20)"', 'zellij:one': 'node -e "setTimeout(()=>process.exit(0),20)"' } }, null, 2));
|
|
7
|
-
await writeText(path.join(tmp, 'package-lock.json'), JSON.stringify({ lockfileVersion: 3 }, null, 2));
|
|
8
|
-
await writeText(path.join(tmp, 'release-gates.v2.json'), JSON.stringify({ schema: 'sks.release-gates.v2', gates: [gate('secret:one', ['secret-sensitive']), gate('zellij:one', ['zellij-real'])] }, null, 2));
|
|
9
|
-
const scheduler = await importDist('core/release/extreme-parallel-scheduler.js');
|
|
10
|
-
const report = await scheduler.executeExtremeSchedule({
|
|
11
|
-
root: tmp,
|
|
12
|
-
graph: { schema: 'sks.triwiki-affected-graph.v1', root: tmp, tier: 'confidence', changed_files: [], affected_modules: [], gate_packs: ['secret', 'zellij'], gates: ['secret:one', 'zellij:one'], release_equivalent_within_scope: true, confidence: 'affected-release-equivalent', conservative_reason: null, reused_proofs: [], invalidated_proofs: [], required_new_proofs: [] },
|
|
13
|
-
slaMs: 30_000,
|
|
14
|
-
budget: { schema: 'sks.resource-class-budget.v1', cpu_light: 4, cpu_heavy: 1, io_light: 4, io_heavy: 1, fs_read: 4, network: 1, remote_model_real: 1, zellij_real: 1, browser_real: 1, secret_sensitive: 1 },
|
|
15
|
-
useProofBank: false
|
|
16
|
-
});
|
|
17
|
-
const timeline = JSON.parse(await fs.readFile(report.resource_claim_timeline, 'utf8'));
|
|
18
|
-
assertGate(report.ok === true && report.executed_packs.length === 2, 'scheduler must execute selected packs', report);
|
|
19
|
-
assertGate(timeline.events.some((event) => event.event === 'claim') && timeline.events.some((event) => event.event === 'release'), 'scheduler must write claim/release timeline', timeline);
|
|
20
|
-
emitGate('scheduler:resource-claim-blackbox', { packs: report.executed_packs.length, timeline: timeline.events.length });
|
|
21
|
-
function gate(id, resource) {
|
|
22
|
-
return { id, command: `npm run ${id} --silent`, deps: [], resource, side_effect: 'hermetic', timeout_ms: 5000, cache: { enabled: false, inputs: ['package.json'] }, isolation: { home: 'temp', codex_home: 'temp', report_dir: 'per-gate' }, preset: ['release'] };
|
|
23
|
-
}
|
|
24
|
-
//# sourceMappingURL=scheduler-resource-claim-blackbox.js.map
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
// @ts-nocheck
|
|
3
|
-
import { assertGate, emitGate, runSks, runSksJson } from './search-visibility-gate-lib.js';
|
|
4
|
-
const commands = runSksJson(['commands', '--json']).json;
|
|
5
|
-
assertGate(commands.commands.some((row) => row.name === 'seo-geo-optimizer' && /unified SEO\/GEO optimizer/i.test(row.description)), 'commands --json must expose seo-geo-optimizer');
|
|
6
|
-
assertGate(!commands.commands.some((row) => row.name === 'seo' || row.name === 'geo'), 'commands --json must not expose split seo/geo command surfaces');
|
|
7
|
-
const optimizerUsage = runSks(['usage', 'seo-geo-optimizer']);
|
|
8
|
-
assertGate(/sks seo-geo-optimizer \[seo\|geo\] doctor\|audit\|plan\|apply\|verify\|status\|rollback\|fixture/.test(optimizerUsage.stdout), 'usage seo-geo-optimizer must expose unified lifecycle');
|
|
9
|
-
const doctor = runSksJson(['seo-geo-optimizer', 'doctor', '--mode', 'seo', '--json']).json;
|
|
10
|
-
assertGate(doctor.route === '$SEO-GEO-OPTIMIZER' && doctor.schema === 'sks.search-visibility.doctor-command.v1', 'optimizer seo doctor must preserve unified route identity', doctor);
|
|
11
|
-
const invalid = runSks(['seo-geo-optimizer', 'nonsense-subcommand'], { allowFailure: true });
|
|
12
|
-
assertGate(invalid.status === 2 && /Usage: sks seo-geo-optimizer/.test(invalid.stderr), 'invalid optimizer subcommand must exit 2 with usage', {
|
|
13
|
-
status: invalid.status,
|
|
14
|
-
stdout: invalid.stdout,
|
|
15
|
-
stderr: invalid.stderr,
|
|
16
|
-
});
|
|
17
|
-
emitGate('seo:cli-blackbox', { adapter: doctor.adapter, confidence: doctor.confidence });
|
|
18
|
-
//# sourceMappingURL=seo-cli-blackbox-check.js.map
|
|
@@ -1,116 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import fs from 'node:fs/promises';
|
|
3
|
-
import path from 'node:path';
|
|
4
|
-
import { root as repoRoot } from './sks-1-18-gate-lib.js';
|
|
5
|
-
import { assertGate, emitGate, makeTempRoot, writeManagedCoreSkill, writeText, writeUserSkill } from './sks-3-1-8-check-lib.js';
|
|
6
|
-
import { syncCoreSkillsIntegrity } from '../core/codex-native/core-skill-integrity.js';
|
|
7
|
-
import { dedupeProjectSkills } from '../core/codex-native/project-skill-dedupe.js';
|
|
8
|
-
import { repairNativeCapabilities } from '../core/codex-native/native-capability-repair.js';
|
|
9
|
-
import { withSecretPreservationGuard } from '../core/config/secret-preservation.js';
|
|
10
|
-
import { runProcess } from '../core/fsx.js';
|
|
11
|
-
import { buildReleaseGateScriptParityReport } from './release-gate-script-parity-check.js';
|
|
12
|
-
const root = await makeTempRoot('sks-3110-all-feature-');
|
|
13
|
-
process.env.CODEX_HOME = path.join(root, 'codex-home');
|
|
14
|
-
const parity = buildReleaseGateScriptParityReport();
|
|
15
|
-
const coreA = await syncCoreSkillsIntegrity({ root, apply: true });
|
|
16
|
-
const coreB = await syncCoreSkillsIntegrity({ root, apply: true });
|
|
17
|
-
const loopPath = path.join(root, '.agents', 'skills', 'loop', 'SKILL.md');
|
|
18
|
-
await fs.appendFile(loopPath, '\ncorruption\n', 'utf8');
|
|
19
|
-
const coreC = await syncCoreSkillsIntegrity({ root, apply: true });
|
|
20
|
-
await writeManagedCoreSkill(root, '.codex/skills', 'loop');
|
|
21
|
-
const dedupeA = await dedupeProjectSkills({ root, fix: true, yes: true });
|
|
22
|
-
await writeUserSkill(root, '.agents/skills', 'user-loop-a', 'Loop');
|
|
23
|
-
await writeUserSkill(root, '.codex/skills', 'user-loop-b', 'loop');
|
|
24
|
-
const dedupeB = await dedupeProjectSkills({ root, fix: true, yes: false });
|
|
25
|
-
const dedupeC = await dedupeProjectSkills({ root, fix: true, yes: true, quarantineUserDuplicates: true });
|
|
26
|
-
process.env.SKS_CHROME_EXTENSION_READY = '1';
|
|
27
|
-
process.env.SKS_COMPUTER_USE_CAPABILITY = 'verified';
|
|
28
|
-
const repairable = await repairNativeCapabilities({ root, fix: true, yes: true, fixture: 'all-repairable' });
|
|
29
|
-
delete process.env.SKS_CHROME_EXTENSION_READY;
|
|
30
|
-
delete process.env.SKS_COMPUTER_USE_CAPABILITY;
|
|
31
|
-
const manual = await repairNativeCapabilities({ root, fix: true, yes: true, fixture: 'manual-required' });
|
|
32
|
-
const envFile = path.join(root, '.env.local');
|
|
33
|
-
await writeText(envFile, 'NEXT_PUBLIC_SUPABASE_ANON_KEY=all-feature-secret\nSUPABASE_SERVICE_ROLE_KEY=service-secret\n');
|
|
34
|
-
const deleteSecretGuard = await expectSecretGuardRestored('delete-secret-fixture', async () => {
|
|
35
|
-
await fs.writeFile(envFile, 'NEXT_PUBLIC_SUPABASE_ANON_KEY=all-feature-secret\n', 'utf8');
|
|
36
|
-
});
|
|
37
|
-
let text = await fs.readFile(envFile, 'utf8');
|
|
38
|
-
assertGate(text.includes('SUPABASE_SERVICE_ROLE_KEY=service-secret'), 'delete fixture must restore missing Supabase service key', text);
|
|
39
|
-
assertGate(deleteSecretGuard.includes('SUPABASE_SERVICE_ROLE_KEY:missing'), 'delete fixture must report restored missing service key', deleteSecretGuard);
|
|
40
|
-
const changeSecretGuard = await expectSecretGuardRestored('change-secret-fixture', async () => {
|
|
41
|
-
await fs.writeFile(envFile, 'NEXT_PUBLIC_SUPABASE_ANON_KEY=changed\nSUPABASE_SERVICE_ROLE_KEY=service-secret\n', 'utf8');
|
|
42
|
-
});
|
|
43
|
-
text = await fs.readFile(envFile, 'utf8');
|
|
44
|
-
assertGate(text.includes('NEXT_PUBLIC_SUPABASE_ANON_KEY=all-feature-secret'), 'change fixture must rollback Supabase anon key mutation', text);
|
|
45
|
-
assertGate(changeSecretGuard.includes('NEXT_PUBLIC_SUPABASE_ANON_KEY:changed'), 'change fixture must report restored changed anon key', changeSecretGuard);
|
|
46
|
-
const doctorRoot = await makeTempRoot('sks-3110-doctor-fix-');
|
|
47
|
-
await writeText(path.join(doctorRoot, 'package.json'), '{"name":"sks-3110-doctor-fixture","private":true}\n');
|
|
48
|
-
await writeText(path.join(doctorRoot, '.env.local'), 'NEXT_PUBLIC_SUPABASE_ANON_KEY=doctor-secret\n');
|
|
49
|
-
const fixtureBin = path.join(doctorRoot, 'codex-fixture');
|
|
50
|
-
await writeText(fixtureBin, '#!/usr/bin/env node\nconsole.log(JSON.stringify({ checks: { fixture: { category: "runtime", status: "ok" } } }));\n');
|
|
51
|
-
await fs.chmod(fixtureBin, 0o755);
|
|
52
|
-
const doctor = await runProcess(process.execPath, [
|
|
53
|
-
path.join(repoRoot, 'dist', 'bin', 'sks.js'),
|
|
54
|
-
'doctor',
|
|
55
|
-
'--fix',
|
|
56
|
-
'--local-only',
|
|
57
|
-
'--yes',
|
|
58
|
-
'--json',
|
|
59
|
-
'--codex-bin',
|
|
60
|
-
fixtureBin
|
|
61
|
-
], {
|
|
62
|
-
cwd: doctorRoot,
|
|
63
|
-
env: {
|
|
64
|
-
HOME: path.join(doctorRoot, 'home'),
|
|
65
|
-
CODEX_HOME: path.join(doctorRoot, 'codex-home'),
|
|
66
|
-
SKS_GLOBAL_ROOT: path.join(doctorRoot, 'global-sks'),
|
|
67
|
-
SKS_CHROME_EXTENSION_READY: '1',
|
|
68
|
-
SKS_COMPUTER_USE_CAPABILITY: 'verified'
|
|
69
|
-
},
|
|
70
|
-
timeoutMs: 120_000,
|
|
71
|
-
maxOutputBytes: 512 * 1024
|
|
72
|
-
});
|
|
73
|
-
const doctorGuardReport = JSON.parse(await fs.readFile(path.join(doctorRoot, '.sneakoscope', 'reports', 'secret-preservation-guard.json'), 'utf8'));
|
|
74
|
-
const guardReport = JSON.parse(await fs.readFile(path.join(root, '.sneakoscope', 'reports', 'secret-preservation-guard.json'), 'utf8'));
|
|
75
|
-
const reportText = JSON.stringify(await readReports(path.join(root, '.sneakoscope', 'reports')));
|
|
76
|
-
assertGate(parity.ok === true, 'release gate/script/dist parity must pass inside all-feature regression', parity);
|
|
77
|
-
assertGate(coreA.installed_count > 0, 'core skills must install in temp root', coreA);
|
|
78
|
-
assertGate(coreB.installed_count === 0 && coreB.restored_count === 0, 'second core sync must be idempotent', coreB);
|
|
79
|
-
assertGate(coreC.restored_count > 0, 'corrupt managed core skill must restore', coreC);
|
|
80
|
-
assertGate(dedupeA.actions.some((action) => action.action === 'quarantined'), 'managed duplicate must quarantine', dedupeA);
|
|
81
|
-
assertGate(dedupeB.blockers.some((blocker) => blocker.includes('user_duplicate_requires_confirmation')), 'unconfirmed user duplicate must be manual_required', dedupeB);
|
|
82
|
-
assertGate(dedupeC.active_unique_by_canonical_name === true, 'confirmed user duplicate quarantine must restore active uniqueness', dedupeC);
|
|
83
|
-
assertGate(repairable.ok === true, 'all-repairable native fixture must pass postcheck', repairable);
|
|
84
|
-
assertGate(manual.capabilities.some((state) => state.repairability === 'manual-required' && state.after !== 'verified'), 'manual native fixture must not false-verify', manual);
|
|
85
|
-
assertGate(guardReport.rollback_attempted === true && guardReport.rollback_ok === true, 'secret guard must record rollback success', guardReport);
|
|
86
|
-
assertGate(!reportText.includes('all-feature-secret') && !reportText.includes('service-secret'), 'reports must not contain raw secret literals');
|
|
87
|
-
assertGate(doctor.code === 0 || doctor.code === 1, 'doctor --fix fixture must complete with a bounded readiness exit code under secret guard', { code: doctor.code, stdout: doctor.stdout.slice(-2000), stderr: doctor.stderr.slice(-2000) });
|
|
88
|
-
assertGate(doctor.stdout.includes('"schema"') && doctor.stdout.includes('"command_aliases"'), 'doctor --fix fixture must emit structured doctor output', doctor.stdout.slice(-2000));
|
|
89
|
-
assertGate(doctorGuardReport.ok === true && doctorGuardReport.raw_values_recorded === false, 'doctor --fix guard report must be sanitized and successful', doctorGuardReport);
|
|
90
|
-
emitGate('sks:3110-all-feature-regression', {
|
|
91
|
-
core_installed: coreA.installed_count,
|
|
92
|
-
manual_native_count: manual.capabilities.filter((state) => state.repairability === 'manual-required' && state.after !== 'verified').length
|
|
93
|
-
});
|
|
94
|
-
async function readReports(dir) {
|
|
95
|
-
const out = {};
|
|
96
|
-
const rows = await fs.readdir(dir, { withFileTypes: true }).catch(() => []);
|
|
97
|
-
for (const row of rows) {
|
|
98
|
-
if (!row.isFile() || !row.name.endsWith('.json'))
|
|
99
|
-
continue;
|
|
100
|
-
out[row.name] = await fs.readFile(path.join(dir, row.name), 'utf8');
|
|
101
|
-
}
|
|
102
|
-
return out;
|
|
103
|
-
}
|
|
104
|
-
async function expectSecretGuardRestored(operation, fn) {
|
|
105
|
-
try {
|
|
106
|
-
await withSecretPreservationGuard(root, operation, fn);
|
|
107
|
-
}
|
|
108
|
-
catch (err) {
|
|
109
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
110
|
-
assertGate(message.startsWith('secret_preservation_restored:'), `${operation} must be restored and reported by secret guard`, message);
|
|
111
|
-
return message;
|
|
112
|
-
}
|
|
113
|
-
assertGate(false, `${operation} must throw after restoring protected secret mutation`, {});
|
|
114
|
-
return '';
|
|
115
|
-
}
|
|
116
|
-
//# sourceMappingURL=sks-3110-all-feature-regression-blackbox.js.map
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import { assertGate, emitGate, exists, readJson } from './sks-1-18-gate-lib.js';
|
|
3
|
-
const scripts = readJson('package.json').scripts || {};
|
|
4
|
-
const required = [
|
|
5
|
-
'release:gate-script-parity',
|
|
6
|
-
'codex:0140-capability',
|
|
7
|
-
'codex:0140-feature-probes',
|
|
8
|
-
'doctor:fix-production-blackbox',
|
|
9
|
-
'doctor:startup-config-repair-blackbox',
|
|
10
|
-
'doctor:context7-mcp-repair-blackbox',
|
|
11
|
-
'doctor:supabase-mcp-repair-blackbox',
|
|
12
|
-
'native-capability:postcheck',
|
|
13
|
-
'secret:preservation-guard',
|
|
14
|
-
'secret:supabase-preservation-blackbox',
|
|
15
|
-
'update:preserves-supabase-keys',
|
|
16
|
-
'core-skill:no-drift',
|
|
17
|
-
'skill:dedupe-blackbox',
|
|
18
|
-
'release:dag-full-coverage'
|
|
19
|
-
];
|
|
20
|
-
for (const id of required)
|
|
21
|
-
assertGate(Boolean(scripts[id]), `3.1.12 regression required script missing: ${id}`);
|
|
22
|
-
for (const file of [
|
|
23
|
-
'src/core/doctor/doctor-transaction.ts',
|
|
24
|
-
'src/core/codex-control/codex-0140-capability.ts',
|
|
25
|
-
'src/core/config/secret-preservation.ts'
|
|
26
|
-
])
|
|
27
|
-
assertGate(exists(file), `3.1.12 regression required file missing: ${file}`);
|
|
28
|
-
emitGate('sks:3112-all-feature-regression', { scenarios: required.length });
|
|
29
|
-
//# sourceMappingURL=sks-3112-all-feature-regression-blackbox.js.map
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import { assertGate, emitGate, exists, readJson } from './sks-1-18-gate-lib.js';
|
|
3
|
-
import { REQUIRED_3113_RELEASE_IDS } from './release-3113-required-gates.js';
|
|
4
|
-
const scripts = readJson('package.json').scripts || {};
|
|
5
|
-
for (const id of REQUIRED_3113_RELEASE_IDS)
|
|
6
|
-
assertGate(Boolean(scripts[id]), `3.1.13 regression required script missing: ${id}`);
|
|
7
|
-
for (const file of [
|
|
8
|
-
'src/core/codex-control/codex-0140-usage-parser.ts',
|
|
9
|
-
'src/core/doctor/doctor-transaction.ts',
|
|
10
|
-
'src/core/codex/agent-config-file-repair.ts',
|
|
11
|
-
'src/core/mcp/mcp-config-preservation.ts',
|
|
12
|
-
'src/core/config/secret-preservation.ts',
|
|
13
|
-
'src/core/codex-native/native-capability-postcheck.ts'
|
|
14
|
-
])
|
|
15
|
-
assertGate(exists(file), `3.1.13 regression required file missing: ${file}`);
|
|
16
|
-
emitGate('sks:3113-all-feature-regression', { scenarios: REQUIRED_3113_RELEASE_IDS.length });
|
|
17
|
-
//# sourceMappingURL=sks-3113-all-feature-regression-blackbox.js.map
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
// @ts-nocheck
|
|
2
|
-
import { assertGate, emitGate, packageScripts, readText } from './sks-1-18-gate-lib.js';
|
|
3
|
-
const scripts = packageScripts();
|
|
4
|
-
const required = [
|
|
5
|
-
'triwiki:proof-bank',
|
|
6
|
-
'triwiki:affected-graph',
|
|
7
|
-
'gate-pack:runner',
|
|
8
|
-
'scheduler:extreme-parallel',
|
|
9
|
-
'pipeline:five-minute-sla',
|
|
10
|
-
'build-once:runner',
|
|
11
|
-
'probes:memoization',
|
|
12
|
-
'doctor:dirty-repair',
|
|
13
|
-
'legacy:gate-inventory',
|
|
14
|
-
'certificate:sla'
|
|
15
|
-
];
|
|
16
|
-
for (const id of required)
|
|
17
|
-
assertGate(Boolean(scripts[id]), `4.0.0 script missing: ${id}`);
|
|
18
|
-
const changelog = readText('CHANGELOG.md');
|
|
19
|
-
assertGate(changelog.includes('[4.0.0]'), 'CHANGELOG must include 4.0.0 entry');
|
|
20
|
-
emitGate('sks:400-all-feature-regression', { scripts: required.length });
|
|
21
|
-
//# sourceMappingURL=sks-400-all-feature-regression-blackbox.js.map
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
// @ts-nocheck
|
|
2
|
-
import { assertGate, emitGate, importDist, root } from './sks-1-18-gate-lib.js';
|
|
3
|
-
const scheduler = await importDist('core/release/extreme-parallel-scheduler.js');
|
|
4
|
-
const schedule = scheduler.planExtremeParallelSchedule(root);
|
|
5
|
-
assertGate(schedule.sequential_ms > 0 && schedule.critical_path_ms > 0, 'extreme scheduler blackbox must estimate work', schedule);
|
|
6
|
-
assertGate(schedule.critical_path_ms <= schedule.sequential_ms, 'critical path must not exceed sequential path', schedule);
|
|
7
|
-
emitGate('scheduler:extreme-parallel-blackbox', { reduction_ratio: schedule.reduction_ratio, batches: schedule.batches.length });
|
|
8
|
-
//# sourceMappingURL=sks-400-extreme-parallel-blackbox.js.map
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
// @ts-nocheck
|
|
2
|
-
import { assertGate, emitGate, importDist, root } from './sks-1-18-gate-lib.js';
|
|
3
|
-
const graphMod = await importDist('core/triwiki/triwiki-affected-graph.js');
|
|
4
|
-
const sla = await importDist('core/release/sla-scheduler.js');
|
|
5
|
-
const graph = graphMod.computeTriWikiAffectedGraph({ root, changedFiles: ['src/core/triwiki/triwiki-proof-bank.ts'], tier: 'affected' });
|
|
6
|
-
const plan = sla.planFiveMinuteSla(root, graph);
|
|
7
|
-
assertGate(plan.certificate.sla_ms === 300000 && plan.graph.release_equivalent_within_scope === true, 'five-minute TriWiki blackbox must produce release-equivalent certificate', plan);
|
|
8
|
-
emitGate('pipeline:five-minute-triwiki-blackbox', { gates: plan.graph.gates.length, ok: plan.ok });
|
|
9
|
-
//# sourceMappingURL=sks-400-five-minute-blackbox.js.map
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
// @ts-nocheck
|
|
2
|
-
import { assertGate, emitGate, readText } from './sks-1-18-gate-lib.js';
|
|
3
|
-
const registry = readText('src/cli/command-registry.ts');
|
|
4
|
-
const migration = readText('docs/sks-4-migration.md');
|
|
5
|
-
assertGate(!registry.includes('LEGACY_COMMAND_ALIASES = {\\n auth'), 'legacy alias block must be destructive-purged');
|
|
6
|
-
assertGate(migration.includes('No silent legacy fallback'), 'migration doc must explain no silent fallback');
|
|
7
|
-
emitGate('legacy:purge-blackbox');
|
|
8
|
-
//# sourceMappingURL=sks-400-legacy-purge-blackbox.js.map
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
import { assertGate, emitGate, importDist, root } from './sks-1-18-gate-lib.js';
|
|
2
|
-
import { REQUIRED_4001_RELEASE_IDS } from './release-4001-required-gates.js';
|
|
3
|
-
import { REQUIRED_4002_RELEASE_IDS } from './release-4002-required-gates.js';
|
|
4
|
-
import fs from 'node:fs';
|
|
5
|
-
import path from 'node:path';
|
|
6
|
-
const pkg = JSON.parse(fs.readFileSync(path.join(root, 'package.json'), 'utf8'));
|
|
7
|
-
const manifest = JSON.parse(fs.readFileSync(path.join(root, 'release-gates.v2.json'), 'utf8'));
|
|
8
|
-
const ids = new Set(manifest.gates.map((gate) => gate.id));
|
|
9
|
-
const required = [...REQUIRED_4001_RELEASE_IDS, ...REQUIRED_4002_RELEASE_IDS];
|
|
10
|
-
const missing = required.filter((id) => !pkg.scripts?.[id] || !ids.has(id));
|
|
11
|
-
assertGate(compareSemver(pkg.version || '0.0.0', '4.0.2') >= 0, 'package version must be at least 4.0.2 after production completion bump', pkg.version);
|
|
12
|
-
assertGate(missing.length === 0, '4.0.1/4.0.2 required scripts/gates missing', missing);
|
|
13
|
-
const graphMod = await importDist('core/triwiki/triwiki-affected-graph.js');
|
|
14
|
-
const schedulerMod = await importDist('core/release/extreme-parallel-scheduler.js');
|
|
15
|
-
const dirtyMod = await importDist('core/doctor/doctor-dirty-planner.js');
|
|
16
|
-
const certificateMod = await importDist('core/triwiki/triwiki-sla-certificate.js');
|
|
17
|
-
const graph = graphMod.computeTriWikiAffectedGraph({ root, changedFiles: ['src/core/triwiki/triwiki-proof-card.ts'], tier: 'confidence' });
|
|
18
|
-
const plan = schedulerMod.planExtremeParallelSchedule(root, graph);
|
|
19
|
-
const dirty = dirtyMod.planDoctorDirtyRepair(root, ['context7']);
|
|
20
|
-
const certificate = certificateMod.buildTriWikiSlaCertificate({
|
|
21
|
-
graph,
|
|
22
|
-
mode: 'actual',
|
|
23
|
-
slaMs: 300_000,
|
|
24
|
-
estimatedCriticalPathMs: Math.max(1, plan.critical_path_ms || 1),
|
|
25
|
-
estimatedSequentialMs: Math.max(1, plan.sequential_ms || plan.critical_path_ms || 1),
|
|
26
|
-
actualDurationMs: 1,
|
|
27
|
-
executedPacks: Math.max(1, graph.gate_packs.length),
|
|
28
|
-
reusedProofs: graph.reused_proofs.length,
|
|
29
|
-
invalidatedProofs: graph.invalidated_proofs.length
|
|
30
|
-
});
|
|
31
|
-
assertGate(graph.gate_packs.length > 0, 'regression must compute affected graph gate packs', graph);
|
|
32
|
-
assertGate(plan.schema === 'sks.extreme-parallel-scheduler.v1', 'regression must exercise scheduler planning', plan);
|
|
33
|
-
assertGate(dirty.schema === 'sks.doctor-dirty-plan.v2', 'regression must exercise semantic dirty doctor', dirty);
|
|
34
|
-
assertGate(certificate.mode === 'actual' && certificate.sla_met === true, 'regression must create actual SLA certificate', certificate);
|
|
35
|
-
emitGate('sks:401-all-feature-regression', { required: required.length, packs: graph.gate_packs.length });
|
|
36
|
-
function compareSemver(left, right) {
|
|
37
|
-
const a = left.split('.').map((part) => Number.parseInt(part, 10) || 0);
|
|
38
|
-
const b = right.split('.').map((part) => Number.parseInt(part, 10) || 0);
|
|
39
|
-
for (let i = 0; i < 3; i += 1) {
|
|
40
|
-
const diff = (a[i] || 0) - (b[i] || 0);
|
|
41
|
-
if (diff !== 0)
|
|
42
|
-
return diff;
|
|
43
|
-
}
|
|
44
|
-
return 0;
|
|
45
|
-
}
|
|
46
|
-
//# sourceMappingURL=sks-401-all-feature-regression-blackbox.js.map
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { assertGate, emitGate, importDist, root } from './sks-1-18-gate-lib.js';
|
|
2
|
-
const graphMod = await importDist('core/triwiki/triwiki-affected-graph.js');
|
|
3
|
-
const certMod = await importDist('core/triwiki/triwiki-sla-certificate.js');
|
|
4
|
-
const graph = graphMod.computeTriWikiAffectedGraph({ root, changedFiles: ['src/core/triwiki/triwiki-sla-certificate.ts'], tier: 'confidence' });
|
|
5
|
-
const cert = certMod.buildTriWikiSlaCertificate({
|
|
6
|
-
graph,
|
|
7
|
-
slaMs: 300000,
|
|
8
|
-
estimatedCriticalPathMs: 1000,
|
|
9
|
-
estimatedSequentialMs: 2000,
|
|
10
|
-
mode: 'actual',
|
|
11
|
-
actualDurationMs: 1000,
|
|
12
|
-
executedGates: 1,
|
|
13
|
-
executedPacks: 1,
|
|
14
|
-
reusedProofs: 0,
|
|
15
|
-
invalidatedProofs: graph.invalidated_proofs.length,
|
|
16
|
-
newProofs: 1,
|
|
17
|
-
skippedAsValidCache: 0,
|
|
18
|
-
skippedAsUnaffected: 0,
|
|
19
|
-
backgroundFullRelease: true
|
|
20
|
-
});
|
|
21
|
-
assertGate(cert.mode === 'actual' && cert.ok === true && cert.actual_duration_ms === 1000, 'actual SLA certificate must include execution stats', cert);
|
|
22
|
-
emitGate('sks:401-five-minute-actual-blackbox', { mode: cert.mode, actual_duration_ms: cert.actual_duration_ms });
|
|
23
|
-
//# sourceMappingURL=sks-401-five-minute-actual-blackbox.js.map
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { assertGate, emitGate, packageScripts, readJson } from './sks-1-18-gate-lib.js';
|
|
2
|
-
import { REQUIRED_4002_RELEASE_IDS } from './release-4002-required-gates.js';
|
|
3
|
-
const scripts = packageScripts();
|
|
4
|
-
const manifest = readJson('release-gates.v2.json');
|
|
5
|
-
const gateIds = new Set(manifest.gates.map((gate) => gate.id));
|
|
6
|
-
const missing = REQUIRED_4002_RELEASE_IDS.filter((id) => !scripts[id] || !gateIds.has(id));
|
|
7
|
-
assertGate(missing.length === 0, '4.0.2 required scripts/gates missing', missing);
|
|
8
|
-
emitGate('sks:402-all-feature-regression', { required: REQUIRED_4002_RELEASE_IDS.length });
|
|
9
|
-
//# sourceMappingURL=sks-402-all-feature-regression-blackbox.js.map
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { assertGate, emitGate, importDist, root } from './sks-1-18-gate-lib.js';
|
|
2
|
-
const graphMod = await importDist('core/triwiki/triwiki-affected-graph.js');
|
|
3
|
-
const schedulerMod = await importDist('core/release/extreme-parallel-scheduler.js');
|
|
4
|
-
const certificateMod = await importDist('core/triwiki/triwiki-sla-certificate.js');
|
|
5
|
-
const graph = graphMod.computeTriWikiAffectedGraph({ root, changedFiles: ['src/core/triwiki/triwiki-proof-card.ts'], tier: 'confidence' });
|
|
6
|
-
const plan = schedulerMod.planExtremeParallelSchedule(root, graph);
|
|
7
|
-
const certificate = certificateMod.buildTriWikiSlaCertificate({
|
|
8
|
-
graph,
|
|
9
|
-
mode: 'actual',
|
|
10
|
-
slaMs: 300_000,
|
|
11
|
-
estimatedCriticalPathMs: Math.max(1, plan.critical_path_ms || 1),
|
|
12
|
-
estimatedSequentialMs: Math.max(1, plan.sequential_ms || plan.critical_path_ms || 1),
|
|
13
|
-
actualDurationMs: Math.max(1, Math.min(299_000, plan.critical_path_ms || 1)),
|
|
14
|
-
executedPacks: Math.max(1, graph.gate_packs.length),
|
|
15
|
-
reusedProofs: graph.reused_proofs.length,
|
|
16
|
-
invalidatedProofs: graph.invalidated_proofs.length,
|
|
17
|
-
skippedAsUnaffected: Math.max(1, plan.batches.length)
|
|
18
|
-
});
|
|
19
|
-
assertGate(certificate.mode === 'actual' && certificate.sla_met === true, '4.0.2 five-minute blackbox must create actual SLA certificate', certificate);
|
|
20
|
-
assertGate(graph.gate_packs.length > 0 && graph.required_new_proofs.length >= 0, '4.0.2 five-minute blackbox must compute affected packs', graph);
|
|
21
|
-
emitGate('sks:402-five-minute-real-blackbox', { packs: graph.gate_packs.length, sla_met: certificate.sla_met });
|
|
22
|
-
//# sourceMappingURL=sks-402-five-minute-real-blackbox.js.map
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
// @ts-nocheck
|
|
2
|
-
import { assertGate, emitGate, makeTempRoot } from './sks-3-1-8-check-lib.js';
|
|
3
|
-
import { importDist } from './sks-1-18-gate-lib.js';
|
|
4
|
-
const tmp = await makeTempRoot('sksd-warm-');
|
|
5
|
-
const mod = await importDist('core/daemon/sksd-client.js');
|
|
6
|
-
const warm = mod.runSksdClient(tmp, 'warm');
|
|
7
|
-
const status = mod.runSksdClient(tmp, 'status');
|
|
8
|
-
const proofBank = mod.handleSksdRequest(tmp, { type: 'proof-bank-status', root: tmp });
|
|
9
|
-
assertGate(warm.status === 'warm' && status.status === 'warm' && status.proof_bank_ready === true && status.protocol_ok === true, 'sksd warm cache must persist protocol state', { warm, status });
|
|
10
|
-
assertGate(proofBank.schema === 'sks.triwiki-proof-bank.v1', 'sksd proof-bank-status request must roundtrip', proofBank);
|
|
11
|
-
emitGate('sksd:warm-cache-blackbox', { status: status.status });
|
|
12
|
-
//# sourceMappingURL=sksd-warm-cache-blackbox.js.map
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
// @ts-nocheck
|
|
3
|
-
import fs from 'node:fs';
|
|
4
|
-
import os from 'node:os';
|
|
5
|
-
import path from 'node:path';
|
|
6
|
-
import { spawnSync } from 'node:child_process';
|
|
7
|
-
import { assertGate, emitGate, importDist, root } from './sks-1-18-gate-lib.js';
|
|
8
|
-
const mergeMod = await importDist('core/agents/agent-merge-coordinator.js');
|
|
9
|
-
const applyMod = await importDist('core/agents/agent-patch-apply-worker.js');
|
|
10
|
-
const tmp = fs.mkdtempSync(path.join(os.tmpdir(), 'sks-team-patch-'));
|
|
11
|
-
fs.writeFileSync(path.join(tmp, 'team-a.txt'), 'lane-a\n');
|
|
12
|
-
fs.writeFileSync(path.join(tmp, 'team-b.txt'), 'lane-b\n');
|
|
13
|
-
const envelopes = [
|
|
14
|
-
{ schema: 'sks.agent-patch-envelope.v1', agent_id: 'reviewer-a', session_id: 'team-session-a', slot_id: 'team-slot-a', generation_index: 1, lease_id: 'lease:reviewer-a:team-a.txt', operations: [{ op: 'replace', path: 'team-a.txt', search: 'lane-a', replace: 'lane-a-done' }] },
|
|
15
|
-
{ schema: 'sks.agent-patch-envelope.v1', agent_id: 'reviewer-b', session_id: 'team-session-b', slot_id: 'team-slot-b', generation_index: 1, lease_id: 'lease:reviewer-b:team-b.txt', operations: [{ op: 'replace', path: 'team-b.txt', search: 'lane-b', replace: 'lane-b-done' }] }
|
|
16
|
-
];
|
|
17
|
-
const merge = mergeMod.coordinateAgentPatchMerge(envelopes);
|
|
18
|
-
const applyResults = [];
|
|
19
|
-
for (const envelope of envelopes)
|
|
20
|
-
applyResults.push(await applyMod.applyAgentPatchEnvelope(tmp, envelope));
|
|
21
|
-
const teamRun = spawnSync(process.execPath, [
|
|
22
|
-
'dist/bin/sks.js',
|
|
23
|
-
'team',
|
|
24
|
-
'team parallel write blackbox route fixture',
|
|
25
|
-
'executor:1',
|
|
26
|
-
'reviewer:5',
|
|
27
|
-
'--mock',
|
|
28
|
-
'--write-mode',
|
|
29
|
-
'parallel',
|
|
30
|
-
'--apply-patches',
|
|
31
|
-
'--dry-run-patches',
|
|
32
|
-
'--max-write-agents',
|
|
33
|
-
'1',
|
|
34
|
-
'--json'
|
|
35
|
-
], { cwd: root, encoding: 'utf8', maxBuffer: 2 * 1024 * 1024 });
|
|
36
|
-
const teamJson = parseJson(teamRun.stdout);
|
|
37
|
-
const routePolicy = teamJson?.parallel_write_policy || teamJson?.run?.parallel_write_policy || teamJson?.native_agent_run?.parallel_write_policy || null;
|
|
38
|
-
const report = { schema: 'sks.team-parallel-write-blackbox.v1', ok: merge.ok && applyResults.every((item) => item.ok) && teamRun.status === 0 && routePolicy?.route_level_flags_wired === true, merge, applyResults, route_command: { status: teamRun.status, stderr_tail: teamRun.stderr.slice(-2000), mission_id: teamJson?.mission_id || null, route_policy: routePolicy } };
|
|
39
|
-
const out = path.join(root, '.sneakoscope', 'reports', 'team-parallel-write-blackbox.json');
|
|
40
|
-
fs.mkdirSync(path.dirname(out), { recursive: true });
|
|
41
|
-
fs.writeFileSync(out, `${JSON.stringify(report, null, 2)}\n`);
|
|
42
|
-
assertGate(report.ok === true, 'Team parallel write blackbox must pass', report);
|
|
43
|
-
assertGate(routePolicy?.write_mode === 'parallel', 'Team route must carry --write-mode parallel into native agent policy', report);
|
|
44
|
-
assertGate(routePolicy?.apply_patches === true, 'Team route must carry --apply-patches into native agent policy', report);
|
|
45
|
-
assertGate(routePolicy?.dry_run_patches === true, 'Team route must carry --dry-run-patches into native agent policy', report);
|
|
46
|
-
emitGate('team:parallel-write-blackbox', { changed_files: applyResults.flatMap((item) => item.changed_files).length });
|
|
47
|
-
function parseJson(text) {
|
|
48
|
-
try {
|
|
49
|
-
return JSON.parse(text);
|
|
50
|
-
}
|
|
51
|
-
catch {
|
|
52
|
-
return null;
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
//# sourceMappingURL=team-parallel-write-blackbox.js.map
|