@agentxm/specification-metadata 0.28.14-preview.1789139351.5cd4595aa

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/LICENSE ADDED
@@ -0,0 +1,110 @@
1
+ # Functional Source License, Version 1.1, MIT Future License
2
+
3
+ ## Abbreviation
4
+
5
+ FSL-1.1-MIT
6
+
7
+ ## Notice
8
+
9
+ Copyright 2025-2026 AgentXM, Inc.
10
+
11
+ ## Terms and Conditions
12
+
13
+ ### Licensor ("We")
14
+
15
+ The party offering the Software under these Terms and Conditions.
16
+
17
+ ### The Software
18
+
19
+ The "Software" is each version of the software that we make available under
20
+ these Terms and Conditions, as indicated by our inclusion of these Terms and
21
+ Conditions with the Software.
22
+
23
+ ### License Grant
24
+
25
+ Subject to your compliance with this License Grant and the Patents,
26
+ Redistribution and Trademark clauses below, we hereby grant you the right to
27
+ use, copy, modify, create derivative works, publicly perform, publicly display
28
+ and redistribute the Software for any Permitted Purpose identified below.
29
+
30
+ ### Permitted Purpose
31
+
32
+ A Permitted Purpose is any purpose other than a Competing Use. A Competing Use
33
+ means making the Software available to others in a commercial product or
34
+ service that:
35
+
36
+ 1. substitutes for the Software;
37
+
38
+ 2. substitutes for any other product or service we offer using the Software
39
+ that exists as of the date we make the Software available; or
40
+
41
+ 3. offers the same or substantially similar functionality as the Software.
42
+
43
+ Permitted Purposes specifically include using the Software:
44
+
45
+ 1. for your internal use and access;
46
+
47
+ 2. for non-commercial education;
48
+
49
+ 3. for non-commercial research; and
50
+
51
+ 4. in connection with professional services that you provide to a licensee
52
+ using the Software in accordance with these Terms and Conditions.
53
+
54
+ ### Patents
55
+
56
+ To the extent your use for a Permitted Purpose would necessarily infringe our
57
+ patents, the license grant above includes a license under our patents. If you
58
+ make a claim against any party that the Software infringes or contributes to
59
+ the infringement of any patent, then your patent license to the Software ends
60
+ immediately.
61
+
62
+ ### Redistribution
63
+
64
+ The Terms and Conditions apply to all copies, modifications and derivatives of
65
+ the Software.
66
+
67
+ If you redistribute any copies, modifications or derivatives of the Software,
68
+ you must include a copy of or a link to these Terms and Conditions and not
69
+ remove any copyright notices provided in or with the Software.
70
+
71
+ ### Disclaimer
72
+
73
+ THE SOFTWARE IS PROVIDED "AS IS" AND WITHOUT WARRANTIES OF ANY KIND, EXPRESS OR
74
+ IMPLIED, INCLUDING WITHOUT LIMITATION WARRANTIES OF FITNESS FOR A PARTICULAR
75
+ PURPOSE, MERCHANTABILITY, TITLE OR NON-INFRINGEMENT.
76
+
77
+ IN NO EVENT WILL WE HAVE ANY LIABILITY TO YOU ARISING OUT OF OR RELATED TO THE
78
+ SOFTWARE, INCLUDING INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES,
79
+ EVEN IF WE HAVE BEEN INFORMED OF THEIR POSSIBILITY IN ADVANCE.
80
+
81
+ ### Trademarks
82
+
83
+ Except for displaying the License Details and identifying us as the origin of
84
+ the Software, you have no right under these Terms and Conditions to use our
85
+ trademarks, trade names, service marks or product names.
86
+
87
+ ## Grant of Future License
88
+
89
+ We hereby irrevocably grant you an additional license to use the Software under
90
+ the MIT license that is effective on the second anniversary of the date we make
91
+ the Software available. On or after that date, you may use the Software under
92
+ the MIT license, in which case the following will apply:
93
+
94
+ Permission is hereby granted, free of charge, to any person obtaining a copy of
95
+ this software and associated documentation files (the "Software"), to deal in
96
+ the Software without restriction, including without limitation the rights to
97
+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
98
+ of the Software, and to permit persons to whom the Software is furnished to do
99
+ so, subject to the following conditions:
100
+
101
+ The above copyright notice and this permission notice shall be included in all
102
+ copies or substantial portions of the Software.
103
+
104
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
105
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
106
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
107
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
108
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
109
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
110
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,18 @@
1
+ # @agentxm/specification-metadata
2
+
3
+ The executable-specification metadata contract that AXM repositories share:
4
+ `defineSpecification`, `defineProductGoals`, `defineExecutionBinding`, and
5
+ `defineBoundEvidence` with their vocabularies (classes, roles, boundaries,
6
+ methods, quality characteristics), the schema decoders that tooling uses to
7
+ read authored metadata, the corpus conformance check, and the shared product
8
+ goal registry. Root export only.
9
+
10
+ This is engineering support, not runtime code: it ships in the AXM release
11
+ cohort so consumer repositories can author specifications against the same
12
+ contract, but no runtime package may depend on it (ESLint keeps `role:tooling`
13
+ out of every runtime role). Dependency budget: `effect` only. It keeps a local
14
+ copy of the schema-issue formatter rather than depending on the extension
15
+ model, because specifications inside the extension model import this package
16
+ and a model dependency would make the two builds circular.
17
+
18
+ FSL-1.1-MIT © 2025-2026 AgentXM, Inc.
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Corpus conformance for executable specifications.
3
+ *
4
+ * A pure check over already-decoded metadata: it establishes that a
5
+ * specification corpus has the contract's form and linkage — vocabulary,
6
+ * identity, goal references, boundary rationale, lineage, and product
7
+ * language. A clean result never establishes that the accepted obligations
8
+ * are the right ones; that judgment stays with set review and the acceptance
9
+ * decision.
10
+ *
11
+ * Both repositories run this check over their own corpus. Shared goal
12
+ * identities come from the installed contract, so a specification that names
13
+ * a shared goal the installed release cohort does not register is a dangling
14
+ * cross-repository reference and fails here.
15
+ *
16
+ * @experimental This API is unstable and may change without notice.
17
+ */
18
+ import { type ExecutionBinding, type ProductGoalRegistry, type SpecificationMetadata } from "./contract.js";
19
+ export interface ConformanceIssue {
20
+ readonly severity: "error" | "warning";
21
+ /** Repository-relative source the issue is anchored to. */
22
+ readonly source: string;
23
+ readonly message: string;
24
+ }
25
+ export interface CorpusSpecification {
26
+ /** Repository-relative source path of the specification file. */
27
+ readonly source: string;
28
+ readonly metadata: SpecificationMetadata;
29
+ }
30
+ export interface CorpusExecutionBinding {
31
+ /** Repository-relative source path of the boundary execution. */
32
+ readonly source: string;
33
+ readonly binding: ExecutionBinding;
34
+ }
35
+ export interface CorpusInput {
36
+ readonly specifications: readonly CorpusSpecification[];
37
+ /** The repository's local product-goal registry. */
38
+ readonly localGoals: ProductGoalRegistry;
39
+ /** Source path reported for local-registry issues. */
40
+ readonly localGoalsSource: string;
41
+ /** Shared goals from the installed contract. Defaults to `sharedProductGoals`. */
42
+ readonly sharedGoals?: ProductGoalRegistry;
43
+ readonly executionBindings?: readonly CorpusExecutionBinding[];
44
+ }
45
+ /**
46
+ * Whether at least one declared method produces runner evidence. A method
47
+ * set made only of unverifiable methods is reported as unverified by the
48
+ * harness, never as passing.
49
+ */
50
+ export declare const isExecutableMethodSet: (methods: readonly string[]) => boolean;
51
+ /**
52
+ * Lints a title or statement for implementation vocabulary. Specification
53
+ * text describes conditions and observable results; it never names
54
+ * handlers, services, Layers, private functions, or mock interactions.
55
+ */
56
+ export declare const lintProductLanguage: (text: string) => string | undefined;
57
+ /**
58
+ * Checks one corpus for contract form and linkage. Issues are ordered by
59
+ * discovery; callers decide whether warnings block.
60
+ */
61
+ export declare const checkSpecificationCorpus: (input: CorpusInput) => readonly ConformanceIssue[];
62
+ //# sourceMappingURL=conformance.d.ts.map
@@ -0,0 +1,137 @@
1
+ /**
2
+ * Corpus conformance for executable specifications.
3
+ *
4
+ * A pure check over already-decoded metadata: it establishes that a
5
+ * specification corpus has the contract's form and linkage — vocabulary,
6
+ * identity, goal references, boundary rationale, lineage, and product
7
+ * language. A clean result never establishes that the accepted obligations
8
+ * are the right ones; that judgment stays with set review and the acceptance
9
+ * decision.
10
+ *
11
+ * Both repositories run this check over their own corpus. Shared goal
12
+ * identities come from the installed contract, so a specification that names
13
+ * a shared goal the installed release cohort does not register is a dangling
14
+ * cross-repository reference and fails here.
15
+ *
16
+ * @experimental This API is unstable and may change without notice.
17
+ */
18
+ import { IDENTITY_SEGMENT_PATTERN, UNVERIFIABLE_SPECIFICATION_METHODS, } from "./contract.js";
19
+ import { sharedProductGoals } from "./shared-goals.js";
20
+ /** Words that identify implementation vocabulary leaking into product language. */
21
+ const IMPLEMENTATION_WORDS = new Set([
22
+ "layer",
23
+ "handler",
24
+ "mock",
25
+ "stub",
26
+ "middleware",
27
+ "refactor",
28
+ ]);
29
+ const CAMEL_CASE_TOKEN = /\b[a-z]+[A-Z][A-Za-z]*\b/;
30
+ /**
31
+ * Whether at least one declared method produces runner evidence. A method
32
+ * set made only of unverifiable methods is reported as unverified by the
33
+ * harness, never as passing.
34
+ */
35
+ export const isExecutableMethodSet = (methods) => methods.some((method) => !UNVERIFIABLE_SPECIFICATION_METHODS.some((entry) => entry === method));
36
+ /**
37
+ * Lints a title or statement for implementation vocabulary. Specification
38
+ * text describes conditions and observable results; it never names
39
+ * handlers, services, Layers, private functions, or mock interactions.
40
+ */
41
+ export const lintProductLanguage = (text) => {
42
+ if (CAMEL_CASE_TOKEN.test(text)) {
43
+ return `contains an implementation-style camelCase token: "${text}"`;
44
+ }
45
+ for (const word of text.toLowerCase().split(/[^a-z]+/)) {
46
+ if (IMPLEMENTATION_WORDS.has(word)) {
47
+ return `contains implementation vocabulary ("${word}"): "${text}"`;
48
+ }
49
+ }
50
+ return undefined;
51
+ };
52
+ const error = (source, message) => ({
53
+ severity: "error",
54
+ source,
55
+ message,
56
+ });
57
+ const warning = (source, message) => ({
58
+ severity: "warning",
59
+ source,
60
+ message,
61
+ });
62
+ /**
63
+ * Checks one corpus for contract form and linkage. Issues are ordered by
64
+ * discovery; callers decide whether warnings block.
65
+ */
66
+ export const checkSpecificationCorpus = (input) => {
67
+ const issues = [];
68
+ const sharedGoals = input.sharedGoals ?? sharedProductGoals;
69
+ for (const id of Object.keys(input.localGoals)) {
70
+ if (!IDENTITY_SEGMENT_PATTERN.test(id)) {
71
+ issues.push(error(input.localGoalsSource, `product-goal id \`${id}\` must be a lowercase kebab identifier`));
72
+ }
73
+ if (Object.hasOwn(sharedGoals, id)) {
74
+ issues.push(error(input.localGoalsSource, `product goal \`${id}\` is a shared goal; reference the shared identity instead of redefining it locally`));
75
+ }
76
+ }
77
+ const registeredGoals = new Map();
78
+ for (const registry of [sharedGoals, input.localGoals]) {
79
+ for (const [id, definition] of Object.entries(registry)) {
80
+ registeredGoals.set(id, { status: definition.status ?? "active" });
81
+ }
82
+ }
83
+ const byRequirement = new Map();
84
+ for (const specification of input.specifications) {
85
+ const existing = byRequirement.get(specification.metadata.requirement);
86
+ if (existing !== undefined) {
87
+ issues.push(error(specification.source, `duplicate requirement identity \`${specification.metadata.requirement}\` (also declared in ${existing.source})`));
88
+ continue;
89
+ }
90
+ byRequirement.set(specification.metadata.requirement, specification);
91
+ }
92
+ const referencedGoals = new Set();
93
+ for (const { source, metadata } of input.specifications) {
94
+ for (const goal of metadata.goals) {
95
+ referencedGoals.add(goal);
96
+ const registered = registeredGoals.get(goal);
97
+ if (registered === undefined) {
98
+ issues.push(error(source, `references unregistered product goal \`${goal}\``));
99
+ }
100
+ else if (registered.status === "retired") {
101
+ issues.push(error(source, `references retired product goal \`${goal}\`; the specification is a retirement candidate`));
102
+ }
103
+ }
104
+ for (const superseded of metadata.supersedes) {
105
+ if (byRequirement.has(superseded)) {
106
+ issues.push(error(source, `supersedes \`${superseded}\`, which is still present in the corpus; retire the predecessor in the same change`));
107
+ }
108
+ }
109
+ const titleFinding = lintProductLanguage(metadata.title);
110
+ if (titleFinding !== undefined) {
111
+ issues.push(error(source, `title ${titleFinding}`));
112
+ }
113
+ const statementFinding = lintProductLanguage(metadata.statement);
114
+ if (statementFinding !== undefined) {
115
+ issues.push(error(source, `statement ${statementFinding}`));
116
+ }
117
+ if (!isExecutableMethodSet(metadata.methods)) {
118
+ issues.push(warning(source, `declares only unverifiable methods (${metadata.methods.join(", ")}); the harness reports this specification as unverified`));
119
+ }
120
+ }
121
+ for (const [id, definition] of registeredGoals) {
122
+ if (definition.status === "active" &&
123
+ !referencedGoals.has(id) &&
124
+ input.specifications.length > 0) {
125
+ issues.push(warning(input.localGoalsSource, `active product goal \`${id}\` has no referencing specification (missing coverage or a dead goal)`));
126
+ }
127
+ }
128
+ for (const { source, binding } of input.executionBindings ?? []) {
129
+ for (const requirement of binding.requirements) {
130
+ if (!byRequirement.has(requirement)) {
131
+ issues.push(error(source, `execution binding references unknown requirement \`${requirement}\``));
132
+ }
133
+ }
134
+ }
135
+ return issues;
136
+ };
137
+ //# sourceMappingURL=conformance.js.map
@@ -0,0 +1,215 @@
1
+ /**
2
+ * Shared executable-specification contract.
3
+ *
4
+ * One metadata contract, one classification lens, one set of controlled
5
+ * vocabularies, and one shared product-goal registry for every AgentXM
6
+ * specification corpus. Each repository keeps its own specification files,
7
+ * local product goals, and local placement rules; only this contract and the
8
+ * shared goal identities cross the repository boundary.
9
+ *
10
+ * Metadata is data. Every specification file exports one `specification`
11
+ * constant built with `defineSpecification`: a literal object carrying only
12
+ * the cross-method information that discovery, conformance, and reporting
13
+ * need. It never wraps or replaces native test-framework constructs, and
14
+ * catalog tooling reads it statically without executing the specification.
15
+ *
16
+ * @experimental This API is unstable and may change without notice.
17
+ */
18
+ /**
19
+ * The review lens a specification is classified by. Classification selects
20
+ * the review expertise and quality criteria the obligation most needs; it
21
+ * does not determine priority, acceptance, subject, or verification method.
22
+ *
23
+ * - `functional`: responses, transformations, rules, and observable
24
+ * capabilities;
25
+ * - `quality`: a measurable degree such as performance, reliability,
26
+ * security, or installability, named by `characteristic`;
27
+ * - `constraint`: a genuine restriction on solution, environment,
28
+ * technology, or operation;
29
+ * - `external-conformance`: an obligation adopted from a named law,
30
+ * standard, contract, or interface;
31
+ * - `human-factors`: capabilities and qualities arising from people, tasks,
32
+ * accessibility, ergonomics, or context of use; and
33
+ * - `process`: an obligation on development, delivery, operation, support,
34
+ * migration, or retirement.
35
+ */
36
+ export type SpecificationClass = "functional" | "quality" | "constraint" | "external-conformance" | "human-factors" | "process";
37
+ export declare const SPECIFICATION_CLASSES: readonly SpecificationClass[];
38
+ /**
39
+ * How a specification participates in the product contract and its reading
40
+ * paths. Experience specifications describe tasks in product language,
41
+ * interface specifications state public machine-consumable contracts, and
42
+ * supporting specifications state subordinate system or engineering
43
+ * obligations.
44
+ */
45
+ export type SpecificationRole = "experience" | "interface" | "supporting";
46
+ export declare const SPECIFICATION_ROLES: readonly SpecificationRole[];
47
+ /**
48
+ * Where the specification's default execution observes the system.
49
+ * Additional boundary-specific executions bind their own evidence to the
50
+ * same requirement identity.
51
+ */
52
+ export type ExecutionBoundary = "memory" | "process" | "binary" | "packed-artifact" | "installed" | "platform" | "published-artifact" | "deployed" | "repository";
53
+ export declare const EXECUTION_BOUNDARIES: readonly ExecutionBoundary[];
54
+ /** When this specification's evidence is selected by default. */
55
+ export type ExecutionSelection = "per-change" | "platform-matrix" | "scheduled" | "release-candidate" | "post-deployment";
56
+ export declare const EXECUTION_SELECTIONS: readonly ExecutionSelection[];
57
+ /**
58
+ * Known testing methods. The vocabulary is extensible: a method not listed
59
+ * here is accepted when it is a lowercase kebab identifier, so a new or
60
+ * combined method never needs a contract change before use.
61
+ */
62
+ export declare const KNOWN_SPECIFICATION_METHODS: readonly ["example", "decision-table", "property", "model", "contract", "conformance-matrix", "golden-output", "measurement", "static", "smoke", "manual", "review"];
63
+ export type KnownSpecificationMethod = (typeof KNOWN_SPECIFICATION_METHODS)[number];
64
+ /**
65
+ * Methods whose evidence is produced by a person rather than a runner. A
66
+ * specification whose methods are all unverifiable is reported as unverified
67
+ * by the harness; it is never reported as passing.
68
+ */
69
+ export declare const UNVERIFIABLE_SPECIFICATION_METHODS: readonly KnownSpecificationMethod[];
70
+ /**
71
+ * Known quality characteristics. Required for `quality`-class specifications
72
+ * and permitted elsewhere; extensible under the same identifier rule as
73
+ * methods.
74
+ */
75
+ export declare const KNOWN_QUALITY_CHARACTERISTICS: readonly ["installability", "compatibility", "performance", "security", "privacy", "reliability", "availability", "maintainability", "observability", "accessibility", "usability"];
76
+ export type KnownQualityCharacteristic = (typeof KNOWN_QUALITY_CHARACTERISTICS)[number];
77
+ /** Segments of a requirement identity or product-goal identity. */
78
+ export declare const IDENTITY_SEGMENT_PATTERN: RegExp;
79
+ /** A declared blind spot of one specification and the condition that retires it. */
80
+ export interface SpecificationLimitation {
81
+ /** What the specification's evidence cannot establish, in product language. */
82
+ readonly limitation: string;
83
+ /** The observable condition under which this limitation is removed. */
84
+ readonly retirementCondition: string;
85
+ }
86
+ export interface SpecificationMetadata {
87
+ /**
88
+ * Stable requirement identity: lowercase kebab path segments joined by `/`,
89
+ * for example `cli/install/realizes-direct-intent`. Declared here, not
90
+ * derived from the filesystem; repository policy keeps it equal to the
91
+ * file's path under `specifications/`, so moving or renaming a file is an
92
+ * identity change — a requirements decision.
93
+ */
94
+ readonly requirement: string;
95
+ /** Product-language title, readable without the source. */
96
+ readonly title: string;
97
+ /**
98
+ * The normative statement: obligated subject, condition or trigger, and
99
+ * the required or prohibited outcome, in product language. This sentence
100
+ * is the obligation; native tests are its reportable scenarios.
101
+ */
102
+ readonly statement: string;
103
+ /** The review lens this specification is classified by. */
104
+ readonly class: SpecificationClass;
105
+ /**
106
+ * The quality characteristic a `quality` specification measures, or the
107
+ * human-factors quality a `human-factors` specification names. Required
108
+ * for `quality`; optional otherwise.
109
+ */
110
+ readonly characteristic?: string;
111
+ /** The specification's primary role in the product contract. */
112
+ readonly role: SpecificationRole;
113
+ /**
114
+ * Registered product-goal identities this specification supports. Every
115
+ * entry must exist, active, in the shared registry or the repository's
116
+ * local registry.
117
+ */
118
+ readonly goals: readonly [string, ...string[]];
119
+ /** Observation boundary of the default execution. Defaults to `memory`. */
120
+ readonly boundary?: ExecutionBoundary;
121
+ /**
122
+ * Why this specification observes a boundary other than memory: the
123
+ * evidence that boundary supplies which an in-memory run cannot. Required
124
+ * whenever `boundary` is not `memory`.
125
+ */
126
+ readonly boundaryRationale?: string;
127
+ /** Testing methods the specification actually uses. */
128
+ readonly methods: readonly [string, ...string[]];
129
+ /** Default evidence-selection policy. Defaults to `per-change`. */
130
+ readonly selection?: ExecutionSelection;
131
+ /**
132
+ * Sources this obligation was derived from: predecessor requirement
133
+ * identities, prior specification identities, tests that witnessed the
134
+ * behavior, or surfaces that supplied its conditions. Empty when the
135
+ * specification is an original source.
136
+ */
137
+ readonly derivedFrom: readonly string[];
138
+ /**
139
+ * Identities this specification replaces as authority. A superseded
140
+ * identity is retired in the same change that lands its successor and
141
+ * must not remain present in the corpus.
142
+ */
143
+ readonly supersedes: readonly string[];
144
+ /**
145
+ * Conditions the obligation presumes and its evidence does not establish.
146
+ * An empty list records that none were found after review; `"unknown"`
147
+ * records that assumptions have not been assessed.
148
+ */
149
+ readonly assumptions: readonly string[] | "unknown";
150
+ /**
151
+ * Unresolved questions about the obligation's meaning, scope, or subject.
152
+ * An empty list records that none remain; `"unknown"` records that the
153
+ * specification has not been reviewed for open questions.
154
+ */
155
+ readonly openQuestions: readonly string[] | "unknown";
156
+ /** Declared blind spots of this specification's evidence. */
157
+ readonly limitations?: readonly [SpecificationLimitation, ...SpecificationLimitation[]];
158
+ }
159
+ /**
160
+ * Declares one specification's metadata. Identity function: it exists to type
161
+ * the literal and to give discovery a stable syntactic anchor.
162
+ */
163
+ export declare const defineSpecification: <const M extends SpecificationMetadata>(metadata: M) => M;
164
+ /** One registered product goal. */
165
+ export interface ProductGoalDefinition {
166
+ /** One-sentence statement of the desired outcome this goal names. */
167
+ readonly outcome: string;
168
+ /**
169
+ * Retired goals stay registered so specifications referencing them are
170
+ * flagged as retirement candidates instead of silently orphaned.
171
+ */
172
+ readonly status?: "active" | "retired";
173
+ }
174
+ export type ProductGoalRegistry = Readonly<Record<string, ProductGoalDefinition>>;
175
+ /**
176
+ * Declares a product-goal registry. Identity function with the same
177
+ * literal-only discipline as `defineSpecification`.
178
+ */
179
+ export declare const defineProductGoals: <const R extends ProductGoalRegistry>(registry: R) => R;
180
+ /**
181
+ * Binds a boundary-specific execution (for example an end-to-end test file)
182
+ * to the requirement identities it provides evidence for. The execution is
183
+ * evidence, never a second authority: it must not state new requirements.
184
+ */
185
+ export interface ExecutionBinding {
186
+ /** Requirement identities this execution binds evidence to. */
187
+ readonly requirements: readonly [string, ...string[]];
188
+ /** Observation boundary of this execution. */
189
+ readonly boundary: ExecutionBoundary;
190
+ /**
191
+ * The boundary-specific reason this execution exists beyond the in-memory
192
+ * evidence — required so boundary scenarios never silently duplicate
193
+ * in-memory scenarios.
194
+ */
195
+ readonly rationale: string;
196
+ }
197
+ /** Declares a boundary-specific execution binding. Identity function. */
198
+ export declare const defineExecutionBinding: <const B extends ExecutionBinding>(binding: B) => B;
199
+ /**
200
+ * One static verification gate whose result is bound to the owning
201
+ * specification's requirement identity. Bound evidence supports the owning
202
+ * specification; it never replaces it and never states a new requirement.
203
+ */
204
+ export interface BoundEvidenceGate {
205
+ /** The static gate, named by the verification surface that runs it. */
206
+ readonly gate: string;
207
+ /** What the gate verifies for this requirement, in product language. */
208
+ readonly verifies: string;
209
+ }
210
+ /**
211
+ * Declares the static gates bound to a specification as evidence. Exported
212
+ * as `boundEvidence` beside the `specification` constant. Identity function.
213
+ */
214
+ export declare const defineBoundEvidence: <const E extends readonly [BoundEvidenceGate, ...BoundEvidenceGate[]]>(evidence: E) => E;
215
+ //# sourceMappingURL=contract.d.ts.map
@@ -0,0 +1,114 @@
1
+ /**
2
+ * Shared executable-specification contract.
3
+ *
4
+ * One metadata contract, one classification lens, one set of controlled
5
+ * vocabularies, and one shared product-goal registry for every AgentXM
6
+ * specification corpus. Each repository keeps its own specification files,
7
+ * local product goals, and local placement rules; only this contract and the
8
+ * shared goal identities cross the repository boundary.
9
+ *
10
+ * Metadata is data. Every specification file exports one `specification`
11
+ * constant built with `defineSpecification`: a literal object carrying only
12
+ * the cross-method information that discovery, conformance, and reporting
13
+ * need. It never wraps or replaces native test-framework constructs, and
14
+ * catalog tooling reads it statically without executing the specification.
15
+ *
16
+ * @experimental This API is unstable and may change without notice.
17
+ */
18
+ export const SPECIFICATION_CLASSES = [
19
+ "functional",
20
+ "quality",
21
+ "constraint",
22
+ "external-conformance",
23
+ "human-factors",
24
+ "process",
25
+ ];
26
+ export const SPECIFICATION_ROLES = [
27
+ "experience",
28
+ "interface",
29
+ "supporting",
30
+ ];
31
+ export const EXECUTION_BOUNDARIES = [
32
+ "memory",
33
+ "process",
34
+ "binary",
35
+ "packed-artifact",
36
+ "installed",
37
+ "platform",
38
+ "published-artifact",
39
+ "deployed",
40
+ "repository",
41
+ ];
42
+ export const EXECUTION_SELECTIONS = [
43
+ "per-change",
44
+ "platform-matrix",
45
+ "scheduled",
46
+ "release-candidate",
47
+ "post-deployment",
48
+ ];
49
+ /**
50
+ * Known testing methods. The vocabulary is extensible: a method not listed
51
+ * here is accepted when it is a lowercase kebab identifier, so a new or
52
+ * combined method never needs a contract change before use.
53
+ */
54
+ export const KNOWN_SPECIFICATION_METHODS = [
55
+ "example",
56
+ "decision-table",
57
+ "property",
58
+ "model",
59
+ "contract",
60
+ "conformance-matrix",
61
+ "golden-output",
62
+ "measurement",
63
+ "static",
64
+ "smoke",
65
+ "manual",
66
+ "review",
67
+ ];
68
+ /**
69
+ * Methods whose evidence is produced by a person rather than a runner. A
70
+ * specification whose methods are all unverifiable is reported as unverified
71
+ * by the harness; it is never reported as passing.
72
+ */
73
+ export const UNVERIFIABLE_SPECIFICATION_METHODS = [
74
+ "manual",
75
+ "review",
76
+ ];
77
+ /**
78
+ * Known quality characteristics. Required for `quality`-class specifications
79
+ * and permitted elsewhere; extensible under the same identifier rule as
80
+ * methods.
81
+ */
82
+ export const KNOWN_QUALITY_CHARACTERISTICS = [
83
+ "installability",
84
+ "compatibility",
85
+ "performance",
86
+ "security",
87
+ "privacy",
88
+ "reliability",
89
+ "availability",
90
+ "maintainability",
91
+ "observability",
92
+ "accessibility",
93
+ "usability",
94
+ ];
95
+ /** Segments of a requirement identity or product-goal identity. */
96
+ export const IDENTITY_SEGMENT_PATTERN = /^[a-z0-9]+(-[a-z0-9]+)*$/;
97
+ /**
98
+ * Declares one specification's metadata. Identity function: it exists to type
99
+ * the literal and to give discovery a stable syntactic anchor.
100
+ */
101
+ export const defineSpecification = (metadata) => metadata;
102
+ /**
103
+ * Declares a product-goal registry. Identity function with the same
104
+ * literal-only discipline as `defineSpecification`.
105
+ */
106
+ export const defineProductGoals = (registry) => registry;
107
+ /** Declares a boundary-specific execution binding. Identity function. */
108
+ export const defineExecutionBinding = (binding) => binding;
109
+ /**
110
+ * Declares the static gates bound to a specification as evidence. Exported
111
+ * as `boundEvidence` beside the `specification` constant. Identity function.
112
+ */
113
+ export const defineBoundEvidence = (evidence) => evidence;
114
+ //# sourceMappingURL=contract.js.map
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Decoders for the shared specification contract.
3
+ *
4
+ * Catalog tooling extracts each literal statically; result adapters read the
5
+ * exported constant at run time. Both decode the unknown value through these
6
+ * schemas so every corpus applies one vocabulary with one set of messages.
7
+ *
8
+ * @experimental This API is unstable and may change without notice.
9
+ */
10
+ import * as Schema from "effect/Schema";
11
+ import { type ExecutionBinding, type ProductGoalRegistry, type BoundEvidenceGate, type SpecificationMetadata } from "./contract.js";
12
+ export declare const SpecificationMetadataSchema: Schema.Struct<{
13
+ readonly requirement: Schema.String;
14
+ readonly title: Schema.NonEmptyString;
15
+ readonly statement: Schema.NonEmptyString;
16
+ readonly class: Schema.Literals<import("./contract.js").SpecificationClass[]>;
17
+ readonly characteristic: Schema.optionalKey<Schema.String>;
18
+ readonly role: Schema.Literals<import("./contract.js").SpecificationRole[]>;
19
+ readonly goals: Schema.NonEmptyArray<Schema.String>;
20
+ readonly boundary: Schema.optionalKey<Schema.Literals<import("./contract.js").ExecutionBoundary[]>>;
21
+ readonly boundaryRationale: Schema.optionalKey<Schema.NonEmptyString>;
22
+ readonly methods: Schema.NonEmptyArray<Schema.String>;
23
+ readonly selection: Schema.optionalKey<Schema.Literals<import("./contract.js").ExecutionSelection[]>>;
24
+ readonly derivedFrom: Schema.$Array<Schema.NonEmptyString>;
25
+ readonly supersedes: Schema.$Array<Schema.NonEmptyString>;
26
+ readonly assumptions: Schema.Union<readonly [Schema.$Array<Schema.NonEmptyString>, Schema.Literal<"unknown">]>;
27
+ readonly openQuestions: Schema.Union<readonly [Schema.$Array<Schema.NonEmptyString>, Schema.Literal<"unknown">]>;
28
+ readonly limitations: Schema.optionalKey<Schema.NonEmptyArray<Schema.Struct<{
29
+ readonly limitation: Schema.NonEmptyString;
30
+ readonly retirementCondition: Schema.NonEmptyString;
31
+ }>>>;
32
+ }>;
33
+ export declare const ProductGoalRegistrySchema: Schema.$Record<Schema.String, Schema.Struct<{
34
+ readonly outcome: Schema.NonEmptyString;
35
+ readonly status: Schema.optionalKey<Schema.Literals<readonly ["active", "retired"]>>;
36
+ }>>;
37
+ export declare const ExecutionBindingSchema: Schema.Struct<{
38
+ readonly requirements: Schema.NonEmptyArray<Schema.String>;
39
+ readonly boundary: Schema.Literals<import("./contract.js").ExecutionBoundary[]>;
40
+ readonly rationale: Schema.NonEmptyString;
41
+ }>;
42
+ export declare const BoundEvidenceSchema: Schema.NonEmptyArray<Schema.Struct<{
43
+ readonly gate: Schema.NonEmptyString;
44
+ readonly verifies: Schema.NonEmptyString;
45
+ }>>;
46
+ export type DecodeResult<T> = {
47
+ readonly ok: true;
48
+ readonly value: T;
49
+ } | {
50
+ readonly ok: false;
51
+ readonly issues: readonly string[];
52
+ };
53
+ export declare const decodeSpecificationMetadata: (value: unknown) => DecodeResult<SpecificationMetadata>;
54
+ export declare const decodeProductGoalRegistry: (value: unknown) => DecodeResult<ProductGoalRegistry>;
55
+ export declare const decodeExecutionBinding: (value: unknown) => DecodeResult<ExecutionBinding>;
56
+ export declare const decodeBoundEvidence: (value: unknown) => DecodeResult<readonly [BoundEvidenceGate, ...BoundEvidenceGate[]]>;
57
+ //# sourceMappingURL=decode.d.ts.map
@@ -0,0 +1,91 @@
1
+ /**
2
+ * Decoders for the shared specification contract.
3
+ *
4
+ * Catalog tooling extracts each literal statically; result adapters read the
5
+ * exported constant at run time. Both decode the unknown value through these
6
+ * schemas so every corpus applies one vocabulary with one set of messages.
7
+ *
8
+ * @experimental This API is unstable and may change without notice.
9
+ */
10
+ import * as Result from "effect/Result";
11
+ import * as Schema from "effect/Schema";
12
+ import { formatSchemaIssuesToLines } from "./schema-issues.js";
13
+ import { EXECUTION_BOUNDARIES, EXECUTION_SELECTIONS, IDENTITY_SEGMENT_PATTERN, SPECIFICATION_CLASSES, SPECIFICATION_ROLES, } from "./contract.js";
14
+ const REQUIREMENT_IDENTITY_PATTERN = /^[a-z0-9]+(-[a-z0-9]+)*(\/[a-z0-9]+(-[a-z0-9]+)*)+$/;
15
+ const RequirementIdentitySchema = Schema.String.pipe(Schema.check(Schema.isPattern(REQUIREMENT_IDENTITY_PATTERN, {
16
+ title: "Requirement identity",
17
+ message: "Expected two or more lowercase kebab segments joined by '/'",
18
+ })));
19
+ const IdentifierSchema = Schema.String.pipe(Schema.check(Schema.isPattern(IDENTITY_SEGMENT_PATTERN, {
20
+ title: "Identifier",
21
+ message: "Expected a lowercase kebab identifier",
22
+ })));
23
+ const SpecificationLimitationSchema = Schema.Struct({
24
+ limitation: Schema.NonEmptyString,
25
+ retirementCondition: Schema.NonEmptyString,
26
+ });
27
+ const StatedOrUnknownSchema = Schema.Union([
28
+ Schema.Array(Schema.NonEmptyString),
29
+ Schema.Literal("unknown"),
30
+ ]);
31
+ const specificationClasses = SPECIFICATION_CLASSES.map((entry) => entry);
32
+ const specificationRoles = SPECIFICATION_ROLES.map((entry) => entry);
33
+ const executionBoundaries = EXECUTION_BOUNDARIES.map((entry) => entry);
34
+ const executionSelections = EXECUTION_SELECTIONS.map((entry) => entry);
35
+ export const SpecificationMetadataSchema = Schema.Struct({
36
+ requirement: RequirementIdentitySchema,
37
+ title: Schema.NonEmptyString,
38
+ statement: Schema.NonEmptyString,
39
+ class: Schema.Literals(specificationClasses),
40
+ characteristic: Schema.optionalKey(IdentifierSchema),
41
+ role: Schema.Literals(specificationRoles),
42
+ goals: Schema.NonEmptyArray(IdentifierSchema),
43
+ boundary: Schema.optionalKey(Schema.Literals(executionBoundaries)),
44
+ boundaryRationale: Schema.optionalKey(Schema.NonEmptyString),
45
+ methods: Schema.NonEmptyArray(IdentifierSchema),
46
+ selection: Schema.optionalKey(Schema.Literals(executionSelections)),
47
+ derivedFrom: Schema.Array(Schema.NonEmptyString),
48
+ supersedes: Schema.Array(Schema.NonEmptyString),
49
+ assumptions: StatedOrUnknownSchema,
50
+ openQuestions: StatedOrUnknownSchema,
51
+ limitations: Schema.optionalKey(Schema.NonEmptyArray(SpecificationLimitationSchema)),
52
+ }).pipe(Schema.check(Schema.makeFilter((metadata) => metadata.class === "quality" && metadata.characteristic === undefined
53
+ ? "A quality specification must name the characteristic it measures"
54
+ : undefined), Schema.makeFilter((metadata) => (metadata.boundary ?? "memory") !== "memory" && metadata.boundaryRationale === undefined
55
+ ? "A specification observed outside memory must state the evidence that boundary supplies"
56
+ : undefined), Schema.makeFilter((metadata) => metadata.supersedes.some((entry) => metadata.supersedes.indexOf(entry) !== metadata.supersedes.lastIndexOf(entry))
57
+ ? "supersedes must not repeat an identity"
58
+ : undefined)));
59
+ const ProductGoalDefinitionSchema = Schema.Struct({
60
+ outcome: Schema.NonEmptyString,
61
+ status: Schema.optionalKey(Schema.Literals(["active", "retired"])),
62
+ });
63
+ export const ProductGoalRegistrySchema = Schema.Record(IdentifierSchema, ProductGoalDefinitionSchema);
64
+ export const ExecutionBindingSchema = Schema.Struct({
65
+ requirements: Schema.NonEmptyArray(RequirementIdentitySchema),
66
+ boundary: Schema.Literals(executionBoundaries),
67
+ rationale: Schema.NonEmptyString,
68
+ });
69
+ const BoundEvidenceGateSchema = Schema.Struct({
70
+ gate: Schema.NonEmptyString,
71
+ verifies: Schema.NonEmptyString,
72
+ });
73
+ export const BoundEvidenceSchema = Schema.NonEmptyArray(BoundEvidenceGateSchema);
74
+ const toDecodeResult = (result) => Result.isSuccess(result)
75
+ ? { ok: true, value: result.success }
76
+ : { ok: false, issues: formatSchemaIssuesToLines(result.failure.issue) };
77
+ /**
78
+ * Metadata is a closed literal: a field the contract does not define is a
79
+ * decoding failure, never ignored.
80
+ */
81
+ const decodeMetadata = Schema.decodeUnknownResult(SpecificationMetadataSchema, {
82
+ onExcessProperty: "error",
83
+ });
84
+ const decodeRegistry = Schema.decodeUnknownResult(ProductGoalRegistrySchema);
85
+ const decodeBinding = Schema.decodeUnknownResult(ExecutionBindingSchema);
86
+ const decodeEvidence = Schema.decodeUnknownResult(BoundEvidenceSchema);
87
+ export const decodeSpecificationMetadata = (value) => toDecodeResult(decodeMetadata(value));
88
+ export const decodeProductGoalRegistry = (value) => toDecodeResult(decodeRegistry(value));
89
+ export const decodeExecutionBinding = (value) => toDecodeResult(decodeBinding(value));
90
+ export const decodeBoundEvidence = (value) => toDecodeResult(decodeEvidence(value));
91
+ //# sourceMappingURL=decode.js.map
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Area barrel for the shared executable-specification contract.
3
+ *
4
+ * @experimental This API is unstable and may change without notice.
5
+ */
6
+ export { type BoundEvidenceGate, EXECUTION_BOUNDARIES, EXECUTION_SELECTIONS, type ExecutionBinding, type ExecutionBoundary, type ExecutionSelection, IDENTITY_SEGMENT_PATTERN, KNOWN_QUALITY_CHARACTERISTICS, KNOWN_SPECIFICATION_METHODS, type KnownQualityCharacteristic, type KnownSpecificationMethod, type ProductGoalDefinition, type ProductGoalRegistry, SPECIFICATION_CLASSES, SPECIFICATION_ROLES, type SpecificationClass, type SpecificationLimitation, type SpecificationMetadata, type SpecificationRole, UNVERIFIABLE_SPECIFICATION_METHODS, defineBoundEvidence, defineExecutionBinding, defineProductGoals, defineSpecification, } from "./contract.js";
7
+ export { BoundEvidenceSchema, ExecutionBindingSchema, ProductGoalRegistrySchema, SpecificationMetadataSchema, decodeBoundEvidence, decodeExecutionBinding, decodeProductGoalRegistry, decodeSpecificationMetadata, type DecodeResult, } from "./decode.js";
8
+ export { type ConformanceIssue, type CorpusExecutionBinding, type CorpusInput, type CorpusSpecification, checkSpecificationCorpus, isExecutableMethodSet, lintProductLanguage, } from "./conformance.js";
9
+ export { type SharedProductGoalId, sharedProductGoals } from "./shared-goals.js";
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Area barrel for the shared executable-specification contract.
3
+ *
4
+ * @experimental This API is unstable and may change without notice.
5
+ */
6
+ export { EXECUTION_BOUNDARIES, EXECUTION_SELECTIONS, IDENTITY_SEGMENT_PATTERN, KNOWN_QUALITY_CHARACTERISTICS, KNOWN_SPECIFICATION_METHODS, SPECIFICATION_CLASSES, SPECIFICATION_ROLES, UNVERIFIABLE_SPECIFICATION_METHODS, defineBoundEvidence, defineExecutionBinding, defineProductGoals, defineSpecification, } from "./contract.js";
7
+ export { BoundEvidenceSchema, ExecutionBindingSchema, ProductGoalRegistrySchema, SpecificationMetadataSchema, decodeBoundEvidence, decodeExecutionBinding, decodeProductGoalRegistry, decodeSpecificationMetadata, } from "./decode.js";
8
+ export { checkSpecificationCorpus, isExecutableMethodSet, lintProductLanguage, } from "./conformance.js";
9
+ export { sharedProductGoals } from "./shared-goals.js";
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Schema issue formatting for decode results.
3
+ *
4
+ * Deliberately a local copy of the extension model's formatter: this tooling
5
+ * package is imported by specifications inside the extension model itself,
6
+ * so a dependency on the model would make the two projects' builds circular.
7
+ */
8
+ import * as SchemaIssue from "effect/SchemaIssue";
9
+ /**
10
+ * Format a schema validation issue into human-readable lines with
11
+ * dot-notation paths, capped at `maxIssues` lines.
12
+ */
13
+ export declare const formatSchemaIssuesToLines: (issue: SchemaIssue.Issue, maxIssues?: number) => ReadonlyArray<string>;
14
+ //# sourceMappingURL=schema-issues.d.ts.map
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Schema issue formatting for decode results.
3
+ *
4
+ * Deliberately a local copy of the extension model's formatter: this tooling
5
+ * package is imported by specifications inside the extension model itself,
6
+ * so a dependency on the model would make the two projects' builds circular.
7
+ */
8
+ import * as SchemaIssue from "effect/SchemaIssue";
9
+ const DEFAULT_MAX_ISSUES = 5;
10
+ /**
11
+ * Format a schema validation issue into human-readable lines with
12
+ * dot-notation paths, capped at `maxIssues` lines.
13
+ */
14
+ export const formatSchemaIssuesToLines = (issue, maxIssues = DEFAULT_MAX_ISSUES) => {
15
+ const formatter = SchemaIssue.makeFormatterStandardSchemaV1();
16
+ const { issues } = formatter(issue);
17
+ const lines = [];
18
+ for (const item of issues) {
19
+ const path = item.path;
20
+ if (path !== undefined && path.length > 0) {
21
+ const segments = path.map((segment) => {
22
+ if (typeof segment === "object" && segment !== null && "key" in segment) {
23
+ return String(segment.key);
24
+ }
25
+ return String(segment);
26
+ });
27
+ lines.push(`${segments.join(".")}: ${item.message}`);
28
+ }
29
+ else {
30
+ lines.push(item.message);
31
+ }
32
+ }
33
+ return lines.slice(0, maxIssues);
34
+ };
35
+ //# sourceMappingURL=schema-issues.js.map
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Shared product goals: outcomes that more than one AgentXM repository
3
+ * serves. Each is registered once, here, with a stable identity; every
4
+ * repository's specification corpus references these identities and keeps
5
+ * repository-specific goals in its own local registry. A local registry must
6
+ * not redefine a shared identity.
7
+ *
8
+ * The registry does not restate, own, or rank the specifications that
9
+ * support a goal. Requirements review walks goals: a retired goal makes its
10
+ * referencing specifications retirement candidates, and an active goal with
11
+ * no referencing specification identifies missing coverage or a dead goal.
12
+ *
13
+ * @experimental This API is unstable and may change without notice.
14
+ */
15
+ export declare const sharedProductGoals: {
16
+ readonly "extension-adoption": {
17
+ readonly outcome: "People and agents can find, install, update, and remove reusable extensions across coding agents through dependable product surfaces.";
18
+ };
19
+ readonly "trustworthy-distribution": {
20
+ readonly outcome: "Publishing and acquiring extensions preserves integrity, provenance, and immutable accepted resolutions.";
21
+ };
22
+ readonly "machine-automation": {
23
+ readonly outcome: "Machine consumers can drive AgentXM surfaces non-interactively with complete, schema-backed results separated from diagnostics.";
24
+ };
25
+ readonly "knowledge-access": {
26
+ readonly outcome: "People and agents can discover concepts, commands, and contracts from the surface they are already using.";
27
+ };
28
+ readonly "privacy-and-consent": {
29
+ readonly outcome: "Observation of product use stays within the documented data boundary and under the control of the person being observed.";
30
+ };
31
+ readonly "dependable-change-process": {
32
+ readonly outcome: "Changes and releases land through the governed repository process with required evidence and human approval.";
33
+ };
34
+ };
35
+ export type SharedProductGoalId = keyof typeof sharedProductGoals;
36
+ //# sourceMappingURL=shared-goals.d.ts.map
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Shared product goals: outcomes that more than one AgentXM repository
3
+ * serves. Each is registered once, here, with a stable identity; every
4
+ * repository's specification corpus references these identities and keeps
5
+ * repository-specific goals in its own local registry. A local registry must
6
+ * not redefine a shared identity.
7
+ *
8
+ * The registry does not restate, own, or rank the specifications that
9
+ * support a goal. Requirements review walks goals: a retired goal makes its
10
+ * referencing specifications retirement candidates, and an active goal with
11
+ * no referencing specification identifies missing coverage or a dead goal.
12
+ *
13
+ * @experimental This API is unstable and may change without notice.
14
+ */
15
+ import { defineProductGoals } from "./contract.js";
16
+ export const sharedProductGoals = defineProductGoals({
17
+ "extension-adoption": {
18
+ outcome: "People and agents can find, install, update, and remove reusable extensions across coding agents through dependable product surfaces.",
19
+ },
20
+ "trustworthy-distribution": {
21
+ outcome: "Publishing and acquiring extensions preserves integrity, provenance, and immutable accepted resolutions.",
22
+ },
23
+ "machine-automation": {
24
+ outcome: "Machine consumers can drive AgentXM surfaces non-interactively with complete, schema-backed results separated from diagnostics.",
25
+ },
26
+ "knowledge-access": {
27
+ outcome: "People and agents can discover concepts, commands, and contracts from the surface they are already using.",
28
+ },
29
+ "privacy-and-consent": {
30
+ outcome: "Observation of product use stays within the documented data boundary and under the control of the person being observed.",
31
+ },
32
+ "dependable-change-process": {
33
+ outcome: "Changes and releases land through the governed repository process with required evidence and human approval.",
34
+ },
35
+ });
36
+ //# sourceMappingURL=shared-goals.js.map
package/package.json ADDED
@@ -0,0 +1,47 @@
1
+ {
2
+ "author": "AgentXM <hello@agentxm.ai> (https://agentxm.ai)",
3
+ "bugs": {
4
+ "url": "https://github.com/agentxm/axm/issues"
5
+ },
6
+ "dependencies": {
7
+ "effect": "4.0.0-rc.112"
8
+ },
9
+ "description": "Executable-specification metadata contract shared by AXM repositories: specification, product-goal, execution-binding, and bound-evidence definitions, their decoders, and corpus conformance checks. Engineering support, not part of the runtime. Unstable and unsupported.",
10
+ "devDependencies": {
11
+ "@effect/vitest": "4.0.0-rc.112",
12
+ "@typescript/native": "npm:typescript@^7.0.2",
13
+ "typescript": "npm:@typescript/typescript6@^6.0.2",
14
+ "vitest": "^4.1.10"
15
+ },
16
+ "engines": {
17
+ "node": ">=22.19.0"
18
+ },
19
+ "exports": {
20
+ ".": {
21
+ "axm-source": "./src/index.ts",
22
+ "default": "./dist/src/index.js",
23
+ "types": "./dist/src/index.d.ts"
24
+ }
25
+ },
26
+ "files": [
27
+ "dist/src/",
28
+ "!**/*.map"
29
+ ],
30
+ "homepage": "https://axm.sh",
31
+ "license": "FSL-1.1-MIT",
32
+ "name": "@agentxm/specification-metadata",
33
+ "nx": {
34
+ "includedScripts": []
35
+ },
36
+ "publishConfig": {
37
+ "access": "public"
38
+ },
39
+ "repository": {
40
+ "directory": "tools/specification-metadata",
41
+ "type": "git",
42
+ "url": "https://github.com/agentxm/axm.git"
43
+ },
44
+ "sideEffects": false,
45
+ "type": "module",
46
+ "version": "0.28.14-preview.1789139351.5cd4595aa"
47
+ }