arkgate 4.8.23 → 4.8.24
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/CHANGELOG.md +68 -0
- package/README.md +7 -5
- package/bin/ark-check-runtime.mjs +24 -77
- package/bin/ark-dashboard.mjs +56 -53
- package/bin/ark-layer-match.mjs +596 -112
- package/bin/ark-mcp-runtime.mjs +412 -138
- package/bin/ark-mcp.mjs +68 -4
- package/bin/ark-shared.mjs +39 -0
- package/bin/ark.mjs +65 -97
- package/bin/lib/adapter-contract-types.mjs +5 -0
- package/bin/lib/adapter-contract.mjs +15 -0
- package/bin/lib/agent-projection-command.mjs +5 -1
- package/bin/lib/analysis-engine.mjs +15 -11
- package/bin/lib/architecture-scan.mjs +50 -6
- package/bin/lib/ark-order-doctor.mjs +1 -1
- package/bin/lib/ark-order-facts.mjs +410 -15
- package/bin/lib/ark-order-invariants.mjs +51 -9
- package/bin/lib/ark-order-sensors.mjs +28 -101
- package/bin/lib/ark-order-types.mjs +2 -0
- package/bin/lib/ark-run-doctor.mjs +14 -0
- package/bin/lib/ark-run-facts.mjs +434 -11
- package/bin/lib/ark-run-sensors.mjs +5 -3
- package/bin/lib/arkgate-pins.mjs +91 -0
- package/bin/lib/arkrules-sensors.mjs +50 -249
- package/bin/lib/check-args.mjs +23 -1
- package/bin/lib/ci-and-commands.mjs +16 -6
- package/bin/lib/class-source-scan.mjs +479 -0
- package/bin/lib/codex-home.mjs +4 -2
- package/bin/lib/config-contract-slices.mjs +701 -0
- package/bin/lib/config-contract.mjs +5 -493
- package/bin/lib/config-warnings.mjs +32 -0
- package/bin/lib/dashboard-cli.mjs +62 -0
- package/bin/lib/design-delta.mjs +1 -1
- package/bin/lib/diagnostic-catalog.mjs +16 -9
- package/bin/lib/doctor-advisories.mjs +25 -1
- package/bin/lib/doctor-next-actions.mjs +17 -2
- package/bin/lib/doctor-plan.mjs +6 -8
- package/bin/lib/effective-contract-load.mjs +121 -59
- package/bin/lib/enforcement-profiles.mjs +40 -4
- package/bin/lib/first-run-help.mjs +3 -2
- package/bin/lib/flat-parent-importers.mjs +137 -0
- package/bin/lib/flat-parent-pilot.mjs +40 -100
- package/bin/lib/gate-files.mjs +29 -2
- package/bin/lib/git-change-scope.mjs +109 -0
- package/bin/lib/github-enforcement.mjs +1 -1
- package/bin/lib/hook-templates.mjs +18 -16
- package/bin/lib/host-support-matrix.mjs +3 -1
- package/bin/lib/import-resolve.mjs +13 -1
- package/bin/lib/install-migrate.mjs +50 -73
- package/bin/lib/invariant-coverage.mjs +59 -11
- package/bin/lib/mcp-adoption.mjs +9 -1
- package/bin/lib/mcp-hook-payload.mjs +401 -61
- package/bin/lib/package-manager.mjs +59 -1
- package/bin/lib/passthrough-commands.mjs +83 -0
- package/bin/lib/persistence-write-hint.mjs +81 -0
- package/bin/lib/pin-dependent-gates.mjs +117 -0
- package/bin/lib/policy-delta-io.mjs +168 -10
- package/bin/lib/prepare-change.mjs +120 -6
- package/bin/lib/prepare-write.mjs +1 -0
- package/bin/lib/presets.mjs +3 -5
- package/bin/lib/remediation.mjs +23 -4
- package/bin/lib/resolved-candidate-facts.mjs +315 -55
- package/bin/lib/rules-inventory.mjs +22 -3
- package/bin/lib/rules-under-contract.mjs +179 -5
- package/bin/lib/scan-files.mjs +32 -0
- package/bin/lib/snippet-analysis.mjs +140 -6
- package/bin/lib/source-policy.mjs +34 -0
- package/bin/lib/stable-hash.mjs +90 -0
- package/bin/lib/start-install-recovery.mjs +71 -1
- package/bin/lib/start-preview.mjs +30 -0
- package/bin/lib/status-command.mjs +33 -4
- package/bin/lib/status-manifest.mjs +32 -4
- package/bin/lib/team-parliament-io.mjs +77 -75
- package/bin/lib/team-parliament.mjs +6 -1
- package/bin/lib/write-path-capabilities.mjs +4 -2
- package/dist/chunk-A5EIY3HI.cjs +5 -0
- package/dist/chunk-MBXCFLO4.js +16 -0
- package/dist/chunk-RNQHRDCQ.cjs +16 -0
- package/dist/chunk-SVSQVGFJ.js +5 -0
- package/dist/{configTypes-Bbf_MFGe.d.ts → configTypes-BJbaeoj4.d.cts} +18 -3
- package/dist/configTypes-BJbaeoj4.d.ts +246 -0
- package/dist/eslint/index.cjs +17 -4
- package/dist/eslint/index.d.cts +359 -0
- package/dist/eslint/index.d.ts +130 -156
- package/dist/eslint/index.js +10 -4
- package/dist/index.cjs +35 -34
- package/dist/index.d.cts +5475 -0
- package/dist/index.d.ts +3312 -299
- package/dist/index.js +35 -34
- package/dist/inspectorListen-6DQVJ4DC.js +1 -0
- package/dist/inspectorListen-KGMIQ2TF.cjs +1 -0
- package/dist/nestjs/index.cjs +1 -18
- package/dist/nestjs/index.d.cts +22 -0
- package/dist/nestjs/index.d.ts +1 -3
- package/dist/nestjs/index.js +1 -18
- package/dist/order/index.cjs +1 -1
- package/dist/order/index.d.cts +155 -0
- package/dist/order/index.d.ts +15 -3
- package/dist/order/index.js +1 -1
- package/dist/runtime/index.cjs +13 -30
- package/dist/{diagnosticCatalog-35mrwAHe.d.ts → runtime/index.d.cts} +804 -290
- package/dist/runtime/index.d.ts +2678 -108
- package/dist/runtime/index.js +13 -30
- package/dist/{types-Bdj32QwA.d.ts → types-DRinG-vT.d.cts} +576 -140
- package/dist/types-DRinG-vT.d.ts +1792 -0
- package/docs/README.md +2 -1
- package/docs/agent-guide.md +84 -15
- package/docs/ai-gates.md +160 -26
- package/docs/arkorder.md +32 -15
- package/docs/brownfield-adoption.md +5 -1
- package/docs/configuration.md +196 -26
- package/docs/develop.md +2 -1
- package/docs/diagnostics.md +96 -19
- package/docs/package-surface.md +31 -8
- package/docs/product-voice.md +1 -1
- package/package.json +59 -18
- package/schemas/ark.analysis-result.schema.json +15 -0
- package/schemas/ark.config.schema.json +47 -10
- package/schemas/ark.resolved-candidate-facts.schema.json +1 -1
- package/schemas/ark.status-manifest.schema.json +22 -0
- package/server.json +3 -9
- package/templates/agent-skills/README.md +1 -1
- package/templates/agent-skills/ark-adopt/SKILL.md +4 -1
- package/templates/agent-skills/ark-order/SKILL.md +4 -2
- package/templates/agent-skills/ark-runtime/SKILL.md +6 -1
- package/templates/arkrules/PersistenceAdapters.json +1 -1
- package/templates/arkrules/PresentationAdapters.json +1 -1
- package/templates/skills/ark-adopt.md +4 -1
- package/templates/skills/ark-order.md +4 -2
- package/templates/skills/ark-runtime.md +6 -1
- package/dist/types-Ik_OakcI.d.ts +0 -183
|
@@ -246,6 +246,21 @@
|
|
|
246
246
|
"arkruleSource": {
|
|
247
247
|
"type": "string",
|
|
248
248
|
"minLength": 1
|
|
249
|
+
},
|
|
250
|
+
"reasonId": {
|
|
251
|
+
"enum": [
|
|
252
|
+
"CROSS_PARENT_SLICE",
|
|
253
|
+
"CROSS_SIBLING_SLICE",
|
|
254
|
+
"CROSS_PARENT_VIA_SHARED"
|
|
255
|
+
]
|
|
256
|
+
},
|
|
257
|
+
"universeFrom": {
|
|
258
|
+
"type": "string",
|
|
259
|
+
"minLength": 1
|
|
260
|
+
},
|
|
261
|
+
"universeTo": {
|
|
262
|
+
"type": "string",
|
|
263
|
+
"minLength": 1
|
|
249
264
|
}
|
|
250
265
|
}
|
|
251
266
|
},
|
|
@@ -804,7 +804,7 @@
|
|
|
804
804
|
"path",
|
|
805
805
|
"stars"
|
|
806
806
|
],
|
|
807
|
-
"description": "How a starred sliceFolders prefix is named. Absent and path keep today's ids (every literal and star binding). stars keeps the last literal plus
|
|
807
|
+
"description": "How a starred sliceFolders prefix is named. Absent and path keep today's ids (every literal and star binding). stars keeps the last literal plus every star binding (a star before the last literal is kept too), so parallel trees share one feature id. Bare names are unchanged."
|
|
808
808
|
},
|
|
809
809
|
"sharedRoots": {
|
|
810
810
|
"type": "array",
|
|
@@ -838,12 +838,41 @@
|
|
|
838
838
|
}
|
|
839
839
|
},
|
|
840
840
|
"sharedImportsSlice": {
|
|
841
|
-
"
|
|
842
|
-
"
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
841
|
+
"description": "deny blocks every shared-root import of a slice. deny-cross-parent leaves that hop as a warning and, in ark-check and CI only, reports a slice that reaches another universe through a shared root. The write hook and ESLint see one edge and do not block it. The object form { mode: \"deny-cross-parent\", stopAt } names composition roots (bootstrap, DI registrations) the whole-graph walk never starts at or passes through; a stop file must still sit under sharedRoots, and stopAt does not silence the direct SHARED_IMPORTS_SLICE warning. arkgate 4.8.22 and older reject deny-cross-parent. arkgate 4.8.23 and older reject the object form (must be one of deny, deny-cross-parent).",
|
|
842
|
+
"oneOf": [
|
|
843
|
+
{
|
|
844
|
+
"type": "string",
|
|
845
|
+
"enum": [
|
|
846
|
+
"deny",
|
|
847
|
+
"deny-cross-parent"
|
|
848
|
+
]
|
|
849
|
+
},
|
|
850
|
+
{
|
|
851
|
+
"type": "object",
|
|
852
|
+
"additionalProperties": false,
|
|
853
|
+
"required": [
|
|
854
|
+
"mode",
|
|
855
|
+
"stopAt"
|
|
856
|
+
],
|
|
857
|
+
"properties": {
|
|
858
|
+
"mode": {
|
|
859
|
+
"type": "string",
|
|
860
|
+
"enum": [
|
|
861
|
+
"deny-cross-parent"
|
|
862
|
+
]
|
|
863
|
+
},
|
|
864
|
+
"stopAt": {
|
|
865
|
+
"type": "array",
|
|
866
|
+
"items": {
|
|
867
|
+
"type": "string",
|
|
868
|
+
"minLength": 1
|
|
869
|
+
},
|
|
870
|
+
"uniqueItems": true,
|
|
871
|
+
"minItems": 1
|
|
872
|
+
}
|
|
873
|
+
}
|
|
874
|
+
}
|
|
875
|
+
]
|
|
847
876
|
},
|
|
848
877
|
"childSlices": {
|
|
849
878
|
"type": "object",
|
|
@@ -851,7 +880,7 @@
|
|
|
851
880
|
"required": [
|
|
852
881
|
"sliceFolders"
|
|
853
882
|
],
|
|
854
|
-
"description": "Optional inner wall under this rule. Absent keeps today's universe wall. sliceFolders names children.
|
|
883
|
+
"description": "Optional inner wall under this rule. Runs only on a rule with peerIsolation: true and allowed: false; elsewhere it is inert and ark-check warns CONFIG_CHILD_SLICES_INERT (config load still accepts it, as 4.8.23 did). Absent keeps today's universe wall. sliceFolders names children. Flat files are universe common, and so is a commonFolders directory directly under the universe (a folder of that name inside a child belongs to that child). siblings is \"deny\" (default), \"advisory\", or { default, enforce, ratchet }. parentMayImportChild defaults to false. message is the text for inner-wall findings. allowedCrossSlice may use a whole-segment *. It clears only a sibling crossing. Cross-parent has no advisory knob. arkgate 4.8.22 and older reject this key. A build that still rejects unknown childSlices fields rejects allowedCrossSlice at config load. A build that still types siblings as a string enum rejects the object at config load.",
|
|
855
884
|
"properties": {
|
|
856
885
|
"sliceFolders": {
|
|
857
886
|
"type": "array",
|
|
@@ -879,7 +908,7 @@
|
|
|
879
908
|
"minItems": 1
|
|
880
909
|
},
|
|
881
910
|
"siblings": {
|
|
882
|
-
"description": "\"deny\" or \"advisory\", or { default, enforce } so listed subtrees are errors while the default stays advisory. A string-enum build rejects the object at config load (must be one of deny, advisory).",
|
|
911
|
+
"description": "\"deny\" or \"advisory\", or { default, enforce, ratchet } so listed subtrees are errors while the default stays advisory. ratchet absent: a new advisory crossing fails only when the baseline in use already records an advisory crossing of this rule. ratchet true: any unrecorded advisory crossing fails when a baseline is in use. ratchet false: measure only, never fails. A string-enum build rejects the object at config load (must be one of deny, advisory). arkgate 4.8.23 and older reject ratchet (unknown field).",
|
|
883
912
|
"oneOf": [
|
|
884
913
|
{
|
|
885
914
|
"type": "string",
|
|
@@ -909,6 +938,9 @@
|
|
|
909
938
|
"minLength": 1
|
|
910
939
|
},
|
|
911
940
|
"uniqueItems": true
|
|
941
|
+
},
|
|
942
|
+
"ratchet": {
|
|
943
|
+
"type": "boolean"
|
|
912
944
|
}
|
|
913
945
|
}
|
|
914
946
|
}
|
|
@@ -917,10 +949,15 @@
|
|
|
917
949
|
"parentMayImportChild": {
|
|
918
950
|
"type": "boolean"
|
|
919
951
|
},
|
|
952
|
+
"message": {
|
|
953
|
+
"type": "string",
|
|
954
|
+
"minLength": 1,
|
|
955
|
+
"description": "Text for inner-wall findings (CROSS_SIBLING_SLICE and universe common importing a child). The rule message stays the universe-wall text (CROSS_PARENT_SLICE and fail-closed denies). Absent: ArkGate default text, never the rule message. arkgate 4.8.23 and older reject this field (unknown field)."
|
|
956
|
+
},
|
|
920
957
|
"sliceAliases": {
|
|
921
958
|
"type": "array",
|
|
922
959
|
"minItems": 1,
|
|
923
|
-
"description": "Maps a source path glob onto a child slice id (universe id plus one child segment) so files outside the slice trees take that universe and child for both walls. A bare name, a universe id alone,
|
|
960
|
+
"description": "Maps a source path glob onto a child slice id (universe id plus one child segment) so files outside the slice trees take that universe and child for both walls. A path without a wildcard also covers everything under it, as sharedRoots does. A bare name, a universe id alone, a target outside every universe shape, and a wildcard in to are rejected. Under stars identity a target written against the 4.8.23 stars id (star bindings before the last literal dropped, e.g. api/v1/x for modules/*/api/*) still loads when it maps to one universe shape, and ark-check warns CONFIG_SLICE_LEGACY_STARS_ID with the new id; it is rejected only when it maps to more than one shape. Config load checks only the shape; doctor reports a target universe no file belongs to. The glob may not overlap a slice folder, and two aliases may not match the same file. Doctor lists each alias as an owed move. A build that rejects unknown childSlices fields fails at config load (unknown field). arkgate 4.8.22 and older reject childSlices.",
|
|
924
961
|
"items": {
|
|
925
962
|
"type": "object",
|
|
926
963
|
"additionalProperties": false,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://unpkg.com/arkgate@3/schemas/ark.resolved-candidate-facts.schema.json","title":"ArkGate resolved candidate facts","type":"object","additionalProperties":false,"required":["schemaVersion","completeness","completenessReasons","resolverIdentity","compilerIdentity","compilerOptionsHash","tsconfigHash","candidateTreeHash","evidenceRequirementsHash","files","dependencies","capabilityUses","ambientUses","publishCalls","intentReferences","safetyUses","factsHash"],"properties":{"schemaVersion":{"enum":["1.0","1.1","1.2"]},"completeness":{"enum":["complete","partial","unavailable"]},"completenessReasons":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["code","message"],"properties":{"code":{"type":"string","minLength":1},"message":{"type":"string","minLength":1},"file":{"type":"string","minLength":1,"pattern":"^(?!/)(?![A-Za-z]:/)(?!.*\\\\)(?!.*//)(?!.*(?:^|/)\\.{1,2}(?:/|$))(?!.*[\\u0000-\\u001f\\u007f])(?!.*\\/$).+$"}}}},"resolverIdentity":{"type":"string","minLength":1},"compilerIdentity":{"type":"string","minLength":1},"compilerOptionsHash":{"type":"string","minLength":1},"tsconfigHash":{"type":"string","minLength":1},"candidateTreeHash":{"type":"string","minLength":1},"evidenceRequirementsHash":{"type":"string","minLength":1},"projectPackageName":{"type":"string","minLength":1},"files":{"type":"array","uniqueItems":true,"items":{"type":"object","additionalProperties":false,"required":["path","contentHash","parseStatus","parseDiagnosticCount","exportsOnlyTypes","typeOnlyExportNames","hasTopLevelSideEffects"],"properties":{"path":{"type":"string","minLength":1,"pattern":"^(?!/)(?![A-Za-z]:/)(?!.*\\\\)(?!.*//)(?!.*(?:^|/)\\.{1,2}(?:/|$))(?!.*[\\u0000-\\u001f\\u007f])(?!.*\\/$).+$"},"contentHash":{"type":"string","minLength":1},"parseStatus":{"enum":["parsed","invalid"]},"parseDiagnosticCount":{"type":"integer","minimum":0},"exportsOnlyTypes":{"type":"boolean"},"typeOnlyExportNames":{"type":"array","items":{"type":"string","minLength":1}},"hasTopLevelSideEffects":{"type":"boolean"}},"allOf":[{"if":{"properties":{"parseStatus":{"const":"parsed"}}},"then":{"properties":{"parseDiagnosticCount":{"const":0}}}},{"if":{"properties":{"parseStatus":{"const":"invalid"}}},"then":{"properties":{"parseDiagnosticCount":{"minimum":1}}}}]}},"dependencies":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["from","kind","typeOnly","line","resolution"],"properties":{"from":{"type":"string","minLength":1,"pattern":"^(?!/)(?![A-Za-z]:/)(?!.*\\\\)(?!.*//)(?!.*(?:^|/)\\.{1,2}(?:/|$))(?!.*[\\u0000-\\u001f\\u007f])(?!.*\\/$).+$"},"specifier":{"type":"string","minLength":1},"kind":{"enum":["import","export","dynamic-import","require"]},"typeOnly":{"type":"boolean"},"line":{"type":"integer","minimum":1},"resolution":{"enum":["resolved-project","resolved-external","unresolved","dynamic"]},"target":{"type":"string","minLength":1,"pattern":"^(?!/)(?![A-Za-z]:/)(?!.*\\\\)(?!.*//)(?!.*(?:^|/)\\.{1,2}(?:/|$))(?!.*[\\u0000-\\u001f\\u007f])(?!.*\\/$).+$"},"namedBindings":{"type":"array","items":{"type":"string","minLength":1}},"targetTypeOnlyExports":{"type":"boolean"},"sourcePureTypeModule":{"type":"boolean"},"namedBindingsTypeOnly":{"type":"boolean"},"portProofEligible":{"type":"boolean"}},"allOf":[{"if":{"properties":{"resolution":{"const":"resolved-project"}}},"then":{"required":["target"]},"else":{"not":{"required":["target"]}}},{"if":{"properties":{"resolution":{"const":"dynamic"}}},"else":{"required":["specifier"]}}]}},"capabilityUses":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["file","line","symbol","capability","source"],"properties":{"file":{"type":"string","minLength":1,"pattern":"^(?!/)(?![A-Za-z]:/)(?!.*\\\\)(?!.*//)(?!.*(?:^|/)\\.{1,2}(?:/|$))(?!.*[\\u0000-\\u001f\\u007f])(?!.*\\/$).+$"},"line":{"type":"integer","minimum":1},"symbol":{"type":"string","minLength":1},"capability":{"enum":["network","filesystem","clock","randomness","environment","process","persistence"]},"source":{"enum":["ambient-global","import-based"]}}}},"ambientUses":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["file","line","symbol"],"properties":{"file":{"type":"string","minLength":1,"pattern":"^(?!/)(?![A-Za-z]:/)(?!.*\\\\)(?!.*//)(?!.*(?:^|/)\\.{1,2}(?:/|$))(?!.*[\\u0000-\\u001f\\u007f])(?!.*\\/$).+$"},"line":{"type":"integer","minimum":1},"symbol":{"type":"string","minLength":1}}}},"publishCalls":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["file","line","objectHasIntent","arkPublishCandidate","hasSource"],"properties":{"file":{"type":"string","minLength":1,"pattern":"^(?!/)(?![A-Za-z]:/)(?!.*\\\\)(?!.*//)(?!.*(?:^|/)\\.{1,2}(?:/|$))(?!.*[\\u0000-\\u001f\\u007f])(?!.*\\/$).+$"},"line":{"type":"integer","minimum":1},"rawIntentName":{"type":"string","minLength":1},"objectHasIntent":{"type":"boolean"},"arkPublishCandidate":{"type":"boolean"},"hasSource":{"type":"boolean"},"sourceIntent":{"type":"string","minLength":1}}}},"intentReferences":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["file","line","intent"],"properties":{"file":{"type":"string","minLength":1,"pattern":"^(?!/)(?![A-Za-z]:/)(?!.*\\\\)(?!.*//)(?!.*(?:^|/)\\.{1,2}(?:/|$))(?!.*[\\u0000-\\u001f\\u007f])(?!.*\\/$).+$"},"line":{"type":"integer","minimum":1},"intent":{"type":"string","minLength":1}}}},"safetyUses":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["file","line","kind"],"properties":{"file":{"type":"string","minLength":1,"pattern":"^(?!/)(?![A-Za-z]:/)(?!.*\\\\)(?!.*//)(?!.*(?:^|/)\\.{1,2}(?:/|$))(?!.*[\\u0000-\\u001f\\u007f])(?!.*\\/$).+$"},"line":{"type":"integer","minimum":1},"kind":{"enum":["ts-suppression","any-cast","dynamic-import","dynamic-require","in-memory-store"]},"symbol":{"type":"string","minLength":1}},"allOf":[{"if":{"properties":{"kind":{"const":"in-memory-store"}}},"then":{"required":["symbol"]},"else":{"not":{"required":["symbol"]}}}]}},"classShapes":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["file","className","exported","hasPublicMutableFields","hasPublicSetters","hasPublicConstructor","hasStaticFactory","mutatingMethods"],"properties":{"file":{"type":"string","minLength":1,"pattern":"^(?!/)(?![A-Za-z]:/)(?!.*\\\\)(?!.*//)(?!.*(?:^|/)\\.{1,2}(?:/|$))(?!.*[\\u0000-\\u001f\\u007f])(?!.*\\/$).+$"},"className":{"type":"string","minLength":1},"exported":{"type":"boolean"},"hasPublicMutableFields":{"type":"boolean"},"hasPublicSetters":{"type":"boolean"},"hasPublicConstructor":{"type":"boolean"},"hasStaticFactory":{"type":"boolean"},"dataOnly":{"type":"boolean"},"mutatingMethods":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["name","referencesGuardOrPublish"],"properties":{"name":{"type":"string","minLength":1},"referencesGuardOrPublish":{"type":"boolean"}}}}}}},"arkRunKernelCalls":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["file","line","kind","callee","viaImport"],"properties":{"file":{"type":"string","minLength":1,"pattern":"^(?!/)(?![A-Za-z]:/)(?!.*\\\\)(?!.*//)(?!.*(?:^|/)\\.{1,2}(?:/|$))(?!.*[\\u0000-\\u001f\\u007f])(?!.*\\/$).+$"},"line":{"type":"integer","minimum":1},"kind":{"enum":["factory","publisher","publish","raise","send","subscribe","register-handler","resolve","resolve-singleton"]},"callee":{"type":"string","minLength":1},"viaImport":{"type":"boolean"},"receiver":{"type":"string","minLength":1},"nameLiteral":{"type":"string","minLength":1}}}},"arkRunManagedNews":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["file","line","typeName"],"properties":{"file":{"type":"string","minLength":1,"pattern":"^(?!/)(?![A-Za-z]:/)(?!.*\\\\)(?!.*//)(?!.*(?:^|/)\\.{1,2}(?:/|$))(?!.*[\\u0000-\\u001f\\u007f])(?!.*\\/$).+$"},"line":{"type":"integer","minimum":1},"typeName":{"type":"string","minLength":1},"importedFrom":{"type":"string","minLength":1}}}},"arkRunCompositionRootHits":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["file","matchedRoot","hasKernelFactory"],"properties":{"file":{"type":"string","minLength":1,"pattern":"^(?!/)(?![A-Za-z]:/)(?!.*\\\\)(?!.*//)(?!.*(?:^|/)\\.{1,2}(?:/|$))(?!.*[\\u0000-\\u001f\\u007f])(?!.*\\/$).+$"},"matchedRoot":{"type":"string","minLength":1},"hasKernelFactory":{"type":"boolean"}}}},"arkRunDeclarations":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["file","line","uses","reactsTo","raises","sends"],"properties":{"file":{"type":"string","minLength":1,"pattern":"^(?!/)(?![A-Za-z]:/)(?!.*\\\\)(?!.*//)(?!.*(?:^|/)\\.{1,2}(?:/|$))(?!.*[\\u0000-\\u001f\\u007f])(?!.*\\/$).+$"},"line":{"type":"integer","minimum":1},"uses":{"type":"array","items":{"type":"string","minLength":1}},"reactsTo":{"type":"array","items":{"type":"string","minLength":1}},"raises":{"type":"array","items":{"type":"string","minLength":1}},"sends":{"type":"array","items":{"type":"string","minLength":1}}}}},"arkOrderPlaneCalls":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["file","line","callee"],"properties":{"file":{"type":"string","minLength":1,"pattern":"^(?!/)(?![A-Za-z]:/)(?!.*\\\\)(?!.*//)(?!.*(?:^|/)\\.{1,2}(?:/|$))(?!.*[\\u0000-\\u001f\\u007f])(?!.*\\/$).+$"},"line":{"type":"integer","minimum":1},"callee":{"type":"string","minLength":1}}}},"arkOrderGenericUpdates":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["file","line","method"],"properties":{"file":{"type":"string","minLength":1,"pattern":"^(?!/)(?![A-Za-z]:/)(?!.*\\\\)(?!.*//)(?!.*(?:^|/)\\.{1,2}(?:/|$))(?!.*[\\u0000-\\u001f\\u007f])(?!.*\\/$).+$"},"line":{"type":"integer","minimum":1},"method":{"type":"string","minLength":1}}}},"arkOrderRootHits":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["file","matchedRoot","hasPlaneFactory"],"properties":{"file":{"type":"string","minLength":1,"pattern":"^(?!/)(?![A-Za-z]:/)(?!.*\\\\)(?!.*//)(?!.*(?:^|/)\\.{1,2}(?:/|$))(?!.*[\\u0000-\\u001f\\u007f])(?!.*\\/$).+$"},"matchedRoot":{"type":"string","minLength":1},"hasPlaneFactory":{"type":"boolean"}}}},"arkOrderXiFieldWrites":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["file","line","key"],"properties":{"file":{"type":"string","minLength":1,"pattern":"^(?!/)(?![A-Za-z]:/)(?!.*\\\\)(?!.*//)(?!.*(?:^|/)\\.{1,2}(?:/|$))(?!.*[\\u0000-\\u001f\\u007f])(?!.*\\/$).+$"},"line":{"type":"integer","minimum":1},"key":{"type":"string","minLength":1}}}},"arkOrderIngestWritesXi":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["file","line"],"properties":{"file":{"type":"string","minLength":1,"pattern":"^(?!/)(?![A-Za-z]:/)(?!.*\\\\)(?!.*//)(?!.*(?:^|/)\\.{1,2}(?:/|$))(?!.*[\\u0000-\\u001f\\u007f])(?!.*\\/$).+$"},"line":{"type":"integer","minimum":1}}}},"arkOrderReleaseKeyCounts":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["file","line","keyCount"],"properties":{"file":{"type":"string","minLength":1,"pattern":"^(?!/)(?![A-Za-z]:/)(?!.*\\\\)(?!.*//)(?!.*(?:^|/)\\.{1,2}(?:/|$))(?!.*[\\u0000-\\u001f\\u007f])(?!.*\\/$).+$"},"line":{"type":"integer","minimum":1},"keyCount":{"type":"integer","minimum":1}}}},"factsHash":{"type":"string","minLength":1}},"allOf":[{"if":{"properties":{"completeness":{"const":"complete"}}},"then":{"properties":{"completenessReasons":{"maxItems":0},"files":{"items":{"properties":{"parseStatus":{"const":"parsed"}}}}}}},{"if":{"properties":{"completeness":{"enum":["partial","unavailable"]}}},"then":{"properties":{"completenessReasons":{"minItems":1}}}}]}
|
|
1
|
+
{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://unpkg.com/arkgate@3/schemas/ark.resolved-candidate-facts.schema.json","title":"ArkGate resolved candidate facts","type":"object","additionalProperties":false,"required":["schemaVersion","completeness","completenessReasons","resolverIdentity","compilerIdentity","compilerOptionsHash","tsconfigHash","candidateTreeHash","evidenceRequirementsHash","files","dependencies","capabilityUses","ambientUses","publishCalls","intentReferences","safetyUses","factsHash"],"properties":{"schemaVersion":{"enum":["1.0","1.1","1.2"]},"completeness":{"enum":["complete","partial","unavailable"]},"completenessReasons":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["code","message"],"properties":{"code":{"type":"string","minLength":1},"message":{"type":"string","minLength":1},"file":{"type":"string","minLength":1,"pattern":"^(?!/)(?![A-Za-z]:/)(?!.*\\\\)(?!.*//)(?!.*(?:^|/)\\.{1,2}(?:/|$))(?!.*[\\u0000-\\u001f\\u007f])(?!.*\\/$).+$"}}}},"resolverIdentity":{"type":"string","minLength":1},"compilerIdentity":{"type":"string","minLength":1},"compilerOptionsHash":{"type":"string","minLength":1},"tsconfigHash":{"type":"string","minLength":1},"candidateTreeHash":{"type":"string","minLength":1},"evidenceRequirementsHash":{"type":"string","minLength":1},"projectPackageName":{"type":"string","minLength":1},"files":{"type":"array","uniqueItems":true,"items":{"type":"object","additionalProperties":false,"required":["path","contentHash","parseStatus","parseDiagnosticCount","exportsOnlyTypes","typeOnlyExportNames","hasTopLevelSideEffects"],"properties":{"path":{"type":"string","minLength":1,"pattern":"^(?!/)(?![A-Za-z]:/)(?!.*\\\\)(?!.*//)(?!.*(?:^|/)\\.{1,2}(?:/|$))(?!.*[\\u0000-\\u001f\\u007f])(?!.*\\/$).+$"},"contentHash":{"type":"string","minLength":1},"parseStatus":{"enum":["parsed","invalid"]},"parseDiagnosticCount":{"type":"integer","minimum":0},"exportsOnlyTypes":{"type":"boolean"},"typeOnlyExportNames":{"type":"array","items":{"type":"string","minLength":1}},"hasTopLevelSideEffects":{"type":"boolean"}},"allOf":[{"if":{"properties":{"parseStatus":{"const":"parsed"}}},"then":{"properties":{"parseDiagnosticCount":{"const":0}}}},{"if":{"properties":{"parseStatus":{"const":"invalid"}}},"then":{"properties":{"parseDiagnosticCount":{"minimum":1}}}}]}},"dependencies":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["from","kind","typeOnly","line","resolution"],"properties":{"from":{"type":"string","minLength":1,"pattern":"^(?!/)(?![A-Za-z]:/)(?!.*\\\\)(?!.*//)(?!.*(?:^|/)\\.{1,2}(?:/|$))(?!.*[\\u0000-\\u001f\\u007f])(?!.*\\/$).+$"},"specifier":{"type":"string","minLength":1},"kind":{"enum":["import","export","dynamic-import","require"]},"typeOnly":{"type":"boolean"},"line":{"type":"integer","minimum":1},"resolution":{"enum":["resolved-project","resolved-external","unresolved","dynamic"]},"target":{"type":"string","minLength":1,"pattern":"^(?!/)(?![A-Za-z]:/)(?!.*\\\\)(?!.*//)(?!.*(?:^|/)\\.{1,2}(?:/|$))(?!.*[\\u0000-\\u001f\\u007f])(?!.*\\/$).+$"},"namedBindings":{"type":"array","items":{"type":"string","minLength":1}},"targetTypeOnlyExports":{"type":"boolean"},"sourcePureTypeModule":{"type":"boolean"},"namedBindingsTypeOnly":{"type":"boolean"},"portProofEligible":{"type":"boolean"}},"allOf":[{"if":{"properties":{"resolution":{"const":"resolved-project"}}},"then":{"required":["target"]},"else":{"not":{"required":["target"]}}},{"if":{"properties":{"resolution":{"const":"dynamic"}}},"else":{"required":["specifier"]}}]}},"capabilityUses":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["file","line","symbol","capability","source"],"properties":{"file":{"type":"string","minLength":1,"pattern":"^(?!/)(?![A-Za-z]:/)(?!.*\\\\)(?!.*//)(?!.*(?:^|/)\\.{1,2}(?:/|$))(?!.*[\\u0000-\\u001f\\u007f])(?!.*\\/$).+$"},"line":{"type":"integer","minimum":1},"symbol":{"type":"string","minLength":1},"capability":{"enum":["network","filesystem","clock","randomness","environment","process","persistence"]},"source":{"enum":["ambient-global","import-based"]}}}},"ambientUses":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["file","line","symbol"],"properties":{"file":{"type":"string","minLength":1,"pattern":"^(?!/)(?![A-Za-z]:/)(?!.*\\\\)(?!.*//)(?!.*(?:^|/)\\.{1,2}(?:/|$))(?!.*[\\u0000-\\u001f\\u007f])(?!.*\\/$).+$"},"line":{"type":"integer","minimum":1},"symbol":{"type":"string","minLength":1}}}},"publishCalls":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["file","line","objectHasIntent","arkPublishCandidate","hasSource"],"properties":{"file":{"type":"string","minLength":1,"pattern":"^(?!/)(?![A-Za-z]:/)(?!.*\\\\)(?!.*//)(?!.*(?:^|/)\\.{1,2}(?:/|$))(?!.*[\\u0000-\\u001f\\u007f])(?!.*\\/$).+$"},"line":{"type":"integer","minimum":1},"rawIntentName":{"type":"string","minLength":1},"objectHasIntent":{"type":"boolean"},"arkPublishCandidate":{"type":"boolean"},"hasSource":{"type":"boolean"},"sourceIntent":{"type":"string","minLength":1}}}},"intentReferences":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["file","line","intent"],"properties":{"file":{"type":"string","minLength":1,"pattern":"^(?!/)(?![A-Za-z]:/)(?!.*\\\\)(?!.*//)(?!.*(?:^|/)\\.{1,2}(?:/|$))(?!.*[\\u0000-\\u001f\\u007f])(?!.*\\/$).+$"},"line":{"type":"integer","minimum":1},"intent":{"type":"string","minLength":1}}}},"safetyUses":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["file","line","kind"],"properties":{"file":{"type":"string","minLength":1,"pattern":"^(?!/)(?![A-Za-z]:/)(?!.*\\\\)(?!.*//)(?!.*(?:^|/)\\.{1,2}(?:/|$))(?!.*[\\u0000-\\u001f\\u007f])(?!.*\\/$).+$"},"line":{"type":"integer","minimum":1},"kind":{"enum":["ts-suppression","any-cast","dynamic-import","dynamic-require","in-memory-store"]},"symbol":{"type":"string","minLength":1}},"allOf":[{"if":{"properties":{"kind":{"const":"in-memory-store"}}},"then":{"required":["symbol"]},"else":{"not":{"required":["symbol"]}}}]}},"classShapes":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["file","className","exported","hasPublicMutableFields","hasPublicSetters","hasPublicConstructor","hasStaticFactory","mutatingMethods"],"properties":{"file":{"type":"string","minLength":1,"pattern":"^(?!/)(?![A-Za-z]:/)(?!.*\\\\)(?!.*//)(?!.*(?:^|/)\\.{1,2}(?:/|$))(?!.*[\\u0000-\\u001f\\u007f])(?!.*\\/$).+$"},"className":{"type":"string","minLength":1},"exported":{"type":"boolean"},"hasPublicMutableFields":{"type":"boolean"},"hasPublicSetters":{"type":"boolean"},"hasPublicConstructor":{"type":"boolean"},"hasStaticFactory":{"type":"boolean"},"dataOnly":{"type":"boolean"},"truncatedUntil":{"type":"integer","minimum":0},"mutatingMethods":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["name","referencesGuardOrPublish"],"properties":{"name":{"type":"string","minLength":1},"referencesGuardOrPublish":{"type":"boolean"}}}}}}},"arkRunKernelCalls":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["file","line","kind","callee","viaImport"],"properties":{"file":{"type":"string","minLength":1,"pattern":"^(?!/)(?![A-Za-z]:/)(?!.*\\\\)(?!.*//)(?!.*(?:^|/)\\.{1,2}(?:/|$))(?!.*[\\u0000-\\u001f\\u007f])(?!.*\\/$).+$"},"line":{"type":"integer","minimum":1},"kind":{"enum":["factory","publisher","publish","raise","send","subscribe","register-handler","resolve","resolve-singleton"]},"callee":{"type":"string","minLength":1},"viaImport":{"type":"boolean"},"receiver":{"type":"string","minLength":1},"nameLiteral":{"type":"string","minLength":1}}}},"arkRunManagedNews":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["file","line","typeName"],"properties":{"file":{"type":"string","minLength":1,"pattern":"^(?!/)(?![A-Za-z]:/)(?!.*\\\\)(?!.*//)(?!.*(?:^|/)\\.{1,2}(?:/|$))(?!.*[\\u0000-\\u001f\\u007f])(?!.*\\/$).+$"},"line":{"type":"integer","minimum":1},"typeName":{"type":"string","minLength":1},"importedFrom":{"type":"string","minLength":1}}}},"arkRunCompositionRootHits":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["file","matchedRoot","hasKernelFactory"],"properties":{"file":{"type":"string","minLength":1,"pattern":"^(?!/)(?![A-Za-z]:/)(?!.*\\\\)(?!.*//)(?!.*(?:^|/)\\.{1,2}(?:/|$))(?!.*[\\u0000-\\u001f\\u007f])(?!.*\\/$).+$"},"matchedRoot":{"type":"string","minLength":1},"hasKernelFactory":{"type":"boolean"}}}},"arkRunDeclarations":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["file","line","uses","reactsTo","raises","sends"],"properties":{"file":{"type":"string","minLength":1,"pattern":"^(?!/)(?![A-Za-z]:/)(?!.*\\\\)(?!.*//)(?!.*(?:^|/)\\.{1,2}(?:/|$))(?!.*[\\u0000-\\u001f\\u007f])(?!.*\\/$).+$"},"line":{"type":"integer","minimum":1},"uses":{"type":"array","items":{"type":"string","minLength":1}},"reactsTo":{"type":"array","items":{"type":"string","minLength":1}},"raises":{"type":"array","items":{"type":"string","minLength":1}},"sends":{"type":"array","items":{"type":"string","minLength":1}}}}},"arkOrderPlaneCalls":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["file","line","callee"],"properties":{"file":{"type":"string","minLength":1,"pattern":"^(?!/)(?![A-Za-z]:/)(?!.*\\\\)(?!.*//)(?!.*(?:^|/)\\.{1,2}(?:/|$))(?!.*[\\u0000-\\u001f\\u007f])(?!.*\\/$).+$"},"line":{"type":"integer","minimum":1},"callee":{"type":"string","minLength":1}}}},"arkOrderGenericUpdates":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["file","line","method"],"properties":{"file":{"type":"string","minLength":1,"pattern":"^(?!/)(?![A-Za-z]:/)(?!.*\\\\)(?!.*//)(?!.*(?:^|/)\\.{1,2}(?:/|$))(?!.*[\\u0000-\\u001f\\u007f])(?!.*\\/$).+$"},"line":{"type":"integer","minimum":1},"method":{"type":"string","minLength":1}}}},"arkOrderRootHits":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["file","matchedRoot","hasPlaneFactory"],"properties":{"file":{"type":"string","minLength":1,"pattern":"^(?!/)(?![A-Za-z]:/)(?!.*\\\\)(?!.*//)(?!.*(?:^|/)\\.{1,2}(?:/|$))(?!.*[\\u0000-\\u001f\\u007f])(?!.*\\/$).+$"},"matchedRoot":{"type":"string","minLength":1},"hasPlaneFactory":{"type":"boolean"}}}},"arkOrderXiFieldWrites":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["file","line","key"],"properties":{"file":{"type":"string","minLength":1,"pattern":"^(?!/)(?![A-Za-z]:/)(?!.*\\\\)(?!.*//)(?!.*(?:^|/)\\.{1,2}(?:/|$))(?!.*[\\u0000-\\u001f\\u007f])(?!.*\\/$).+$"},"line":{"type":"integer","minimum":1},"key":{"type":"string","minLength":1}}}},"arkOrderIngestWritesXi":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["file","line"],"properties":{"file":{"type":"string","minLength":1,"pattern":"^(?!/)(?![A-Za-z]:/)(?!.*\\\\)(?!.*//)(?!.*(?:^|/)\\.{1,2}(?:/|$))(?!.*[\\u0000-\\u001f\\u007f])(?!.*\\/$).+$"},"line":{"type":"integer","minimum":1}}}},"arkOrderReleaseKeyCounts":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["file","line","keyCount"],"properties":{"file":{"type":"string","minLength":1,"pattern":"^(?!/)(?![A-Za-z]:/)(?!.*\\\\)(?!.*//)(?!.*(?:^|/)\\.{1,2}(?:/|$))(?!.*[\\u0000-\\u001f\\u007f])(?!.*\\/$).+$"},"line":{"type":"integer","minimum":1},"keyCount":{"type":"integer","minimum":1}}}},"arkOrderXiTtlKeys":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["file","line","key"],"properties":{"file":{"type":"string","minLength":1,"pattern":"^(?!/)(?![A-Za-z]:/)(?!.*\\\\)(?!.*//)(?!.*(?:^|/)\\.{1,2}(?:/|$))(?!.*[\\u0000-\\u001f\\u007f])(?!.*\\/$).+$"},"line":{"type":"integer","minimum":1},"key":{"type":"string","minLength":1}}}},"arkOrderBudgetLeaks":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["file","line","kind"],"properties":{"file":{"type":"string","minLength":1,"pattern":"^(?!/)(?![A-Za-z]:/)(?!.*\\\\)(?!.*//)(?!.*(?:^|/)\\.{1,2}(?:/|$))(?!.*[\\u0000-\\u001f\\u007f])(?!.*\\/$).+$"},"line":{"type":"integer","minimum":1},"kind":{"type":"string","minLength":1}}}},"factsHash":{"type":"string","minLength":1}},"allOf":[{"if":{"properties":{"completeness":{"const":"complete"}}},"then":{"properties":{"completenessReasons":{"maxItems":0},"files":{"items":{"properties":{"parseStatus":{"const":"parsed"}}}}}}},{"if":{"properties":{"completeness":{"enum":["partial","unavailable"]}}},"then":{"properties":{"completenessReasons":{"minItems":1}}}}]}
|
|
@@ -240,6 +240,28 @@
|
|
|
240
240
|
}
|
|
241
241
|
}
|
|
242
242
|
},
|
|
243
|
+
"contract": {
|
|
244
|
+
"type": "object",
|
|
245
|
+
"description": "Present only when the resolved config fails the shared contract validator (the same fail-closed rules ark-check, MCP and ESLint apply).",
|
|
246
|
+
"additionalProperties": false,
|
|
247
|
+
"required": [
|
|
248
|
+
"valid",
|
|
249
|
+
"errors"
|
|
250
|
+
],
|
|
251
|
+
"properties": {
|
|
252
|
+
"valid": {
|
|
253
|
+
"const": false
|
|
254
|
+
},
|
|
255
|
+
"errors": {
|
|
256
|
+
"type": "array",
|
|
257
|
+
"minItems": 1,
|
|
258
|
+
"items": {
|
|
259
|
+
"type": "string",
|
|
260
|
+
"minLength": 1
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
},
|
|
243
265
|
"improvementCompass": {
|
|
244
266
|
"type": "object",
|
|
245
267
|
"description": "Thin improvement-compass residual ids with honesty mode (notAScore). full | subset | unavailable. Never a gate input; full lenses on doctor JSON. When full, residual ids ⊆ doctor residual for the same facts. unavailable never invents green residual.",
|
package/server.json
CHANGED
|
@@ -6,12 +6,12 @@
|
|
|
6
6
|
"url": "https://github.com/pedroknigge/arkgate",
|
|
7
7
|
"source": "github"
|
|
8
8
|
},
|
|
9
|
-
"version": "4.8.
|
|
9
|
+
"version": "4.8.24",
|
|
10
10
|
"packages": [
|
|
11
11
|
{
|
|
12
12
|
"registryType": "npm",
|
|
13
13
|
"identifier": "arkgate",
|
|
14
|
-
"version": "4.8.
|
|
14
|
+
"version": "4.8.24",
|
|
15
15
|
"runtimeHint": "npx",
|
|
16
16
|
"transport": {
|
|
17
17
|
"type": "stdio"
|
|
@@ -19,19 +19,13 @@
|
|
|
19
19
|
"packageArguments": [
|
|
20
20
|
{
|
|
21
21
|
"type": "positional",
|
|
22
|
-
"value": "
|
|
22
|
+
"value": "mcp"
|
|
23
23
|
},
|
|
24
24
|
{
|
|
25
25
|
"type": "named",
|
|
26
26
|
"name": "--root",
|
|
27
27
|
"value": ".",
|
|
28
28
|
"description": "Project root"
|
|
29
|
-
},
|
|
30
|
-
{
|
|
31
|
-
"type": "named",
|
|
32
|
-
"name": "--config",
|
|
33
|
-
"value": "ark.config.json",
|
|
34
|
-
"description": "Path to the rules file (ark.config.json)"
|
|
35
29
|
}
|
|
36
30
|
]
|
|
37
31
|
}
|
|
@@ -9,7 +9,7 @@ closed `/ark-*` catalog shipped as flat templates for Ark install.
|
|
|
9
9
|
**Closed catalog** (`ARK_SKILL_NAMES`) — first-class doors plus one-release
|
|
10
10
|
redirect stubs. Add a name only with a live ROADMAP item.
|
|
11
11
|
|
|
12
|
-
Package version when last generated context: **arkgate@4.8.
|
|
12
|
+
Package version when last generated context: **arkgate@4.8.24**
|
|
13
13
|
Schema: agent-skills package contract `1.0`
|
|
14
14
|
|
|
15
15
|
## Skills (closed catalog)
|
|
@@ -362,7 +362,10 @@ Ark protects the **boundary around** a framework, not its internals. Nest/DI pub
|
|
|
362
362
|
import them, and they may import a slice. Doctor lists that shared-root → slice hop even
|
|
363
363
|
when the check stays green, so the wall is direct-only. `sharedImportsSlice: "deny"` closes
|
|
364
364
|
that one hop; it does not finish the wall. Promoting the shared slice to its own
|
|
365
|
-
layer is still the preferred fix.
|
|
365
|
+
layer is still the preferred fix. With `"deny-cross-parent"` in a DI app, list the
|
|
366
|
+
composition root (bootstrap, registrations) in the object form's `stopAt` instead of
|
|
367
|
+
freezing dozens of `CROSS_PARENT_VIA_SHARED` findings through it; doctor
|
|
368
|
+
`sharedWalkHubs` names that file.
|
|
366
369
|
`sliceFolders`: a bare name stays an unanchored one-segment match (`features` on
|
|
367
370
|
`src/lib/features/projects/rfi/x.ts` is `features/projects`); a filename is never the
|
|
368
371
|
child segment. A starred prefix (`lib/features/*/*`) is anchored like `sharedRoots`
|
|
@@ -125,7 +125,8 @@ the same files or weaken the gate.
|
|
|
125
125
|
- Keep Domain-role layers plane-free (`ARKORDER_KERNEL_IN_DOMAIN`).
|
|
126
126
|
- First freeze: `release()`. Later change of a named choice is `proposeRelease` then `apply`
|
|
127
127
|
— not a second `release()` (`ARKORDER_UNVALVED_RELEASE`), not `update` / `patch` / `set`
|
|
128
|
-
(`ARKORDER_GENERIC_UPDATE`).
|
|
128
|
+
(`ARKORDER_GENERIC_UPDATE`). Apply the proposal you reviewed against the current Release;
|
|
129
|
+
a stale one, or one whose blast is not the transition that commits, fails `ARKORDER_STALE_PROPOSAL` — propose again.
|
|
129
130
|
- Name **`xiKeys`** (3–5 slow product decisions). Membership ids and recomputable statuses
|
|
130
131
|
are not keys: derive a status on read or fold it from ingest. A use-case that persists
|
|
131
132
|
those keys is `ARKORDER_XI_FIELD_WRITE`. Invoices and seats still flow through `ingest`.
|
|
@@ -149,7 +150,8 @@ the same files or weaken the gate.
|
|
|
149
150
|
- Extra absent and the user wants it: **STOP — do not continue this skill as complete.**
|
|
150
151
|
**`/ark-adopt`** writes advisory `arkOrder`.
|
|
151
152
|
- Skip cluster (`ARKORDER_MISSING_PLANE` / `ARKORDER_KERNEL_IN_DOMAIN` / `ARKORDER_GENERIC_UPDATE`
|
|
152
|
-
/ `ARKORDER_TOO_MANY_PARAMS` / `ARKORDER_INGEST_WRITES_XI` / `ARKORDER_XI_FIELD_WRITE`
|
|
153
|
+
/ `ARKORDER_TOO_MANY_PARAMS` / `ARKORDER_INGEST_WRITES_XI` / `ARKORDER_XI_FIELD_WRITE`
|
|
154
|
+
/ `ARKORDER_XI_TTL` / `ARKORDER_INFORMATION_BUDGET`) after
|
|
153
155
|
the extra is on: **`/ark-autopilot`** — this skill still wires one candidate.
|
|
154
156
|
- New plane-root file after the extra is on: **`/ark-place`**.
|
|
155
157
|
- One kernel / bus candidate: **`/ark-runtime`** — do not mix planes.
|
|
@@ -124,7 +124,12 @@ the same files or weaken the gate.
|
|
|
124
124
|
`appendDecisionTape`. Shadow / compare / replay that snapshot in-memory (not a bus, not
|
|
125
125
|
durable). This is still **[ArkRun]** — do not turn the tape into an ArkOrder skill.
|
|
126
126
|
- In-memory stores lose state on restart — **not** production durability. Note bounded history
|
|
127
|
-
(`maxHistorySize` 1000
|
|
127
|
+
(`maxHistorySize` 1000 — history, trace, audit, and the default event buffer) if the
|
|
128
|
+
hand-rolled version retained everything.
|
|
129
|
+
- `createStrictArkKernelFromConfig` maps intents by `layers[].intentPrefixes` (canonical
|
|
130
|
+
layer names get built-in ones); a custom deny-rule layer without prefixes is audited as
|
|
131
|
+
`layer.observedFlowUnresolvable` (explicit `'hard'` throws `ArkKernelConfigError`). Enforced declarations accept a literal or a same-file
|
|
132
|
+
`define(..)` creator as the call name.
|
|
128
133
|
6. **Delete the hand-rolled version** once call sites are moved — the point is
|
|
129
134
|
less code, not a second parallel system. Deleting code is a destructive move:
|
|
130
135
|
confirm with the user before removing the old implementation, and never delete
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"layer": "PresentationAdapters",
|
|
5
5
|
"structure": [
|
|
6
6
|
{
|
|
7
|
-
"id": "thin-adapter",
|
|
7
|
+
"id": "thin-presentation-adapter",
|
|
8
8
|
"sensor": "thin-adapter",
|
|
9
9
|
"mode": "advisory",
|
|
10
10
|
"description": "Adapters stay thin: map I/O and delegate; avoid domain branching + persistence here."
|
|
@@ -362,7 +362,10 @@ Ark protects the **boundary around** a framework, not its internals. Nest/DI pub
|
|
|
362
362
|
import them, and they may import a slice. Doctor lists that shared-root → slice hop even
|
|
363
363
|
when the check stays green, so the wall is direct-only. `sharedImportsSlice: "deny"` closes
|
|
364
364
|
that one hop; it does not finish the wall. Promoting the shared slice to its own
|
|
365
|
-
layer is still the preferred fix.
|
|
365
|
+
layer is still the preferred fix. With `"deny-cross-parent"` in a DI app, list the
|
|
366
|
+
composition root (bootstrap, registrations) in the object form's `stopAt` instead of
|
|
367
|
+
freezing dozens of `CROSS_PARENT_VIA_SHARED` findings through it; doctor
|
|
368
|
+
`sharedWalkHubs` names that file.
|
|
366
369
|
`sliceFolders`: a bare name stays an unanchored one-segment match (`features` on
|
|
367
370
|
`src/lib/features/projects/rfi/x.ts` is `features/projects`); a filename is never the
|
|
368
371
|
child segment. A starred prefix (`lib/features/*/*`) is anchored like `sharedRoots`
|
|
@@ -125,7 +125,8 @@ the same files or weaken the gate.
|
|
|
125
125
|
- Keep Domain-role layers plane-free (`ARKORDER_KERNEL_IN_DOMAIN`).
|
|
126
126
|
- First freeze: `release()`. Later change of a named choice is `proposeRelease` then `apply`
|
|
127
127
|
— not a second `release()` (`ARKORDER_UNVALVED_RELEASE`), not `update` / `patch` / `set`
|
|
128
|
-
(`ARKORDER_GENERIC_UPDATE`).
|
|
128
|
+
(`ARKORDER_GENERIC_UPDATE`). Apply the proposal you reviewed against the current Release;
|
|
129
|
+
a stale one, or one whose blast is not the transition that commits, fails `ARKORDER_STALE_PROPOSAL` — propose again.
|
|
129
130
|
- Name **`xiKeys`** (3–5 slow product decisions). Membership ids and recomputable statuses
|
|
130
131
|
are not keys: derive a status on read or fold it from ingest. A use-case that persists
|
|
131
132
|
those keys is `ARKORDER_XI_FIELD_WRITE`. Invoices and seats still flow through `ingest`.
|
|
@@ -149,7 +150,8 @@ the same files or weaken the gate.
|
|
|
149
150
|
- Extra absent and the user wants it: **STOP — do not continue this skill as complete.**
|
|
150
151
|
**`/ark-adopt`** writes advisory `arkOrder`.
|
|
151
152
|
- Skip cluster (`ARKORDER_MISSING_PLANE` / `ARKORDER_KERNEL_IN_DOMAIN` / `ARKORDER_GENERIC_UPDATE`
|
|
152
|
-
/ `ARKORDER_TOO_MANY_PARAMS` / `ARKORDER_INGEST_WRITES_XI` / `ARKORDER_XI_FIELD_WRITE`
|
|
153
|
+
/ `ARKORDER_TOO_MANY_PARAMS` / `ARKORDER_INGEST_WRITES_XI` / `ARKORDER_XI_FIELD_WRITE`
|
|
154
|
+
/ `ARKORDER_XI_TTL` / `ARKORDER_INFORMATION_BUDGET`) after
|
|
153
155
|
the extra is on: **`/ark-autopilot`** — this skill still wires one candidate.
|
|
154
156
|
- New plane-root file after the extra is on: **`/ark-place`**.
|
|
155
157
|
- One kernel / bus candidate: **`/ark-runtime`** — do not mix planes.
|
|
@@ -124,7 +124,12 @@ the same files or weaken the gate.
|
|
|
124
124
|
`appendDecisionTape`. Shadow / compare / replay that snapshot in-memory (not a bus, not
|
|
125
125
|
durable). This is still **[ArkRun]** — do not turn the tape into an ArkOrder skill.
|
|
126
126
|
- In-memory stores lose state on restart — **not** production durability. Note bounded history
|
|
127
|
-
(`maxHistorySize` 1000
|
|
127
|
+
(`maxHistorySize` 1000 — history, trace, audit, and the default event buffer) if the
|
|
128
|
+
hand-rolled version retained everything.
|
|
129
|
+
- `createStrictArkKernelFromConfig` maps intents by `layers[].intentPrefixes` (canonical
|
|
130
|
+
layer names get built-in ones); a custom deny-rule layer without prefixes is audited as
|
|
131
|
+
`layer.observedFlowUnresolvable` (explicit `'hard'` throws `ArkKernelConfigError`). Enforced declarations accept a literal or a same-file
|
|
132
|
+
`define(..)` creator as the call name.
|
|
128
133
|
6. **Delete the hand-rolled version** once call sites are moved — the point is
|
|
129
134
|
less code, not a second parallel system. Deleting code is a destructive move:
|
|
130
135
|
confirm with the user before removing the old implementation, and never delete
|
package/dist/types-Ik_OakcI.d.ts
DELETED
|
@@ -1,183 +0,0 @@
|
|
|
1
|
-
import { a as ArkConfigRule, f as ArkConfigLayer, A as ArkConfig } from './configTypes-Bbf_MFGe.js';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Policy types for the Ark kernel.
|
|
5
|
-
*
|
|
6
|
-
* Policies allow declaring architectural rules that can be checked at runtime.
|
|
7
|
-
* Supports both hard policies (must never be violated) and soft policies (warnings).
|
|
8
|
-
*/
|
|
9
|
-
type PolicySeverity = 'hard' | 'soft';
|
|
10
|
-
type PolicyEnforcementMode = 'runtime' | 'static' | 'runtime-and-static' | 'advisory';
|
|
11
|
-
/**
|
|
12
|
-
* Represents a single violation of a policy.
|
|
13
|
-
*/
|
|
14
|
-
interface PolicyViolation {
|
|
15
|
-
/** Name of the policy that was violated */
|
|
16
|
-
policyName: string;
|
|
17
|
-
/** Severity level of the policy */
|
|
18
|
-
severity: PolicySeverity;
|
|
19
|
-
/** Human-readable explanation of the violation */
|
|
20
|
-
message: string;
|
|
21
|
-
/** Optional additional structured details */
|
|
22
|
-
details?: unknown;
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* A Policy defines a rule that can be evaluated against a context.
|
|
26
|
-
*
|
|
27
|
-
* @template Context - The shape of data the policy evaluates (e.g. { registry, events })
|
|
28
|
-
*/
|
|
29
|
-
interface Policy<Context = unknown> {
|
|
30
|
-
/** Unique name of the policy (used in violations and reporting) */
|
|
31
|
-
readonly name: string;
|
|
32
|
-
/** Whether this is a hard rule (enforced strictly) or soft (advisory) */
|
|
33
|
-
readonly severity: PolicySeverity;
|
|
34
|
-
/** Optional tags for policy classification (e.g. 'layer', 'naming') */
|
|
35
|
-
readonly tags?: readonly string[];
|
|
36
|
-
readonly owner?: string;
|
|
37
|
-
readonly version?: string;
|
|
38
|
-
readonly rationale?: string;
|
|
39
|
-
readonly enforcementMode?: PolicyEnforcementMode;
|
|
40
|
-
readonly deprecated?: boolean | string;
|
|
41
|
-
readonly replacedBy?: string;
|
|
42
|
-
/**
|
|
43
|
-
* Evaluates the policy against the given context.
|
|
44
|
-
* Return true / [] for pass, false / single violation / array for failure.
|
|
45
|
-
*/
|
|
46
|
-
check(context: Context): boolean | PolicyViolation | PolicyViolation[];
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
/**
|
|
50
|
-
* Core domain primitives for Ark.
|
|
51
|
-
* These types are the foundation for all governance concepts.
|
|
52
|
-
*/
|
|
53
|
-
/**
|
|
54
|
-
* Semantic intent names follow a convention:
|
|
55
|
-
* - Domain.* for domain events and entities
|
|
56
|
-
* - Application.* for use-cases / orchestration
|
|
57
|
-
* - Adapter.* for integration points
|
|
58
|
-
* - Workflow.* for sagas and processes
|
|
59
|
-
* - Job.* for background jobs and scheduling
|
|
60
|
-
* - Presentation.* for UI/API adapters
|
|
61
|
-
* - Reporting.* for read models and projections
|
|
62
|
-
* - Metadata.* for extensibility contracts
|
|
63
|
-
* - Security.* / Audit.* / Observability.* for cross-cutting kernel concerns
|
|
64
|
-
* - Kernel.* for Ark-owned governance signals
|
|
65
|
-
*/
|
|
66
|
-
type IntentName = `Domain.${string}` | `Application.${string}` | `Adapter.${string}` | `Workflow.${string}` | `Job.${string}` | `Presentation.${string}` | `Reporting.${string}` | `Metadata.${string}` | `Security.${string}` | `Audit.${string}` | `Observability.${string}` | `Kernel.${string}`;
|
|
67
|
-
type CorrelationId = string;
|
|
68
|
-
interface EventMetadata {
|
|
69
|
-
occurredAt: string;
|
|
70
|
-
source: string;
|
|
71
|
-
kernelInstanceId?: string;
|
|
72
|
-
eventVersion?: string;
|
|
73
|
-
schemaVersion?: string;
|
|
74
|
-
allowInterception?: boolean;
|
|
75
|
-
interceptions?: Array<{
|
|
76
|
-
interceptorId: string;
|
|
77
|
-
timestamp: string;
|
|
78
|
-
}>;
|
|
79
|
-
correlationId?: CorrelationId;
|
|
80
|
-
causationId?: string;
|
|
81
|
-
traceId?: string;
|
|
82
|
-
spanId?: string;
|
|
83
|
-
parentSpanId?: string;
|
|
84
|
-
[key: string]: unknown;
|
|
85
|
-
}
|
|
86
|
-
interface DomainEvent<Name extends IntentName = IntentName, Payload = unknown> {
|
|
87
|
-
intent: Name;
|
|
88
|
-
payload: Payload;
|
|
89
|
-
metadata: EventMetadata;
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
/**
|
|
93
|
-
* Intent-specific types for the Ark kernel.
|
|
94
|
-
*
|
|
95
|
-
* Intents provide semantic naming for every important concept in the system
|
|
96
|
-
* (domain events, application operations, adapters, workflows).
|
|
97
|
-
*/
|
|
98
|
-
|
|
99
|
-
/**
|
|
100
|
-
* An IntentCreator is a callable that creates a strongly-typed DomainEvent
|
|
101
|
-
* when invoked with a payload.
|
|
102
|
-
*
|
|
103
|
-
* It also carries the semantic `name`.
|
|
104
|
-
*
|
|
105
|
-
* @example
|
|
106
|
-
* const OrderPlaced = defineIntent<'Domain.Order.OrderPlaced', { orderId: string }>('Domain.Order.OrderPlaced');
|
|
107
|
-
* const event = OrderPlaced({ orderId: 'o-1' });
|
|
108
|
-
*/
|
|
109
|
-
interface IntentCreator<Name extends IntentName, Payload = unknown> {
|
|
110
|
-
/**
|
|
111
|
-
* Creates a DomainEvent for this intent.
|
|
112
|
-
*/
|
|
113
|
-
(payload: Payload): DomainEvent<Name, Payload>;
|
|
114
|
-
/**
|
|
115
|
-
* The fully-qualified semantic name of the intent (e.g. "Domain.Order.OrderPlaced").
|
|
116
|
-
*/
|
|
117
|
-
readonly name: Name;
|
|
118
|
-
}
|
|
119
|
-
/** Kind of relationship between two intents. */
|
|
120
|
-
type IntentRelationshipKind = 'dependsOn' | 'produces';
|
|
121
|
-
/**
|
|
122
|
-
* Relationship declarations between intents.
|
|
123
|
-
* Used for dependency analysis and graph generation.
|
|
124
|
-
*/
|
|
125
|
-
interface IntentRelationship {
|
|
126
|
-
from: string;
|
|
127
|
-
to: string;
|
|
128
|
-
kind: IntentRelationshipKind;
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
/**
|
|
132
|
-
* Architecture layer profiles.
|
|
133
|
-
*
|
|
134
|
-
* A profile turns semantic names such as `Domain.Order.Placed` into governed
|
|
135
|
-
* layer names and dependency rules.
|
|
136
|
-
*/
|
|
137
|
-
|
|
138
|
-
interface ArchitectureLayer {
|
|
139
|
-
name: string;
|
|
140
|
-
prefixes: string[];
|
|
141
|
-
/**
|
|
142
|
-
* Custom matcher for teams whose intent names don't follow prefix conventions.
|
|
143
|
-
* Checked before any prefix matching, in layer declaration order. A layer may
|
|
144
|
-
* use `match` alone (with `prefixes: []`), prefixes alone, or both.
|
|
145
|
-
*/
|
|
146
|
-
match?: (name: string) => boolean;
|
|
147
|
-
description?: string;
|
|
148
|
-
trustBoundary?: 'public' | 'auth' | 'admin' | 'internal';
|
|
149
|
-
owners?: string[];
|
|
150
|
-
order?: number;
|
|
151
|
-
}
|
|
152
|
-
type ArchitectureRule = ArkConfigRule;
|
|
153
|
-
interface ArchitectureProfile {
|
|
154
|
-
name: string;
|
|
155
|
-
layers: ArchitectureLayer[];
|
|
156
|
-
rules: ArchitectureRule[];
|
|
157
|
-
resolveLayer(name: string): string | undefined;
|
|
158
|
-
}
|
|
159
|
-
interface CreateArchitectureProfileOptions {
|
|
160
|
-
name: string;
|
|
161
|
-
layers: ArchitectureLayer[];
|
|
162
|
-
rules?: ArchitectureRule[];
|
|
163
|
-
}
|
|
164
|
-
interface CreateArchitectureProfileFromArkConfigOptions {
|
|
165
|
-
/** Runtime profile name. Default: config.name or "ark.config.json". */
|
|
166
|
-
name?: string;
|
|
167
|
-
}
|
|
168
|
-
type ArchitectureLayerConfig = ArkConfigLayer;
|
|
169
|
-
type ArkCheckConfig = Omit<ArkConfig, '$schema' | 'schemaVersion' | 'rules'> & {
|
|
170
|
-
$schema?: string;
|
|
171
|
-
schemaVersion?: ArkConfig['schemaVersion'];
|
|
172
|
-
rules?: ArchitectureRule[];
|
|
173
|
-
};
|
|
174
|
-
interface CreateElevenLayerArkConfigOptions {
|
|
175
|
-
/** Source root used in generated file patterns. Default: "src". */
|
|
176
|
-
rootDir?: string;
|
|
177
|
-
/** Include entries for ark-check. Default: [rootDir]. */
|
|
178
|
-
include?: string[];
|
|
179
|
-
/** Mark generated layers optional. Default: true. */
|
|
180
|
-
optionalLayers?: boolean;
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
export type { ArchitectureLayer as A, CreateArchitectureProfileFromArkConfigOptions as C, DomainEvent as D, EventMetadata as E, IntentName as I, PolicyViolation as P, ArchitectureLayerConfig as a, ArchitectureProfile as b, ArchitectureRule as c, ArkCheckConfig as d, CreateArchitectureProfileOptions as e, CreateElevenLayerArkConfigOptions as f, PolicySeverity as g, PolicyEnforcementMode as h, Policy as i, IntentCreator as j, IntentRelationship as k, CorrelationId as l, IntentRelationshipKind as m };
|