New:Socket for Asana Is Now Available.Learn more
Get Started

arkgate

Package Overview
Dependencies
Maintainers
1
Versions
78
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

arkgate - npm Package Compare versions

Comparing version
4.8.0
to
4.8.1
dist/diagnosticCatalog-CSF4N3w8.d.ts

Sorry, the diff of this file is too big to display

+7
-2

@@ -14,3 +14,6 @@ /**

import { loadEffectiveArkRulesFromDisk } from './effective-contract-load.mjs';
import { loadInvariantCoverageInputs } from './invariant-coverage-io.mjs';
import {
invariantIdsFromCatalog,
loadInvariantCoverageInputs,
} from './invariant-coverage-io.mjs';
import { loadArkRuleFileHints } from './arkrule-file-hints.mjs';

@@ -71,3 +74,5 @@

const coverageInputs = hasInvariants
? loadInvariantCoverageInputs(root, facts)
? loadInvariantCoverageInputs(root, facts, {
invariantIds: invariantIdsFromCatalog(arkRulesLoad.arkRules),
})
: undefined;

@@ -74,0 +79,0 @@ // AR07: Tooling fileHints for orchestration-only / thin-adapter (reuse coverage contents when present).

@@ -66,6 +66,22 @@ /**

/**
* Declared invariant ids from an Effective catalog. Empty when the extra is off.
* @param {{ invariants?: Array<{ id?: unknown }> } | null | undefined} arkRules
* @returns {string[]}
*/
export function invariantIdsFromCatalog(arkRules) {
return (arkRules?.invariants ?? [])
.map((inv) => inv?.id)
.filter((id) => typeof id === 'string' && id.length > 0);
}
/**
* @param {string} root
* @param {{ files?: Array<{ path: string }> }} facts
* @param {{ testGlobs?: string[] }} [opts]
* @returns {{ fileContents: Record<string, string>, testFiles: string[], testGlobsMissing: boolean }}
* @param {{ testGlobs?: string[], invariantIds?: string[] }} [opts]
* @returns {{
* fileContents: Record<string, string>,
* testFiles: string[],
* testGlobsMissing: boolean,
* coverageBudgetExhausted: boolean,
* }}
*/

