archctx-contracts 0.6.3 → 0.7.1
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/fixtures/invalid/recommendation-v3-structural-before-evidence.json +59 -0
- package/fixtures/valid/archctx-capabilities.json +3 -3
- package/fixtures/valid/capability-dependencies.json +35 -0
- package/fixtures/valid/docs-anchors.json +105 -0
- package/fixtures/valid/flow-selector-check.json +50 -0
- package/fixtures/valid/product-version-manifest.json +6 -6
- package/fixtures/valid/projection-manifest.json +175 -0
- package/fixtures/valid/projection-result.json +5 -5
- package/fixtures/valid/recommendation-v3.json +69 -0
- package/fixtures/valid/runtime-recommendation-show.json +312 -0
- package/fixtures/valid/runtime-refactor-scan.json +543 -0
- package/package.json +1 -1
- package/schemas/runtime/archctx-capabilities.schema.json +7 -2
- package/schemas/runtime/architecture-refresh-signal.schema.json +27 -0
- package/schemas/runtime/capability-dependencies.schema.json +116 -0
- package/schemas/runtime/changeset.schema.json +42 -16
- package/schemas/runtime/docs-anchors.schema.json +143 -0
- package/schemas/runtime/flow-selector-check.schema.json +109 -0
- package/schemas/runtime/projection-apply-readback.schema.json +351 -10
- package/schemas/runtime/projection-apply-recovery.schema.json +24 -3
- package/schemas/runtime/projection-manifest.schema.json +491 -0
- package/schemas/runtime/projection-request.schema.json +11 -2
- package/schemas/runtime/projection-result.schema.json +108 -8
- package/schemas/runtime/recommendation-v3.schema.json +1167 -0
- package/schemas/runtime/runtime-recommendation-show.schema.json +2463 -0
- package/schemas/runtime/runtime-refactor-scan.schema.json +2508 -0
- package/schemas/runtime/structural-observation-payload.schema.json +579 -0
- package/src/architecture.ts +6 -3
- package/src/docs-anchors.ts +126 -0
- package/src/index.ts +3 -0
- package/src/ledger.ts +26 -10
- package/src/ownership-dependencies.ts +129 -0
- package/src/product-version.ts +2 -2
- package/src/projection-manifest.ts +346 -0
- package/src/projection.ts +406 -6
- package/src/refactor.ts +305 -1
- package/src/schema.ts +20 -4
- package/src/validator.ts +87 -15
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `archctx docs anchors` (#298): a read-only signal for stale citations in human-owned text. It
|
|
3
|
+
* reads the human-owned regions of module documents and node prose (`summary`,
|
|
4
|
+
* `responsibilities`), and resolves each citation against the Git-visible tree and CodeGraph. It is
|
|
5
|
+
* a signal, not a gate: findings never change `ok`, freshness or the projection result.
|
|
6
|
+
*/
|
|
7
|
+
export const DOCS_ANCHORS_REPORT_SCHEMA_VERSION = "archcontext.docs-anchors/v1" as const;
|
|
8
|
+
|
|
9
|
+
export const DOCS_ANCHOR_FINDING_KINDS = ["line-moved", "line-out-of-range", "missing-path", "missing-symbol"] as const;
|
|
10
|
+
export type DocsAnchorFindingKind = (typeof DOCS_ANCHOR_FINDING_KINDS)[number];
|
|
11
|
+
|
|
12
|
+
/** Why a citation was found but one of its checks could not run. */
|
|
13
|
+
export const DOCS_ANCHOR_UNCHECKED_REASON_CODES = ["codegraph-unavailable", "language-unsupported", "path-ambiguous"] as const;
|
|
14
|
+
export type DocsAnchorUncheckedReasonCode = (typeof DOCS_ANCHOR_UNCHECKED_REASON_CODES)[number];
|
|
15
|
+
|
|
16
|
+
export const DOCS_ANCHOR_CODEGRAPH_UNAVAILABLE_REASON_CODES = ["index-missing", "index-open-failed"] as const;
|
|
17
|
+
export type DocsAnchorCodeGraphUnavailableReasonCode = (typeof DOCS_ANCHOR_CODEGRAPH_UNAVAILABLE_REASON_CODES)[number];
|
|
18
|
+
|
|
19
|
+
/** Where the citation is written: a human-owned document line, or a field of the node. */
|
|
20
|
+
export type DocsAnchorOriginV1 =
|
|
21
|
+
| { kind: "document"; path: string; line: number }
|
|
22
|
+
| { kind: "node-summary" }
|
|
23
|
+
| { kind: "node-responsibility"; index: number };
|
|
24
|
+
|
|
25
|
+
export interface DocsAnchorCitationV1 {
|
|
26
|
+
/** The inline code span as written, without the backticks. */
|
|
27
|
+
text: string;
|
|
28
|
+
/** The cited path as written. */
|
|
29
|
+
path?: string;
|
|
30
|
+
/** The Git-visible file or directory the path resolved to, when it differs from `path`. */
|
|
31
|
+
resolvedPath?: string;
|
|
32
|
+
line?: number;
|
|
33
|
+
endLine?: number;
|
|
34
|
+
symbol?: string;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export interface DocsAnchorFindingV1 {
|
|
38
|
+
kind: DocsAnchorFindingKind;
|
|
39
|
+
origin: DocsAnchorOriginV1;
|
|
40
|
+
citation: DocsAnchorCitationV1;
|
|
41
|
+
/** `line-out-of-range` only: the current line count of the cited file. */
|
|
42
|
+
lineCount?: number;
|
|
43
|
+
/** `line-moved` only: the current start lines of the cited symbol, sorted. */
|
|
44
|
+
currentLines?: number[];
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export interface DocsAnchorUncheckedV1 {
|
|
48
|
+
reasonCode: DocsAnchorUncheckedReasonCode;
|
|
49
|
+
origin: DocsAnchorOriginV1;
|
|
50
|
+
citation: DocsAnchorCitationV1;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export interface DocsAnchorsNodeV1 {
|
|
54
|
+
nodeId: string;
|
|
55
|
+
/** The node's module document, when the active layout has one and it exists. */
|
|
56
|
+
documentPath?: string;
|
|
57
|
+
citationCount: number;
|
|
58
|
+
findings: DocsAnchorFindingV1[];
|
|
59
|
+
unchecked: DocsAnchorUncheckedV1[];
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export type DocsAnchorsCodeGraphV1 =
|
|
63
|
+
| { availability: "ready" }
|
|
64
|
+
| { availability: "unavailable"; reasonCode: DocsAnchorCodeGraphUnavailableReasonCode };
|
|
65
|
+
|
|
66
|
+
export interface DocsAnchorsReportV1 {
|
|
67
|
+
schemaVersion: typeof DOCS_ANCHORS_REPORT_SCHEMA_VERSION;
|
|
68
|
+
profile: "default" | "repo-harness/v1";
|
|
69
|
+
codeGraph: DocsAnchorsCodeGraphV1;
|
|
70
|
+
summary: {
|
|
71
|
+
/** Model nodes whose prose and module document were read. */
|
|
72
|
+
nodes: number;
|
|
73
|
+
/** Module documents read. */
|
|
74
|
+
documents: number;
|
|
75
|
+
citations: number;
|
|
76
|
+
findings: number;
|
|
77
|
+
unchecked: number;
|
|
78
|
+
byKind: Record<DocsAnchorFindingKind, number>;
|
|
79
|
+
};
|
|
80
|
+
/** Nodes with at least one citation, sorted by `nodeId`. */
|
|
81
|
+
nodes: DocsAnchorsNodeV1[];
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
export function docsAnchorsReportIssues(report: DocsAnchorsReportV1): string[] {
|
|
85
|
+
const issues: string[] = [];
|
|
86
|
+
const ids = report.nodes.map((node) => node.nodeId);
|
|
87
|
+
const sorted = [...new Set(ids)].sort();
|
|
88
|
+
if (sorted.length !== ids.length || sorted.some((id, index) => id !== ids[index])) issues.push("nodes.nodeId must be sorted and unique");
|
|
89
|
+
const findings = report.nodes.flatMap((node) => node.findings);
|
|
90
|
+
const unchecked = report.nodes.flatMap((node) => node.unchecked);
|
|
91
|
+
if (report.summary.citations !== report.nodes.reduce((total, node) => total + node.citationCount, 0)) issues.push("summary.citations must equal the sum of nodes[].citationCount");
|
|
92
|
+
if (report.summary.findings !== findings.length) issues.push("summary.findings must equal the number of findings");
|
|
93
|
+
if (report.summary.unchecked !== unchecked.length) issues.push("summary.unchecked must equal the number of unchecked citations");
|
|
94
|
+
for (const kind of DOCS_ANCHOR_FINDING_KINDS) {
|
|
95
|
+
if (report.summary.byKind[kind] !== findings.filter((finding) => finding.kind === kind).length) issues.push(`summary.byKind.${kind} must equal the number of ${kind} findings`);
|
|
96
|
+
}
|
|
97
|
+
for (const [index, node] of report.nodes.entries()) {
|
|
98
|
+
if (node.citationCount === 0) issues.push(`nodes[${index}] must have at least one citation`);
|
|
99
|
+
for (const [findingIndex, finding] of node.findings.entries()) {
|
|
100
|
+
issues.push(...docsAnchorFindingIssues(finding, `nodes[${index}].findings[${findingIndex}]`));
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
if (report.codeGraph.availability === "ready" && unchecked.some((entry) => entry.reasonCode === "codegraph-unavailable")) {
|
|
104
|
+
issues.push("codegraph-unavailable is reported only when codeGraph.availability is unavailable");
|
|
105
|
+
}
|
|
106
|
+
return issues;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
function docsAnchorFindingIssues(finding: DocsAnchorFindingV1, prefix: string): string[] {
|
|
110
|
+
const issues: string[] = [];
|
|
111
|
+
const { citation } = finding;
|
|
112
|
+
if (finding.kind === "missing-path" && citation.path === undefined) issues.push(`${prefix} missing-path must name citation.path`);
|
|
113
|
+
if (finding.kind === "missing-symbol" && citation.symbol === undefined) issues.push(`${prefix} missing-symbol must name citation.symbol`);
|
|
114
|
+
if (finding.kind === "line-out-of-range" && (citation.line === undefined || finding.lineCount === undefined)) {
|
|
115
|
+
issues.push(`${prefix} line-out-of-range must name citation.line and lineCount`);
|
|
116
|
+
}
|
|
117
|
+
if ((finding.lineCount !== undefined) !== (finding.kind === "line-out-of-range")) issues.push(`${prefix}.lineCount is present only on line-out-of-range`);
|
|
118
|
+
if (finding.kind === "line-moved") {
|
|
119
|
+
const lines = finding.currentLines ?? [];
|
|
120
|
+
if (citation.line === undefined || citation.symbol === undefined) issues.push(`${prefix} line-moved must name citation.line and citation.symbol`);
|
|
121
|
+
if (lines.length === 0 || lines.some((line, index) => index > 0 && line <= lines[index - 1]!)) issues.push(`${prefix}.currentLines must be non-empty, sorted and unique`);
|
|
122
|
+
} else if (finding.currentLines !== undefined) {
|
|
123
|
+
issues.push(`${prefix}.currentLines is present only on line-moved`);
|
|
124
|
+
}
|
|
125
|
+
return issues;
|
|
126
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
export * from "./control-plane-routes";
|
|
2
2
|
export * from "./architecture";
|
|
3
|
+
export * from "./docs-anchors";
|
|
3
4
|
export * from "./external-docs";
|
|
4
5
|
export * from "./github-governance";
|
|
5
6
|
export * from "./ledger";
|
|
7
|
+
export * from "./ownership-dependencies";
|
|
6
8
|
export * from "./ports";
|
|
7
9
|
export * from "./practices";
|
|
8
10
|
export * from "./projection";
|
|
11
|
+
export * from "./projection-manifest";
|
|
9
12
|
export * from "./product-version";
|
|
10
13
|
export * from "./refactor";
|
|
11
14
|
export * from "./schema";
|
package/src/ledger.ts
CHANGED
|
@@ -2,6 +2,7 @@ import type { ArchitectureMajorChangeReasonCode } from "./projection";
|
|
|
2
2
|
import type {
|
|
3
3
|
ArchitectureTargetDeltaV1,
|
|
4
4
|
RefactorKillListEntryV1,
|
|
5
|
+
RefactorObservationEvidenceV1,
|
|
5
6
|
RefactorObservationKind,
|
|
6
7
|
RefactorScale,
|
|
7
8
|
RefactorTargetOutcomeV1
|
|
@@ -30,16 +31,18 @@ export type ArchitectureLedgerMode = "yaml" | "dual" | "dual-compare" | "ledger-
|
|
|
30
31
|
export type ArchitectureActorKind = "developer" | "daemon" | "hook" | "cli" | "mcp" | "subagent" | "migration" | "system";
|
|
31
32
|
export type ArchitectureActorSource = "cli" | "mcp" | "manual" | "daemon" | "system" | "subagent";
|
|
32
33
|
export type RecommendationCategory = (typeof RECOMMENDATION_CATEGORIES)[number];
|
|
33
|
-
export
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
34
|
+
export const RECOMMENDATION_STATUSES = [
|
|
35
|
+
"open",
|
|
36
|
+
"acknowledged",
|
|
37
|
+
"accepted",
|
|
38
|
+
"rejected",
|
|
39
|
+
"deferred",
|
|
40
|
+
"waived",
|
|
41
|
+
"resolved",
|
|
42
|
+
"superseded",
|
|
43
|
+
"expired"
|
|
44
|
+
] as const;
|
|
45
|
+
export type RecommendationStatus = (typeof RECOMMENDATION_STATUSES)[number];
|
|
43
46
|
export type ArchitectureEventSource =
|
|
44
47
|
| "prepare_task"
|
|
45
48
|
| "checkpoint"
|
|
@@ -695,12 +698,25 @@ export interface PracticeRecommendationPayloadV1 {
|
|
|
695
698
|
baselineDigest: string | null;
|
|
696
699
|
}
|
|
697
700
|
|
|
701
|
+
/**
|
|
702
|
+
* Self-contained: `metrics`, `signalIds` and `evidence` are copied verbatim from the assessed
|
|
703
|
+
* `RefactorObservationV1`, so a reader never has to join a recorded record back to an in-memory
|
|
704
|
+
* assessment by kind and subject. None of them is part of the fingerprint.
|
|
705
|
+
*
|
|
706
|
+
* A record written by archctx 0.6.3 or earlier (before #262) has none of the three, and the ledger
|
|
707
|
+
* keeps it as written, so `recommendations show` and `list` can return it. A reader detects such a
|
|
708
|
+
* record by the absence of `evidence`. It does not validate against
|
|
709
|
+
* `schemas/runtime/recommendation-v3.schema.json`, which describes the record 0.7.0 writes.
|
|
710
|
+
*/
|
|
698
711
|
export interface StructuralObservationPayloadV1 {
|
|
699
712
|
assessmentDigest: string;
|
|
700
713
|
kind: RefactorObservationKind;
|
|
701
714
|
affectedNodeIds: string[];
|
|
702
715
|
baselineSnapshotDigest: string;
|
|
703
716
|
derivedOutcomes: RefactorTargetOutcomeV1[];
|
|
717
|
+
metrics: Record<string, number | null>;
|
|
718
|
+
signalIds: string[];
|
|
719
|
+
evidence: RefactorObservationEvidenceV1;
|
|
704
720
|
}
|
|
705
721
|
|
|
706
722
|
export interface RefactorProposalPayloadV1 {
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import type { EvidenceCoverageLevelV2 } from "./ledger";
|
|
2
|
+
|
|
3
|
+
// --- ChangeSet ownership delta (plan preview) ---
|
|
4
|
+
//
|
|
5
|
+
// `archctx plan` and `archcontext_plan_update` add `preview.ownershipDelta` when a planned
|
|
6
|
+
// ChangeSet writes a node file. It compares file ownership before and after the planned model over
|
|
7
|
+
// the files the HEAD tree carries, with the parent-chain rule `refactor scan` uses
|
|
8
|
+
// (module-statistics `resolveOwnership`). It is read-only: nothing is written to compute it.
|
|
9
|
+
|
|
10
|
+
export const CHANGESET_OWNERSHIP_DELTA_SCHEMA_VERSION = "archcontext.changeset-ownership-delta/v1" as const;
|
|
11
|
+
/** Upper bound on the paths one ownership delta category lists. `count` always holds the full total. */
|
|
12
|
+
export const CHANGESET_OWNERSHIP_DELTA_PATH_LIMIT = 50;
|
|
13
|
+
|
|
14
|
+
export interface OwnershipDeltaSummaryV1 {
|
|
15
|
+
ownedFileCount: number;
|
|
16
|
+
/** Owned files whose claimants do not sit on one `parent` chain. */
|
|
17
|
+
multiplyOwnedFileCount: number;
|
|
18
|
+
/** Unclaimed files under a declared source root that no node excludes. */
|
|
19
|
+
unownedFileCount: number;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export interface OwnershipDeltaFileV1 {
|
|
23
|
+
path: string;
|
|
24
|
+
/** Owning node ids before the plan, sorted. More than one id means the claim is contested. */
|
|
25
|
+
before: string[];
|
|
26
|
+
/** Owning node ids after the plan, sorted. */
|
|
27
|
+
after: string[];
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export interface OwnershipDeltaCategoryV1 {
|
|
31
|
+
/** Every file in this category. */
|
|
32
|
+
count: number;
|
|
33
|
+
/** The first `pathLimit` files, sorted by path. */
|
|
34
|
+
files: OwnershipDeltaFileV1[];
|
|
35
|
+
/** `count - files.length`. */
|
|
36
|
+
omittedCount: number;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export interface ChangeSetOwnershipDeltaComputedV1 {
|
|
40
|
+
schemaVersion: typeof CHANGESET_OWNERSHIP_DELTA_SCHEMA_VERSION;
|
|
41
|
+
status: "computed";
|
|
42
|
+
ownershipRule: "parent-chain";
|
|
43
|
+
fileUniverse: "head-tracked-files";
|
|
44
|
+
trackedFileCount: number;
|
|
45
|
+
/** Node ids whose `source.include`, `source.exclude` or `parent` differ, or that the plan creates or deletes. */
|
|
46
|
+
changedNodeIds: string[];
|
|
47
|
+
pathLimit: number;
|
|
48
|
+
before: OwnershipDeltaSummaryV1;
|
|
49
|
+
after: OwnershipDeltaSummaryV1;
|
|
50
|
+
/** Unowned before, owned by exactly one node after. */
|
|
51
|
+
becameOwned: OwnershipDeltaCategoryV1;
|
|
52
|
+
/** Not contested before, contested (multiply owned) after. */
|
|
53
|
+
becameContested: OwnershipDeltaCategoryV1;
|
|
54
|
+
/** Owned before, owned by a different node set after, and not newly contested. */
|
|
55
|
+
ownerChanged: OwnershipDeltaCategoryV1;
|
|
56
|
+
/** Owned before, unowned after. */
|
|
57
|
+
becameUnowned: OwnershipDeltaCategoryV1;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export interface ChangeSetOwnershipDeltaUnavailableV1 {
|
|
61
|
+
schemaVersion: typeof CHANGESET_OWNERSHIP_DELTA_SCHEMA_VERSION;
|
|
62
|
+
status: "unavailable";
|
|
63
|
+
/** Why no delta was computed, for example a planned node body that does not parse. */
|
|
64
|
+
reason: string;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export type ChangeSetOwnershipDeltaV1 = ChangeSetOwnershipDeltaComputedV1 | ChangeSetOwnershipDeltaUnavailableV1;
|
|
68
|
+
|
|
69
|
+
// --- Capability dependency matrix (`archctx deps`) ---
|
|
70
|
+
|
|
71
|
+
export const CAPABILITY_DEPENDENCIES_SCHEMA_VERSION = "archcontext.capability-dependencies/v1" as const;
|
|
72
|
+
/** Default number of file-level edges `archctx deps` lists. `edges.count` always holds the full total. */
|
|
73
|
+
export const CAPABILITY_DEPENDENCIES_EDGE_LIMIT = 200;
|
|
74
|
+
/** The CodeGraph adapter has no bounded repository-wide call-edge read, so calls are not counted. */
|
|
75
|
+
export const CAPABILITY_DEPENDENCIES_CALLS_UNAVAILABLE_REASON = "call-edges-not-exposed" as const;
|
|
76
|
+
|
|
77
|
+
export interface CapabilityDependencyCellV1 {
|
|
78
|
+
/** Owning capability of the importing file. */
|
|
79
|
+
from: string;
|
|
80
|
+
/** Owning capability of the imported file. */
|
|
81
|
+
to: string;
|
|
82
|
+
/** Distinct file-to-file import edges from `from` into `to`. */
|
|
83
|
+
imports: number;
|
|
84
|
+
/** Always `null` in v1: call edges are not read (see `calls`). */
|
|
85
|
+
calls: null;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
export interface CapabilityDependencyEdgeV1 {
|
|
89
|
+
fromPath: string;
|
|
90
|
+
toPath: string;
|
|
91
|
+
fromCapability: string;
|
|
92
|
+
toCapability: string;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
export interface CapabilityDependenciesV1 {
|
|
96
|
+
schemaVersion: typeof CAPABILITY_DEPENDENCIES_SCHEMA_VERSION;
|
|
97
|
+
ownershipRule: "parent-chain";
|
|
98
|
+
/** `--from` / `--into` node ids, or `null`. A node matches a file when it or a descendant owns it. */
|
|
99
|
+
filter: { from: string | null; into: string | null };
|
|
100
|
+
/** Every `kind: capability` node id in the model, sorted. */
|
|
101
|
+
capabilities: string[];
|
|
102
|
+
/** Non-zero cells only, sorted by `from` then `to`. A cell with `from === to` counts edges inside one capability. */
|
|
103
|
+
matrix: CapabilityDependencyCellV1[];
|
|
104
|
+
imports: {
|
|
105
|
+
coverage: EvidenceCoverageLevelV2;
|
|
106
|
+
/** `code-facts-unavailable`, `code-facts-stale`, `code-facts-import-limit`, `code-facts-truncated`. */
|
|
107
|
+
reasonCodes: string[];
|
|
108
|
+
/** True when the index read is not the whole population for a reason other than the limit. */
|
|
109
|
+
truncated: boolean;
|
|
110
|
+
importNodeCount: number | null;
|
|
111
|
+
importNodeLimit: number;
|
|
112
|
+
importNodeLimitExceeded: boolean;
|
|
113
|
+
/** Distinct file-to-file edges that passed the filters, attributed or not. */
|
|
114
|
+
edgeCount: number;
|
|
115
|
+
/**
|
|
116
|
+
* Repository-local import specifiers (relative, or naming a workspace package) from filtered
|
|
117
|
+
* files that resolved to no repository file. Always 0 with `--into`: such an edge has no target.
|
|
118
|
+
*/
|
|
119
|
+
unresolvedCount: number;
|
|
120
|
+
/** Edges left out of `matrix` because one endpoint has no single owning capability. */
|
|
121
|
+
unattributed: { unownedEndpoint: number; contestedEndpoint: number; noCapabilityEndpoint: number };
|
|
122
|
+
};
|
|
123
|
+
calls: {
|
|
124
|
+
coverage: "unknown";
|
|
125
|
+
reasonCodes: [typeof CAPABILITY_DEPENDENCIES_CALLS_UNAVAILABLE_REASON];
|
|
126
|
+
};
|
|
127
|
+
/** Attributed file-level edges behind `matrix`, sorted by path. */
|
|
128
|
+
edges: { limit: number; count: number; omittedCount: number; items: CapabilityDependencyEdgeV1[] };
|
|
129
|
+
}
|
package/src/product-version.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export const ARCHCONTEXT_PRODUCT_NAME = "archctx";
|
|
2
|
-
export const ARCHCONTEXT_PRODUCT_VERSION = "0.
|
|
3
|
-
export const ARCHCONTEXT_PACKAGE_MANAGER = "bun@1.4.
|
|
2
|
+
export const ARCHCONTEXT_PRODUCT_VERSION = "0.7.1";
|
|
3
|
+
export const ARCHCONTEXT_PACKAGE_MANAGER = "bun@1.4.3";
|
|
4
4
|
export const ARCHCONTEXT_NODE_RANGE = ">=22.22 <26";
|
|
5
5
|
export const LOCAL_RUNTIME_RPC_SCHEMA_VERSION = "archcontext.runtime-rpc/v1";
|
|
6
6
|
export const ARCHCONTEXT_SCHEMA_SET_VERSION = "2026-07-11.explorer-view-v2";
|