@opengsd/gsd-core 1.13.0 → 1.14.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/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/agents/gsd-advisor-researcher.compact.md +85 -0
- package/agents/gsd-ai-researcher.compact.md +96 -0
- package/agents/gsd-assumptions-analyzer.compact.md +81 -0
- package/agents/gsd-code-fixer.compact.md +458 -0
- package/agents/gsd-code-fixer.md +5 -5
- package/agents/gsd-code-reviewer.compact.md +269 -0
- package/agents/gsd-code-reviewer.md +15 -3
- package/agents/gsd-codebase-mapper.compact.md +760 -0
- package/agents/gsd-debug-session-manager.compact.md +345 -0
- package/agents/gsd-doc-classifier.compact.md +192 -0
- package/agents/gsd-doc-synthesizer.compact.md +200 -0
- package/agents/gsd-doc-verifier.compact.md +143 -0
- package/agents/gsd-doc-writer.compact.md +440 -0
- package/agents/gsd-dom-verifier.compact.md +138 -0
- package/agents/gsd-domain-researcher.compact.md +141 -0
- package/agents/gsd-eval-auditor.compact.md +160 -0
- package/agents/gsd-eval-planner.compact.md +137 -0
- package/agents/gsd-framework-selector.compact.md +82 -0
- package/agents/gsd-integration-checker.compact.md +245 -0
- package/agents/gsd-intel-updater.compact.md +226 -0
- package/agents/gsd-mempalace-curator.compact.md +45 -0
- package/agents/gsd-nyquist-auditor.compact.md +179 -0
- package/agents/gsd-pattern-mapper.compact.md +275 -0
- package/agents/gsd-project-researcher.compact.md +587 -0
- package/agents/gsd-research-synthesizer.compact.md +212 -0
- package/agents/gsd-roadmapper.compact.md +454 -0
- package/agents/gsd-roadmapper.md +13 -0
- package/agents/gsd-security-auditor.compact.md +162 -0
- package/agents/gsd-ui-auditor.compact.md +404 -0
- package/agents/gsd-ui-checker.compact.md +277 -0
- package/agents/gsd-ui-researcher.compact.md +282 -0
- package/agents/gsd-user-profiler.compact.md +108 -0
- package/bin/install.js +206 -68
- package/commands/gsd/cleanup.md +1 -0
- package/commands/gsd/code-review.md +2 -1
- package/commands/gsd/complete-milestone.md +1 -0
- package/commands/gsd/config.md +1 -0
- package/commands/gsd/debug.md +1 -0
- package/commands/gsd/graphify.md +1 -0
- package/commands/gsd/health.md +1 -0
- package/commands/gsd/mempalace-capture.md +1 -0
- package/commands/gsd/mempalace-recall.md +1 -0
- package/commands/gsd/new-milestone.md +1 -0
- package/commands/gsd/new-project.md +1 -0
- package/commands/gsd/next.md +1 -0
- package/commands/gsd/pause-work.md +1 -0
- package/commands/gsd/phase.md +1 -0
- package/commands/gsd/pr-branch.md +1 -0
- package/commands/gsd/resume-work.md +1 -0
- package/commands/gsd/review-backlog.md +1 -0
- package/commands/gsd/settings.md +2 -1
- package/commands/gsd/stats.md +1 -0
- package/commands/gsd/thread.md +1 -0
- package/commands/gsd/workspace.md +1 -0
- package/commands/gsd/workstreams.md +1 -0
- package/gsd-core/bin/check-latest-version.cjs +8 -3
- package/gsd-core/bin/gsd-tools.cjs +338 -125
- package/gsd-core/bin/lib/adr-parser.cjs +1 -1
- package/gsd-core/bin/lib/artifacts.cjs +2 -1
- package/gsd-core/bin/lib/audit.cjs +39 -22
- package/gsd-core/bin/lib/broken-windows.cjs +168 -49
- package/gsd-core/bin/lib/capability-lifecycle.cjs +10 -6
- package/gsd-core/bin/lib/capability-loader.cjs +135 -1
- package/gsd-core/bin/lib/capability-registry.cjs +79 -67
- package/gsd-core/bin/lib/capability-source.cjs +19 -2
- package/gsd-core/bin/lib/capability-validator.cjs +14 -1
- package/gsd-core/bin/lib/check-command-router.cjs +113 -36
- package/gsd-core/bin/lib/code-review-depth.cjs +2 -2
- package/gsd-core/bin/lib/commands.cjs +650 -72
- package/gsd-core/bin/lib/config-loader.cjs +1 -0
- package/gsd-core/bin/lib/config.cjs +153 -38
- package/gsd-core/bin/lib/coverage.cjs +1 -1
- package/gsd-core/bin/lib/decisions.cjs +137 -34
- package/gsd-core/bin/lib/external-descriptor-trust.cjs +29 -14
- package/gsd-core/bin/lib/gsd2-import.cjs +1 -2
- package/gsd-core/bin/lib/health-diagnostic-rules/state-consistency.cjs +12 -1
- package/gsd-core/bin/lib/health-diagnostic-rules/worktree-health.cjs +1 -1
- package/gsd-core/bin/lib/init.cjs +409 -47
- package/gsd-core/bin/lib/install-engine.cjs +16 -3
- package/gsd-core/bin/lib/install-profiles.cjs +14 -0
- package/gsd-core/bin/lib/installer-migrations.cjs +33 -4
- package/gsd-core/bin/lib/loop-resolver.cjs +50 -31
- package/gsd-core/bin/lib/mcp-catalog.cjs +2 -2
- package/gsd-core/bin/lib/milestone.cjs +19 -8
- package/gsd-core/bin/lib/model-resolver.cjs +101 -10
- package/gsd-core/bin/lib/phase-command-router.cjs +7 -1
- package/gsd-core/bin/lib/phase-id.cjs +161 -22
- package/gsd-core/bin/lib/phase-lifecycle.cjs +61 -0
- package/gsd-core/bin/lib/phase.cjs +167 -63
- package/gsd-core/bin/lib/planning-inspect.cjs +34 -18
- package/gsd-core/bin/lib/planning-snapshot.cjs +61 -12
- package/gsd-core/bin/lib/planning-workspace.cjs +50 -1
- package/gsd-core/bin/lib/pristine-baseline.cjs +182 -0
- package/gsd-core/bin/lib/prohibition-enforcement.cjs +91 -4
- package/gsd-core/bin/lib/quick-batch.cjs +1 -1
- package/gsd-core/bin/lib/refactor-trigger-command-router.cjs +61 -2
- package/gsd-core/bin/lib/research-store.cjs +11 -12
- package/gsd-core/bin/lib/review-lane-invocation.cjs +23 -0
- package/gsd-core/bin/lib/reviewer-step-dispatch.cjs +337 -0
- package/gsd-core/bin/lib/roadmap-parser.cjs +56 -15
- package/gsd-core/bin/lib/roadmap.cjs +108 -14
- package/gsd-core/bin/lib/runtime-artifact-conversion.cjs +27 -10
- package/gsd-core/bin/lib/runtime-artifact-install-plan.cjs +12 -3
- package/gsd-core/bin/lib/runtime-artifact-layout.cjs +13 -5
- package/gsd-core/bin/lib/runtime-hooks-surface.cjs +193 -4
- package/gsd-core/bin/lib/security.cjs +126 -7
- package/gsd-core/bin/lib/state-document.cjs +130 -28
- package/gsd-core/bin/lib/state-md-schema.cjs +21 -14
- package/gsd-core/bin/lib/state-transition.cjs +142 -28
- package/gsd-core/bin/lib/state.cjs +223 -27
- package/gsd-core/bin/lib/surface.cjs +60 -2
- package/gsd-core/bin/lib/task-command-router.cjs +12 -6
- package/gsd-core/bin/lib/uat.cjs +1 -1
- package/gsd-core/bin/lib/update-context.cjs +30 -24
- package/gsd-core/bin/lib/vendor/js-yaml.cjs +11 -3
- package/gsd-core/bin/lib/verification.cjs +47 -15
- package/gsd-core/bin/lib/verify-command-grounding.cjs +1 -1
- package/gsd-core/bin/lib/verify.cjs +188 -23
- package/gsd-core/bin/lib/workstream-inventory.cjs +1 -0
- package/gsd-core/bin/lib/worktree-safety.cjs +13 -7
- package/gsd-core/bin/shared/config-defaults.manifest.json +1 -0
- package/gsd-core/bin/shared/config-schema.manifest.json +5 -0
- package/gsd-core/bin/verify-reapply-patches.cjs +439 -80
- package/gsd-core/references/compact-content-gate.md +66 -0
- package/gsd-core/references/loop-hook-dispatch.md +18 -0
- package/gsd-core/references/model-profiles.md +12 -3
- package/gsd-core/references/planning-config.md +3 -0
- package/gsd-core/references/tdd.md +5 -2
- package/gsd-core/references/thinking-models-planning.md +18 -2
- package/gsd-core/references/verification-patterns.md +17 -4
- package/gsd-core/references/worktree-path-safety.md +112 -2
- package/gsd-core/templates/README.md +7 -1
- package/gsd-core/templates/state.md +6 -3
- package/gsd-core/templates/summary.compact.md +212 -0
- package/gsd-core/templates/user-setup.compact.md +199 -0
- package/gsd-core/templates/user-setup.md +0 -9
- package/gsd-core/workflows/add-todo.md +3 -2
- package/gsd-core/workflows/autonomous.md +13 -10
- package/gsd-core/workflows/check-todos.md +4 -2
- package/gsd-core/workflows/cleanup.md +3 -1
- package/gsd-core/workflows/code-review/steps/structural-pre-pass.md +7 -0
- package/gsd-core/workflows/code-review-fix.md +3 -3
- package/gsd-core/workflows/code-review.md +156 -30
- package/gsd-core/workflows/complete-milestone/detail/elaboration.md +274 -0
- package/gsd-core/workflows/complete-milestone.md +39 -262
- package/gsd-core/workflows/docs-update/detail/elaboration.md +179 -0
- package/gsd-core/workflows/docs-update.md +14 -155
- package/gsd-core/workflows/execute-phase/detail/elaboration.md +124 -0
- package/gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md +18 -3
- package/gsd-core/workflows/execute-phase/steps/completion-reconciliation.md +56 -0
- package/gsd-core/workflows/execute-phase/steps/executor-isolation-dispatch.md +7 -2
- package/gsd-core/workflows/execute-phase/steps/executor-progress-policy.md +43 -0
- package/gsd-core/workflows/execute-phase/steps/sequential-root-pin.md +35 -0
- package/gsd-core/workflows/execute-phase.md +53 -152
- package/gsd-core/workflows/execute-plan.md +20 -7
- package/gsd-core/workflows/help/modes/full.compact.md +398 -0
- package/gsd-core/workflows/help.md +1 -1
- package/gsd-core/workflows/map-codebase.md +50 -3
- package/gsd-core/workflows/new-milestone.md +54 -12
- package/gsd-core/workflows/new-project/detail/elaboration.md +216 -0
- package/gsd-core/workflows/new-project.md +32 -202
- package/gsd-core/workflows/plan-phase/detail/elaboration.md +209 -0
- package/gsd-core/workflows/plan-phase.md +22 -181
- package/gsd-core/workflows/pr-branch.md +19 -7
- package/gsd-core/workflows/quick.md +8 -1
- package/gsd-core/workflows/reapply-patches.md +77 -3
- package/gsd-core/workflows/settings.md +18 -5
- package/gsd-core/workflows/update.md +7 -5
- package/gsd-core/workflows/verify-work/detail/elaboration.md +230 -0
- package/gsd-core/workflows/verify-work.md +20 -180
- package/hooks/dist/gsd-agent-isolation-guard.js +42 -16
- package/hooks/dist/gsd-context-monitor.js +88 -15
- package/hooks/dist/gsd-cursor-subagent-start.js +34 -14
- package/hooks/dist/gsd-secret-read-guard.js +44 -18
- package/hooks/dist/gsd-statusline.js +11 -7
- package/hooks/dist/gsd-validate-commit.sh +34 -4
- package/hooks/dist/gsd-worktree-path-guard.js +25 -14
- package/hooks/dist/gsd-write-guard.js +46 -1
- package/hooks/dist/lib/dispatch-identity.js +187 -0
- package/hooks/dist/lib/filename-classification.js +64 -0
- package/hooks/dist/lib/isolation-deny-reason.js +53 -1
- package/hooks/dist/lib/isolation-sentinel.js +58 -19
- package/hooks/gsd-agent-isolation-guard.js +42 -16
- package/hooks/gsd-context-monitor.js +88 -15
- package/hooks/gsd-cursor-subagent-start.js +34 -14
- package/hooks/gsd-secret-read-guard.js +44 -18
- package/hooks/gsd-statusline.js +11 -7
- package/hooks/gsd-validate-commit.sh +34 -4
- package/hooks/gsd-worktree-path-guard.js +25 -14
- package/hooks/gsd-write-guard.js +46 -1
- package/hooks/lib/dispatch-identity.js +187 -0
- package/hooks/lib/filename-classification.js +64 -0
- package/hooks/lib/isolation-deny-reason.js +53 -1
- package/hooks/lib/isolation-sentinel.js +58 -19
- package/package.json +10 -6
- package/scripts/benchmark-compact-content-variants.cjs +298 -0
- package/scripts/benchmark-compact-content.cjs +368 -0
- package/scripts/check-contract-drift.cjs +4 -1
- package/scripts/check-env.cjs +36 -8
- package/scripts/check-glossary-refs.cjs +25 -21
- package/scripts/ci-next-health.cjs +271 -0
- package/scripts/ci-prepare-test-scope.cjs +7 -7
- package/scripts/ci-test-scope.cjs +126 -20
- package/scripts/ci-timeout-report.cjs +1 -1
- package/scripts/diff-touches-shipped-paths.cjs +1 -1
- package/scripts/docs-guard-registry.cjs +7 -2
- package/scripts/gen-adr-index.cjs +8 -2
- package/scripts/gen-inventory-manifest.cjs +12 -0
- package/scripts/gen-platform-conformance-tier.cjs +557 -0
- package/scripts/lib/drift-scan.cjs +1 -1
- package/scripts/lib/macos-conformance-tier.generated.cjs +210 -0
- package/scripts/lib/npm-version-check-diagnosis.cjs +59 -0
- package/scripts/lib/platform-conformance-tier.generated.cjs +276 -0
- package/scripts/lib/suite-detection.cjs +32 -0
- package/scripts/lint-allowed-tools-parity.cjs +221 -0
- package/scripts/lint-docs-guard-registration.exempt-baseline.cjs +19 -2
- package/scripts/lint-phase-id-drift.cjs +338 -13
- package/scripts/lint-response-language-coverage.cjs +9 -3
- package/scripts/lint-source-test-name-collision.cjs +1 -1
- package/scripts/lint-test-file-count.allowlist.json +1 -0
- package/scripts/lint-vendored-deps.cjs +128 -17
- package/scripts/lint-workflow-shellcheck-baseline.json +85 -0
- package/scripts/prompt-injection-scan.sh +14 -0
- package/scripts/workflow-size.cjs +139 -0
- package/skills/gsd-cleanup/SKILL.md +1 -0
- package/skills/gsd-code-review/SKILL.md +2 -1
- package/skills/gsd-complete-milestone/SKILL.md +1 -0
- package/skills/gsd-config/SKILL.md +1 -0
- package/skills/gsd-debug/SKILL.md +1 -0
- package/skills/gsd-graphify/SKILL.md +1 -0
- package/skills/gsd-health/SKILL.md +1 -0
- package/skills/gsd-mempalace-capture/SKILL.md +1 -0
- package/skills/gsd-mempalace-recall/SKILL.md +1 -0
- package/skills/gsd-new-milestone/SKILL.md +1 -0
- package/skills/gsd-new-project/SKILL.md +1 -0
- package/skills/gsd-next/SKILL.md +1 -0
- package/skills/gsd-pause-work/SKILL.md +1 -0
- package/skills/gsd-phase/SKILL.md +1 -0
- package/skills/gsd-pr-branch/SKILL.md +1 -0
- package/skills/gsd-resume-work/SKILL.md +1 -0
- package/skills/gsd-review-backlog/SKILL.md +1 -0
- package/skills/gsd-settings/SKILL.md +2 -1
- package/skills/gsd-stats/SKILL.md +1 -0
- package/skills/gsd-thread/SKILL.md +1 -0
- package/skills/gsd-workspace/SKILL.md +1 -0
- package/skills/gsd-workstreams/SKILL.md +1 -0
- package/vscode/package.json +1 -1
- package/gsd-core/templates/claude-md.md +0 -145
- package/gsd-core/templates/codebase/concerns.md +0 -310
- package/gsd-core/templates/codebase/conventions.md +0 -307
- package/gsd-core/templates/codebase/integrations.md +0 -280
- package/gsd-core/templates/codebase/structure.md +0 -285
- package/gsd-core/templates/codebase/testing.md +0 -480
- package/gsd-core/templates/debug-subagent-prompt.md +0 -91
- package/gsd-core/templates/discovery.md +0 -146
|
@@ -70,6 +70,7 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
70
70
|
})();
|
|
71
71
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
72
72
|
exports.readHostVersion = readHostVersion;
|
|
73
|
+
exports.crossValidationSeed = crossValidationSeed;
|
|
73
74
|
exports.loadRegistry = loadRegistry;
|
|
74
75
|
const fs = __importStar(require("node:fs"));
|
|
75
76
|
const os = __importStar(require("node:os"));
|
|
@@ -366,6 +367,139 @@ function ledgerOverlayIds(ledger, rootDir) {
|
|
|
366
367
|
catch { /* missing/invalid/non-regular/oversized ledger — no pending, no committed (fail closed) */ }
|
|
367
368
|
return { pending, committed };
|
|
368
369
|
}
|
|
370
|
+
// ─── #3929: install-time cross-capability validation seed ──────────────────
|
|
371
|
+
/** First-party capabilities from the frozen registry, keyed by id. */
|
|
372
|
+
function firstPartyCaps() {
|
|
373
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
374
|
+
const base = require('./capability-registry.cjs');
|
|
375
|
+
return base.capabilities ?? {};
|
|
376
|
+
}
|
|
377
|
+
/**
|
|
378
|
+
* Central config-schema validKeys for the ownership-exclusivity check — the
|
|
379
|
+
* same source `loadRegistry`'s generator path reads, with the same
|
|
380
|
+
* missing-schema fallback (empty set). Memoized per process: the manifest is
|
|
381
|
+
* static for the lifetime of the runtime.
|
|
382
|
+
*/
|
|
383
|
+
let _centralKeysMemo = null;
|
|
384
|
+
function centralConfigKeys() {
|
|
385
|
+
if (_centralKeysMemo === null) {
|
|
386
|
+
// Same generator seam loadRegistry uses (including the test override), so
|
|
387
|
+
// install-time and load-time central keys cannot diverge when the
|
|
388
|
+
// generator is stubbed.
|
|
389
|
+
if (_generatorOverride) {
|
|
390
|
+
_centralKeysMemo = _generatorOverride.loadCentralConfigKeys();
|
|
391
|
+
}
|
|
392
|
+
else {
|
|
393
|
+
try {
|
|
394
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
395
|
+
const mod = require('../../../scripts/gen-capability-registry.cjs');
|
|
396
|
+
_centralKeysMemo = mod.loadCentralConfigKeys();
|
|
397
|
+
}
|
|
398
|
+
catch {
|
|
399
|
+
_centralKeysMemo = new Set();
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
return _centralKeysMemo;
|
|
404
|
+
}
|
|
405
|
+
/**
|
|
406
|
+
* #3929: the validation seed `capability-source.stageValidated` runs the
|
|
407
|
+
* cross-capability suite against. Built the way `loadRegistry` builds its
|
|
408
|
+
* accepted map: first-party registry capabilities, then each COMMITTED overlay
|
|
409
|
+
* of the TARGET (global) install scope accepted INCREMENTALLY — structural
|
|
410
|
+
* validation, engines.gsd against the running host, then the FULL
|
|
411
|
+
* cross-capability suite; an overlay joins only if the suite stays clean
|
|
412
|
+
* after adding it (load's invariant: first-party alone is clean, so any new
|
|
413
|
+
* error is that overlay's fault — skip it, never fail the seed). The seed is
|
|
414
|
+
* therefore CLEAN BY CONSTRUCTION: pre-existing junk in the install scope
|
|
415
|
+
* (colliding entries, shape-invalid manifests, engines-incompatible bundles)
|
|
416
|
+
* is skipped exactly as load skips it and can never fail or skew a
|
|
417
|
+
* candidate's install decision — a repo-planted ledger cannot veto installs
|
|
418
|
+
* (#1459 CB-3).
|
|
419
|
+
*
|
|
420
|
+
* Scope: only the install TARGET scope is walked — `stageValidated` promotes
|
|
421
|
+
* into `${gsdHome}/.gsd/capabilities`, so target scope == global.
|
|
422
|
+
* Project-scope overlays are deliberately NOT seeded (they additionally
|
|
423
|
+
* require user consent to activate at load; the issue asks for overlays "in
|
|
424
|
+
* the target scope"). The candidate is added by the caller LAST, mirroring
|
|
425
|
+
* `acceptedMap.set(id, cap)`.
|
|
426
|
+
*
|
|
427
|
+
* Exported (not inlined in the installer) so the semantics this reuses —
|
|
428
|
+
* `overlayRoots`, `ledgerOverlayIds`, the shared bounded manifest reader, and
|
|
429
|
+
* the incremental-accept rules — have exactly one owner and cannot drift from
|
|
430
|
+
* the loader's load-time rules.
|
|
431
|
+
*/
|
|
432
|
+
function crossValidationSeed(cwd, gsdHome, hostVersion, validator, semver) {
|
|
433
|
+
const fp = firstPartyCaps();
|
|
434
|
+
const capMap = new Map(Object.entries(fp));
|
|
435
|
+
const centralKeys = centralConfigKeys();
|
|
436
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
437
|
+
const ledger = require('./capability-ledger.cjs');
|
|
438
|
+
for (const root of overlayRoots(cwd, gsdHome)) {
|
|
439
|
+
if (root.scope !== 'global')
|
|
440
|
+
continue; // seed the TARGET scope only
|
|
441
|
+
const { committed } = ledgerOverlayIds(ledger, root.dir);
|
|
442
|
+
for (const id of committed) {
|
|
443
|
+
// First-party always wins (CONTEXT.md capability-loader entry): an
|
|
444
|
+
// overlay claiming a first-party id — or a reserved first-party prefix
|
|
445
|
+
// — is rejected at load, so it must not join the validation set.
|
|
446
|
+
if (Object.prototype.hasOwnProperty.call(fp, id))
|
|
447
|
+
continue;
|
|
448
|
+
if (RESERVED_ID_PREFIX.test(id))
|
|
449
|
+
continue;
|
|
450
|
+
let cap;
|
|
451
|
+
try {
|
|
452
|
+
const manifestPath = path.join(root.dir, id, 'capability.json');
|
|
453
|
+
const raw = ledger.readSmallRegularFile(manifestPath, MANIFEST_MAX_BYTES);
|
|
454
|
+
if (raw === null)
|
|
455
|
+
continue; // missing/non-regular/oversized — skip fail-closed
|
|
456
|
+
cap = JSON.parse(raw);
|
|
457
|
+
}
|
|
458
|
+
catch {
|
|
459
|
+
continue; // unreadable overlay — skip (same rule as load)
|
|
460
|
+
}
|
|
461
|
+
// Same per-overlay pre-filters load applies before the cross suite:
|
|
462
|
+
// structural validity, then engines.gsd against the running host.
|
|
463
|
+
// validateCapability itself is not total over malformed array entries
|
|
464
|
+
// (#1461 finding 1) — a throw skips the overlay, as load skips it.
|
|
465
|
+
try {
|
|
466
|
+
if (validator.validateCapability(cap, id).length > 0)
|
|
467
|
+
continue;
|
|
468
|
+
}
|
|
469
|
+
catch {
|
|
470
|
+
continue;
|
|
471
|
+
}
|
|
472
|
+
const engines = cap['engines'];
|
|
473
|
+
if (engines && typeof engines === 'object' && !Array.isArray(engines)) {
|
|
474
|
+
const range = engines['gsd'];
|
|
475
|
+
if (typeof range === 'string' && range && !semver.semverSatisfies(hostVersion, range))
|
|
476
|
+
continue;
|
|
477
|
+
}
|
|
478
|
+
// Incremental accept: the overlay joins only if the FULL suite stays
|
|
479
|
+
// clean after adding it; any error is that overlay's fault — skip it.
|
|
480
|
+
capMap.set(id, cap);
|
|
481
|
+
let errs = [];
|
|
482
|
+
try {
|
|
483
|
+
errs = [
|
|
484
|
+
...validator.validateConsumesGlobal(capMap),
|
|
485
|
+
...validator.validateCrossCapability(capMap, centralKeys),
|
|
486
|
+
];
|
|
487
|
+
}
|
|
488
|
+
catch {
|
|
489
|
+
// The cross validators are not total over arbitrary shapes (#1461
|
|
490
|
+
// finding 1 — e.g. the duplicate-producer invariant throws). A
|
|
491
|
+
// throwing overlay must be REMOVED here, exactly as load's
|
|
492
|
+
// acceptedMap.delete(id) does — retaining it would leave poisoning
|
|
493
|
+
// content in the seed and attribute pre-existing junk to the
|
|
494
|
+
// candidate.
|
|
495
|
+
capMap.delete(id);
|
|
496
|
+
}
|
|
497
|
+
if (errs.length > 0)
|
|
498
|
+
capMap.delete(id);
|
|
499
|
+
}
|
|
500
|
+
}
|
|
501
|
+
return { capMap, centralKeys };
|
|
502
|
+
}
|
|
369
503
|
/** Shallow-attach overlay diagnostics WITHOUT mutating the frozen registry module. */
|
|
370
504
|
function withOverlayMeta(reg, meta) {
|
|
371
505
|
return Object.assign({}, reg, { _overlay: meta });
|
|
@@ -821,4 +955,4 @@ function loadRegistry(options = {}) {
|
|
|
821
955
|
}
|
|
822
956
|
}
|
|
823
957
|
// readHostVersion is exported for the #1920 regression (VERSION-first host-version resolution).
|
|
824
|
-
module.exports = { loadRegistry, readHostVersion, _setValidatorForTest, _setGeneratorForTest };
|
|
958
|
+
module.exports = { loadRegistry, readHostVersion, crossValidationSeed, _setValidatorForTest, _setGeneratorForTest };
|