artifact-contracts 0.33.4 → 0.33.5
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/README.md
CHANGED
|
@@ -154,6 +154,46 @@ documentation:
|
|
|
154
154
|
# expands to: ["docs/**/*.md", "packages/*/README.md"]
|
|
155
155
|
```
|
|
156
156
|
|
|
157
|
+
### Trace Link Rules
|
|
158
|
+
|
|
159
|
+
The optional `trace` section declares traceability links between artifacts — how one artifact connects to or derives from another.
|
|
160
|
+
|
|
161
|
+
```yaml
|
|
162
|
+
trace:
|
|
163
|
+
links:
|
|
164
|
+
- id: contract-to-generated
|
|
165
|
+
from: cli-contract-definition
|
|
166
|
+
to: generated-cli
|
|
167
|
+
resolver: codegen
|
|
168
|
+
description: "CLI contract generates TypeScript scaffolding"
|
|
169
|
+
- id: source-to-tests
|
|
170
|
+
from: core-library
|
|
171
|
+
to: test-suite
|
|
172
|
+
resolver: naming
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
| Field | Required | Description |
|
|
176
|
+
|-------|----------|-------------|
|
|
177
|
+
| `id` | Yes | Unique link identifier (kebab-case) |
|
|
178
|
+
| `from` | Yes | Source artifact ID (must exist in `artifacts`) |
|
|
179
|
+
| `to` | Yes | Target artifact ID (must exist in `artifacts`) |
|
|
180
|
+
| `resolver` | Yes | Link resolution strategy |
|
|
181
|
+
| `description` | No | Human-readable explanation |
|
|
182
|
+
|
|
183
|
+
**Resolver types:**
|
|
184
|
+
|
|
185
|
+
| Resolver | Use case |
|
|
186
|
+
|----------|----------|
|
|
187
|
+
| `operationId` | ID-based matching (e.g., CLI contract operationId → generated handler) |
|
|
188
|
+
| `ast` | Import/call resolution via AST analysis |
|
|
189
|
+
| `naming` | Naming convention (e.g., `foo.ts` → `foo.test.ts`) |
|
|
190
|
+
| `codegen` | Codegen pipeline (e.g., DSL YAML → generated TypeScript) |
|
|
191
|
+
|
|
192
|
+
Validation rules:
|
|
193
|
+
- `from` and `to` must reference existing artifact IDs
|
|
194
|
+
- Link `id` values must be unique
|
|
195
|
+
- Self-links (`from === to`) are rejected
|
|
196
|
+
|
|
157
197
|
## Commands
|
|
158
198
|
|
|
159
199
|
### Deterministic Commands
|
|
@@ -2222,7 +2222,7 @@ components:
|
|
|
2222
2222
|
`),process.exit(cJ)),c===dJ&&(process.stderr.write(`Adapter error: ${u.message}
|
|
2223
2223
|
`),process.exit(dJ)),u}let o=t.reportFormat??"text",s=wwe(a,o);t.output?(ywe(t.output,s,"utf-8"),process.stderr.write(`Report written to ${t.output}
|
|
2224
2224
|
`)):console.log(s);let l=Ewe(a,t.failOn??"error");l!==0&&process.exit(l)}function bwe(t){let e=["# Artifact Definitions Audit","",`## System: ${t.system.id}`,t.system.name?`Name: ${t.system.name}`:"","",`## Artifacts (${Object.keys(t.artifacts).length} total)`,""];for(let[n,i]of Object.entries(t.artifacts))e.push(`### ${n}`),e.push(`- type: ${i.type}`),e.push(`- authority: ${i.authority}`),e.push(`- manual_edit: ${i.manual_edit}`),e.push(`- change_control: ${i.change_control}`),e.push(`- path_patterns: ${i.path_patterns.join(", ")}`),i.exclude_patterns?.length&&e.push(`- exclude_patterns: ${i.exclude_patterns.join(", ")}`),i.description&&e.push(`- description: ${i.description}`),e.push("");return e.push("## Instructions"),e.push(""),e.push("Analyze these artifact definitions for:"),e.push("1. Naming consistency (kebab-case, descriptive IDs)"),e.push("2. Authority appropriateness for each artifact type"),e.push("3. Missing common file types that should be tracked"),e.push("4. Potential path_patterns overlaps or gaps"),e.push("5. Appropriate manual_edit / change_control settings"),e.push(""),e.filter(n=>n!==void 0).join(`
|
|
2225
|
-
`)}function wwe(t,e){if(t.status==="error"){let n=t.errorMessage??"Unknown error";return e==="json"?JSON.stringify({error:n},null,2):e==="yaml"?(0,I$.stringify)({error:n}):`Error: ${n}`}return e==="json"?JSON.stringify(t.data??t.raw,null,2):e==="yaml"?(0,I$.stringify)(t.data??t.raw):t.raw||JSON.stringify(t.data,null,2)}function Ewe(t,e){if(t.status!=="success")return 1;let n=t.data;if(!n?.findings)return 0;let i=["info","warning","error","critical"],r=i.indexOf(e);return r<0?0:n.findings.some(o=>i.indexOf(o.severity)>=r)?_we:0}var wPe=kt.object({system_id:kt.string(),artifact_count:kt.number().int(),definitions_context:kt.string()}),EPe=kt.object({summary:kt.string(),risk_level:kt.enum(["none","low","medium","high","critical"]),findings:kt.array(kt.object({id:kt.string(),severity:kt.enum(["critical","error","warning","info"]),category:kt.string(),title:kt.string(),description:kt.string(),target:kt.string().optional(),recommendation:kt.string().optional(),evidence:kt.array(kt.object({kind:kt.enum(["schema","code","config","runtime","doc"]),target:kt.string().optional(),location:kt.string().optional(),excerpt:kt.string().optional(),reasoning:kt.string().optional()})).optional()})),recommended_actions:kt.array(kt.object({action:kt.string(),priority:kt.enum(["high","medium","low"]),description:kt.string().optional()})),metadata:kt.object({total_artifacts:kt.number().int().optional(),analyzed_artifacts:kt.number().int().optional(),analysis_scope:kt.string().optional()}).optional()});X3();var Swe={version:"0.33.
|
|
2225
|
+
`)}function wwe(t,e){if(t.status==="error"){let n=t.errorMessage??"Unknown error";return e==="json"?JSON.stringify({error:n},null,2):e==="yaml"?(0,I$.stringify)({error:n}):`Error: ${n}`}return e==="json"?JSON.stringify(t.data??t.raw,null,2):e==="yaml"?(0,I$.stringify)(t.data??t.raw):t.raw||JSON.stringify(t.data,null,2)}function Ewe(t,e){if(t.status!=="success")return 1;let n=t.data;if(!n?.findings)return 0;let i=["info","warning","error","critical"],r=i.indexOf(e);return r<0?0:n.findings.some(o=>i.indexOf(o.severity)>=r)?_we:0}var wPe=kt.object({system_id:kt.string(),artifact_count:kt.number().int(),definitions_context:kt.string()}),EPe=kt.object({summary:kt.string(),risk_level:kt.enum(["none","low","medium","high","critical"]),findings:kt.array(kt.object({id:kt.string(),severity:kt.enum(["critical","error","warning","info"]),category:kt.string(),title:kt.string(),description:kt.string(),target:kt.string().optional(),recommendation:kt.string().optional(),evidence:kt.array(kt.object({kind:kt.enum(["schema","code","config","runtime","doc"]),target:kt.string().optional(),location:kt.string().optional(),excerpt:kt.string().optional(),reasoning:kt.string().optional()})).optional()})),recommended_actions:kt.array(kt.object({action:kt.string(),priority:kt.enum(["high","medium","low"]),description:kt.string().optional()})),metadata:kt.object({total_artifacts:kt.number().int().optional(),analyzed_artifacts:kt.number().int().optional(),analysis_scope:kt.string().optional()}).optional()});X3();var Swe={version:"0.33.5"},$we={validate:async t=>{await EP(t)},resolve:async t=>{await $P(t)},list:async t=>{await kP(t)},explain:async(t,e)=>{t||(console.error("Error: <path> argument is required"),process.exit(1)),await DP(t,e)},audit:async t=>{await pJ(t)},agents:async t=>{let e=await Promise.resolve().then(()=>fs(Ds(),1)),n=t.format??"yaml";try{console.log(n==="json"?JSON.stringify(sc,null,2):e.stringify(sc,{lineWidth:120}))}catch(i){console.error(`Failed to output DSL: ${i.message}`),process.exit(1)}}};sA($we,Swe.version).parse();
|
|
2226
2226
|
/*! Bundled license information:
|
|
2227
2227
|
|
|
2228
2228
|
agent-contracts/dist/index.js:
|