@@ -76,2 +92,12 @@ export function loadInvariantCoverageInputs(root, facts, opts = {}) {

const seen = new Set();
// Declared invariant ids. When present, a test file is RETAINED only if it
// mentions one: scanning is cheap (hundreds of small files), retaining is
// what costs memory. Without this the budget goes to whichever N tests the
// walk reaches first — an arbitrary order — so coverage is wrong on any repo
// with more test files than budget. Measured: 707 tests against a cap of 400.
const invariantIds = Array.isArray(opts.invariantIds)
? opts.invariantIds.filter((id) => typeof id === 'string' && id.length > 0)
: [];
const mentionsInvariant = (content) =>
invariantIds.length === 0 || invariantIds.some((id) => content.includes(id));
const testGlobs = Array.isArray(opts.testGlobs)

@@ -98,5 +124,9 @@ ? opts.testGlobs.filter((g) => typeof g === 'string' && g.length > 0)

const content = fs.readFileSync(absolute, 'utf8');
const asTest = forceAsTest || isTestPath(rel);
// A test that names no invariant is evidence of nothing: scan it, drop
// it, and let it cost no budget.
if (asTest && !mentionsInvariant(content)) return;
seen.add(rel);
fileContents[rel] = content;
if (forceAsTest || isTestPath(rel)) testFiles.push(rel);
if (asTest) testFiles.push(rel);
} catch {

@@ -107,2 +137,24 @@ // skip unreadable

// Tests FIRST, then production files.
//
// The order is load-bearing, not stylistic. `pushFile` stops at
// MAX_COVERAGE_FILES, and a real repo has far more production files than the
// budget — so walking facts first consumed the whole budget and the test walk
// pushed nothing. Coverage then reported `testGlobsMissing: true`, which the
// caller renders as "never-had-tests": a claim about the USER's repo that was
// actually about our own budget. Measured on a 4511-file project: every
// invariant reported uncovered while its test sat on disk with the invariant
// id in the describe title. Tests are tens of files, not thousands, so giving
// them the head of the budget costs the production scan nothing in practice.
const testWalkRoots = useCustomGlobs
? ['.', 'tests', 'test', 'src', '__tests__', 'spec']
: ['tests', 'test', 'src', '__tests__'];
for (const dir of testWalkRoots) {
const absDir = path.join(root, dir === '.' ? '' : dir);
if (!fs.existsSync(absDir)) continue;
walkTestFiles(absDir, root, (rel) => {
if (isTestPath(rel)) pushFile(rel, true);
});
}
for (const file of facts?.files ?? []) {

@@ -112,24 +164,9 @@ if (file?.path) pushFile(file.path);

if (useCustomGlobs) {
// Walk project roots and keep files matching custom globs.
for (const dir of ['.', 'tests', 'test', 'src', '__tests__', 'spec']) {
const absDir = path.join(root, dir === '.' ? '' : dir);
if (!fs.existsSync(absDir)) continue;
walkTestFiles(absDir, root, (rel) => {
if (isTestPath(rel)) pushFile(rel, true);
});
}
} else {
// Walk common test roots when facts only cover production include globs.
for (const dir of ['tests', 'test', 'src', '__tests__']) {
const absDir = path.join(root, dir);
if (!fs.existsSync(absDir)) continue;
walkTestFiles(absDir, root, (rel) => {
if (isTestPath(rel)) pushFile(rel, true);
});
}
}
const testGlobsMissing = testFiles.length === 0;
return { fileContents, testFiles, testGlobsMissing };
return {
fileContents,
testFiles,
testGlobsMissing,
coverageBudgetExhausted: seen.size >= MAX_COVERAGE_FILES,
};
}

@@ -136,0 +173,0 @@

@@ -41,2 +41,3 @@ /**

const testGlobsMissing = input.testGlobsMissing === true || testFiles.length === 0;
const coverageBudgetExhausted = input.coverageBudgetExhausted === true;
const coverage = [];

@@ -87,3 +88,5 @@ const violations = [];

message: partial
? `Invariant ${inv.id} coverage cannot be proven (test globs missing or empty); reporting partial, not covered (never-had-tests).`
? coverageBudgetExhausted
? `Invariant ${inv.id} coverage cannot be proven (coverage file budget exhausted); reporting partial, not covered.`
: `Invariant ${inv.id} coverage cannot be proven (test globs missing or empty); reporting partial, not covered (never-had-tests).`
: kind === 'tests-disappeared'

@@ -90,0 +93,0 @@ ? `Invariant ${inv.id} is not covered by a test title or declared symbol (tests-disappeared — suite exists).`

@@ -6,3 +6,6 @@ import { spawnSync } from 'node:child_process';

import { loadEffectiveArkRulesFromDisk } from './effective-contract-load.mjs';
import { loadInvariantCoverageInputs } from './invariant-coverage-io.mjs';
import {
invariantIdsFromCatalog,
loadInvariantCoverageInputs,
} from './invariant-coverage-io.mjs';
import { evaluateInvariantCoverage } from './invariant-coverage.mjs';

@@ -179,3 +182,5 @@

if ((candidateArkRules?.invariants?.length ?? 0) > 0) {
const coverageInputs = loadInvariantCoverageInputs(root, { files: [] });
const coverageInputs = loadInvariantCoverageInputs(root, { files: [] }, {
invariantIds: invariantIdsFromCatalog(candidateArkRules),
});
const evaluated = evaluateInvariantCoverage({

@@ -186,2 +191,3 @@ arkRules: candidateArkRules,

testGlobsMissing: coverageInputs.testGlobsMissing,
coverageBudgetExhausted: coverageInputs.coverageBudgetExhausted === true,
});

@@ -188,0 +194,0 @@ candidateInvariantCoverage = evaluated.coverage;

@@ -9,4 +9,7 @@ /**

import { evaluateInvariantCoverage } from './invariant-coverage.mjs';
import { loadInvariantCoverageInputs } from './invariant-coverage-io.mjs';
import {
invariantIdsFromCatalog,
loadInvariantCoverageInputs,
} from './invariant-coverage-io.mjs';
import {
EXTRA_MERGE_TEETH_GOVERNED_FLOOR,

@@ -93,3 +96,5 @@ composeMergePlanesHonesty,

invariants > 0
? loadInvariantCoverageInputs(root, facts ?? { files: [] })
? loadInvariantCoverageInputs(root, facts ?? { files: [] }, {
invariantIds: invariantIdsFromCatalog(loaded.arkRules),
})
: { fileContents: {}, testFiles: [], testGlobsMissing: false };

@@ -101,2 +106,3 @@ const coverage = evaluateInvariantCoverage({

testGlobsMissing: coverageInputs.testGlobsMissing,
coverageBudgetExhausted: coverageInputs.coverageBudgetExhausted === true,
});

@@ -103,0 +109,0 @@ const covById = new Map(

@@ -6,2 +6,11 @@ # Changelog

## 4.8.1 — 2026-08-30
**Patch** over **4.8.0**. ArkRules invariant coverage reads tests first and retains only files that mention a declared invariant id, so large repos no longer report `INVARIANT_UNCOVERED` / `never-had-tests` while covering tests sit on disk. Does not close `K01` / `Z09`. **No required config migration.**
**Status: published** (on npm `latest`; see `docs/releases/4.8.1.md`).
### Fixed
- **INVARIANT_UNCOVERED on large trees:** `loadInvariantCoverageInputs` spent `MAX_COVERAGE_FILES` (400) on production facts before walking tests. Any repo with more than 400 governed files got `testGlobsMissing: true` and a false *never-had-tests* claim. Tests walk first; with `invariantIds`, a test is retained only if it mentions a catalog id. Doctor and policy-delta use the same ids. When the file budget is exhausted, the diagnostic says so instead of claiming the suite never existed.
## 4.8.0 — 2026-08-29

@@ -8,0 +17,0 @@

@@ -1,2 +0,2 @@

export { k as AICodeGate, l as AICodeGateContext, m as AICodeGateOptions, n as AICodeGateResult, o as AICodeGateViolation, p as AIGateExtension, q as ANALYSIS_IR_SCHEMA_VERSION, r as ARK_ANALYSIS_RESULT_SCHEMA, s as ARK_ANALYSIS_RESULT_SCHEMA_VERSION, t as ARK_DESIGN_DELTA_SCHEMA_VERSION, u as ARK_ENFORCEMENT_STATE_SCHEMA_VERSION, v as AdapterCompletenessReason, w as AdapterDiagnostic, x as AdapterResult, y as AdapterSeverity, z as AdapterViolationInput, B as AnalysisCapabilityUse, C as AnalysisCompilerOptions, D as AnalysisCompleteness, F as AnalysisContract, G as AnalysisEvidence, H as AnalysisFile, I as AnalysisFileChange, J as AnalysisFileInput, K as AnalysisImportEdge, L as AnalysisIr, M as AnalysisMode, N as AnalysisResult, O as AnalysisViolation, P as AnalyzeArchitectureConvergenceInput, Q as AnalyzeChangeInput, S as AnalyzePolicyDeltaInput, T as AnalyzeProjectInput, U as AnalyzeResolvedProjectInput, V as ArchitectureActualChange, W as ArchitectureChangeMap, X as ArchitectureChangeMapContract, Y as ArchitectureChangeMapDependency, Z as ArchitectureChangeMapFile, _ as ArchitectureChangeOperation, $ as ArchitectureConvergenceClassification, a0 as ArchitectureConvergenceFinding, a1 as ArchitectureConvergenceResult, a2 as ArchitectureDependency, a3 as ArchitectureEngineEdge, a4 as ArchitectureEngineResult, a5 as ArchitectureEngineViolation, a6 as ArkDesignDeltaResult, a7 as ArkEnforcementHost, a8 as ArkEnforcementState, aa as ChangePreflightResult, ac as CollectAnalysisConfigWarningsInput, ad as DIAGNOSTIC_CATALOG, ae as DIAGNOSTIC_CATALOG_SCHEMA_VERSION, af as DIAGNOSTIC_DOCS_RELATIVE_PATH, ag as DIAGNOSTIC_RULE_IDS, ah as DesignDeltaChange, ai as DesignDeltaEnforcementScope, aj as DesignDeltaIdentity, ak as DesignSmellEvidence, al as DesignSmellFinding, am as DesignSmellId, an as DiagnosticCatalogEntry, ao as DiagnosticCategory, ap as EnforcementBoundaryState, aq as EnforcementEvidence, ar as EnforcementEvidenceField, as as EnforcementVerification, at as EvaluateArchitectureGraphInput, au as ForbiddenCapabilityUse, aw as POLICY_DELTA_SCHEMA_VERSION, ax as PolicyDelta, ay as PolicyDeltaAcknowledgement, az as PolicyDeltaAnalysis, aA as PolicyDeltaClassification, aB as PolicyDeltaFinding, aC as PreflightResolvedChangeInput, aD as PreparedChangeFile, aE as RESOLVED_CANDIDATE_FACTS_SCHEMA, aF as RESOLVED_CANDIDATE_FACTS_SCHEMA_VERSION, aG as ResolvedAmbientFact, aH as ResolvedAnalysisFile, aI as ResolvedAnalysisIr, aJ as ResolvedAnalysisResult, e as ResolvedArkRunCompositionRootHitFact, a as ResolvedArkRunDeclarationFact, b as ResolvedArkRunKernelCallFact, R as ResolvedArkRunKernelCallKind, c as ResolvedArkRunManagedNewFact, aK as ResolvedCandidateFacts, aL as ResolvedCandidateFactsInput, aM as ResolvedCapability, aN as ResolvedCapabilityFact, aO as ResolvedChangePreflightResult, d as ResolvedDependencyFact, aP as ResolvedDependencyKind, aQ as ResolvedDependencyState, aR as ResolvedFactsCompleteness, f as ResolvedFactsReason, aS as ResolvedFileFact, aT as ResolvedIntentReferenceFact, aU as ResolvedPublishFact, aV as ResolvedSafetyFact, aW as ResolvedSafetyKind, aX as ResolvedSafetyReport, aY as SemanticDependency, aZ as SemanticDependencyKind, b2 as analyzeArchitectureConvergence, b3 as analyzeChange, b4 as analyzePolicyDelta, b5 as analyzeProject, b6 as analyzeResolvedProject, b9 as catalogFixForRuleId, ba as catalogWhyForRuleId, bb as classifyArkPolicyDelta, bc as collectAnalysisConfigWarnings, be as collectForbiddenCapabilityUses, bf as createAICodeGate, bg as createAdapterResult, bh as createArchitectureProfile, bi as createArchitectureProfileFromArkConfig, bj as createElevenLayerArkConfig, bk as createResolvedCandidateFacts, bm as detectArchitectureCycles, bn as deterministicHash, bo as diagnosticDocsFragment, bp as diagnosticDocsPath, bq as elevenLayerProfile, br as evaluateArchitectureGraph, bu as explainViolation, bw as extractSemanticDependencies, bx as getDiagnosticCatalogEntry, by as isCataloguedOrArkRuleFamily, bz as isKnownDiagnosticCode, bA as loadContract, bB as loadResolvedCandidateFacts, bC as policyDeltaAcknowledgementMatches, bD as preflightChange, bE as preflightResolvedChange, bF as resolvedFactsEvidenceRequirementsHash, bG as serializeDiagnosticCatalog, bH as stableSerialize, bI as toAdapterDiagnostic, bJ as version } from '../diagnosticCatalog-RiKPUFRG.js';
export { k as AICodeGate, l as AICodeGateContext, m as AICodeGateOptions, n as AICodeGateResult, o as AICodeGateViolation, p as AIGateExtension, q as ANALYSIS_IR_SCHEMA_VERSION, r as ARK_ANALYSIS_RESULT_SCHEMA, s as ARK_ANALYSIS_RESULT_SCHEMA_VERSION, t as ARK_DESIGN_DELTA_SCHEMA_VERSION, u as ARK_ENFORCEMENT_STATE_SCHEMA_VERSION, v as AdapterCompletenessReason, w as AdapterDiagnostic, x as AdapterResult, y as AdapterSeverity, z as AdapterViolationInput, B as AnalysisCapabilityUse, C as AnalysisCompilerOptions, D as AnalysisCompleteness, F as AnalysisContract, G as AnalysisEvidence, H as AnalysisFile, I as AnalysisFileChange, J as AnalysisFileInput, K as AnalysisImportEdge, L as AnalysisIr, M as AnalysisMode, N as AnalysisResult, O as AnalysisViolation, P as AnalyzeArchitectureConvergenceInput, Q as AnalyzeChangeInput, S as AnalyzePolicyDeltaInput, T as AnalyzeProjectInput, U as AnalyzeResolvedProjectInput, V as ArchitectureActualChange, W as ArchitectureChangeMap, X as ArchitectureChangeMapContract, Y as ArchitectureChangeMapDependency, Z as ArchitectureChangeMapFile, _ as ArchitectureChangeOperation, $ as ArchitectureConvergenceClassification, a0 as ArchitectureConvergenceFinding, a1 as ArchitectureConvergenceResult, a2 as ArchitectureDependency, a3 as ArchitectureEngineEdge, a4 as ArchitectureEngineResult, a5 as ArchitectureEngineViolation, a6 as ArkDesignDeltaResult, a7 as ArkEnforcementHost, a8 as ArkEnforcementState, aa as ChangePreflightResult, ac as CollectAnalysisConfigWarningsInput, ad as DIAGNOSTIC_CATALOG, ae as DIAGNOSTIC_CATALOG_SCHEMA_VERSION, af as DIAGNOSTIC_DOCS_RELATIVE_PATH, ag as DIAGNOSTIC_RULE_IDS, ah as DesignDeltaChange, ai as DesignDeltaEnforcementScope, aj as DesignDeltaIdentity, ak as DesignSmellEvidence, al as DesignSmellFinding, am as DesignSmellId, an as DiagnosticCatalogEntry, ao as DiagnosticCategory, ap as EnforcementBoundaryState, aq as EnforcementEvidence, ar as EnforcementEvidenceField, as as EnforcementVerification, at as EvaluateArchitectureGraphInput, au as ForbiddenCapabilityUse, aw as POLICY_DELTA_SCHEMA_VERSION, ax as PolicyDelta, ay as PolicyDeltaAcknowledgement, az as PolicyDeltaAnalysis, aA as PolicyDeltaClassification, aB as PolicyDeltaFinding, aC as PreflightResolvedChangeInput, aD as PreparedChangeFile, aE as RESOLVED_CANDIDATE_FACTS_SCHEMA, aF as RESOLVED_CANDIDATE_FACTS_SCHEMA_VERSION, aG as ResolvedAmbientFact, aH as ResolvedAnalysisFile, aI as ResolvedAnalysisIr, aJ as ResolvedAnalysisResult, e as ResolvedArkRunCompositionRootHitFact, a as ResolvedArkRunDeclarationFact, b as ResolvedArkRunKernelCallFact, R as ResolvedArkRunKernelCallKind, c as ResolvedArkRunManagedNewFact, aK as ResolvedCandidateFacts, aL as ResolvedCandidateFactsInput, aM as ResolvedCapability, aN as ResolvedCapabilityFact, aO as ResolvedChangePreflightResult, d as ResolvedDependencyFact, aP as ResolvedDependencyKind, aQ as ResolvedDependencyState, aR as ResolvedFactsCompleteness, f as ResolvedFactsReason, aS as ResolvedFileFact, aT as ResolvedIntentReferenceFact, aU as ResolvedPublishFact, aV as ResolvedSafetyFact, aW as ResolvedSafetyKind, aX as ResolvedSafetyReport, aY as SemanticDependency, aZ as SemanticDependencyKind, b2 as analyzeArchitectureConvergence, b3 as analyzeChange, b4 as analyzePolicyDelta, b5 as analyzeProject, b6 as analyzeResolvedProject, b9 as catalogFixForRuleId, ba as catalogWhyForRuleId, bb as classifyArkPolicyDelta, bc as collectAnalysisConfigWarnings, be as collectForbiddenCapabilityUses, bf as createAICodeGate, bg as createAdapterResult, bh as createArchitectureProfile, bi as createArchitectureProfileFromArkConfig, bj as createElevenLayerArkConfig, bk as createResolvedCandidateFacts, bm as detectArchitectureCycles, bn as deterministicHash, bo as diagnosticDocsFragment, bp as diagnosticDocsPath, bq as elevenLayerProfile, br as evaluateArchitectureGraph, bu as explainViolation, bw as extractSemanticDependencies, bx as getDiagnosticCatalogEntry, by as isCataloguedOrArkRuleFamily, bz as isKnownDiagnosticCode, bA as loadContract, bB as loadResolvedCandidateFacts, bC as policyDeltaAcknowledgementMatches, bD as preflightChange, bE as preflightResolvedChange, bF as resolvedFactsEvidenceRequirementsHash, bG as serializeDiagnosticCatalog, bH as stableSerialize, bI as toAdapterDiagnostic, bJ as version } from '../diagnosticCatalog-CSF4N3w8.js';
import { P as PolicyViolation, g as PolicySeverity, h as PolicyEnforcementMode, i as Policy, I as IntentName, j as IntentCreator, k as IntentRelationship, b as ArchitectureProfile, D as DomainEvent } from '../types-DCSlrRnV.js';

@@ -3,0 +3,0 @@ export { A as ArchitectureLayer, a as ArchitectureLayerConfig, c as ArchitectureRule, d as ArkCheckConfig, l as CorrelationId, C as CreateArchitectureProfileFromArkConfigOptions, e as CreateArchitectureProfileOptions, f as CreateElevenLayerArkConfigOptions, E as EventMetadata, m as IntentRelationshipKind } from '../types-DCSlrRnV.js';

@@ -221,3 +221,3 @@ # ArkGate package surface policy

Ship notes for a version live under [releases/](https://github.com/pedroknigge/arkgate/tree/main/docs/releases)
(current published: [4.8.0.md](https://github.com/pedroknigge/arkgate/blob/main/docs/releases/4.8.0.md);
(current published: [4.8.1.md](https://github.com/pedroknigge/arkgate/blob/main/docs/releases/4.8.1.md);
prior published: [4.7.6.md](https://github.com/pedroknigge/arkgate/blob/main/docs/releases/4.7.6.md);

@@ -224,0 +224,0 @@ prior published: [4.7.5.md](https://github.com/pedroknigge/arkgate/blob/main/docs/releases/4.7.5.md);

@@ -65,3 +65,3 @@ # ArkGate documentation

Current published: [releases/4.8.0.md](releases/4.8.0.md) (`arkgate@4.8.0` on npm `latest`; does not close `K01`).
Current published: [releases/4.8.1.md](releases/4.8.1.md) (`arkgate@4.8.1` on npm `latest`; does not close `K01`).
Prior: [releases/4.7.6.md](releases/4.7.6.md) · [4.7.5](releases/4.7.5.md) · [4.7.4](releases/4.7.4.md) · [4.7.3](releases/4.7.3.md) · [4.7.2](releases/4.7.2.md) · [4.7.1](releases/4.7.1.md) · [4.7.0](releases/4.7.0.md) · [4.6.7](releases/4.6.7.md) · [4.6.6](releases/4.6.6.md) · [4.6.5](releases/4.6.5.md) · [4.6.4](releases/4.6.4.md) · [4.6.3](releases/4.6.3.md) · [4.6.2](releases/4.6.2.md) · [4.6.1](releases/4.6.1.md) · [4.6.0](releases/4.6.0.md).

@@ -68,0 +68,0 @@ Older notes: [releases/](releases/). Config: [configuration.md](configuration.md).

{
"name": "arkgate",
"version": "4.8.0",
"version": "4.8.1",
"description": "When the agent writes a bad import, the write doesn’t land. The same check fails the pull request.",

@@ -5,0 +5,0 @@ "type": "module",

@@ -32,7 +32,7 @@ <div align="center">

> **ArkGate 4.8.0** is on npm `latest`. Write. Check. Ship. Adopted = required GitHub
> **ArkGate 4.8.1** is on npm `latest`. Write. Check. Ship. Adopted = required GitHub
> status running `arkgate-check --strict-merge`, or an explicit `advisory-only` stance.
> Status is compact (`arkgate-check --doctor`; `--all` for Details). Optional **ArkRun**
> (`arkgate/runtime`) is an in-memory runtime — not Postgres. `@arkgate/runtime` is deprecated.
> [4.8.0](docs/releases/4.8.0.md) · [4.7.6](docs/releases/4.7.6.md) · [Docs hub](docs/README.md) · [Voice](docs/product-voice.md)
> [4.8.1](docs/releases/4.8.1.md) · [4.8.0](docs/releases/4.8.0.md) · [4.7.6](docs/releases/4.7.6.md) · [Docs hub](docs/README.md) · [Voice](docs/product-voice.md)

@@ -270,3 +270,3 @@ ---

| Security | [SECURITY.md](SECURITY.md) |
| Current published (4.8.0 on npm `latest`) | [docs/releases/4.8.0.md](docs/releases/4.8.0.md) · [CHANGELOG](CHANGELOG.md) |
| Current published (4.8.1 on npm `latest`) | [docs/releases/4.8.1.md](docs/releases/4.8.1.md) · [CHANGELOG](CHANGELOG.md) |
| Prior published (4.7.6) | [docs/releases/4.7.6.md](docs/releases/4.7.6.md) |

@@ -273,0 +273,0 @@ | Prior published (4.7.5) | [docs/releases/4.7.5.md](docs/releases/4.7.5.md) |

@@ -9,3 +9,3 @@ {

},
"version": "4.8.0",
"version": "4.8.1",
"packages": [

@@ -15,3 +15,3 @@ {

"identifier": "arkgate",
"version": "4.8.0",
"version": "4.8.1",
"runtimeHint": "npx",

@@ -18,0 +18,0 @@ "transport": {

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display