atdd 0.2.1__py3-none-any.whl
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.
- atdd/__init__.py +6 -0
- atdd/__main__.py +4 -0
- atdd/cli.py +404 -0
- atdd/coach/__init__.py +0 -0
- atdd/coach/commands/__init__.py +0 -0
- atdd/coach/commands/add_persistence_metadata.py +215 -0
- atdd/coach/commands/analyze_migrations.py +188 -0
- atdd/coach/commands/consumers.py +720 -0
- atdd/coach/commands/infer_governance_status.py +149 -0
- atdd/coach/commands/initializer.py +177 -0
- atdd/coach/commands/interface.py +1078 -0
- atdd/coach/commands/inventory.py +565 -0
- atdd/coach/commands/migration.py +240 -0
- atdd/coach/commands/registry.py +1560 -0
- atdd/coach/commands/session.py +430 -0
- atdd/coach/commands/sync.py +405 -0
- atdd/coach/commands/test_interface.py +399 -0
- atdd/coach/commands/test_runner.py +141 -0
- atdd/coach/commands/tests/__init__.py +1 -0
- atdd/coach/commands/tests/test_telemetry_array_validation.py +235 -0
- atdd/coach/commands/traceability.py +4264 -0
- atdd/coach/conventions/session.convention.yaml +754 -0
- atdd/coach/overlays/__init__.py +2 -0
- atdd/coach/overlays/claude.md +2 -0
- atdd/coach/schemas/config.schema.json +34 -0
- atdd/coach/schemas/manifest.schema.json +101 -0
- atdd/coach/templates/ATDD.md +282 -0
- atdd/coach/templates/SESSION-TEMPLATE.md +327 -0
- atdd/coach/utils/__init__.py +0 -0
- atdd/coach/utils/graph/__init__.py +0 -0
- atdd/coach/utils/graph/urn.py +875 -0
- atdd/coach/validators/__init__.py +0 -0
- atdd/coach/validators/shared_fixtures.py +365 -0
- atdd/coach/validators/test_enrich_wagon_registry.py +167 -0
- atdd/coach/validators/test_registry.py +575 -0
- atdd/coach/validators/test_session_validation.py +1183 -0
- atdd/coach/validators/test_traceability.py +448 -0
- atdd/coach/validators/test_update_feature_paths.py +108 -0
- atdd/coach/validators/test_validate_contract_consumers.py +297 -0
- atdd/coder/__init__.py +1 -0
- atdd/coder/conventions/adapter.recipe.yaml +88 -0
- atdd/coder/conventions/backend.convention.yaml +460 -0
- atdd/coder/conventions/boundaries.convention.yaml +666 -0
- atdd/coder/conventions/commons.convention.yaml +460 -0
- atdd/coder/conventions/complexity.recipe.yaml +109 -0
- atdd/coder/conventions/component-naming.convention.yaml +178 -0
- atdd/coder/conventions/design.convention.yaml +327 -0
- atdd/coder/conventions/design.recipe.yaml +273 -0
- atdd/coder/conventions/dto.convention.yaml +660 -0
- atdd/coder/conventions/frontend.convention.yaml +542 -0
- atdd/coder/conventions/green.convention.yaml +1012 -0
- atdd/coder/conventions/presentation.convention.yaml +587 -0
- atdd/coder/conventions/refactor.convention.yaml +535 -0
- atdd/coder/conventions/technology.convention.yaml +206 -0
- atdd/coder/conventions/tests/__init__.py +0 -0
- atdd/coder/conventions/tests/test_adapter_recipe.py +302 -0
- atdd/coder/conventions/tests/test_complexity_recipe.py +289 -0
- atdd/coder/conventions/tests/test_component_taxonomy.py +278 -0
- atdd/coder/conventions/tests/test_component_urn_naming.py +165 -0
- atdd/coder/conventions/tests/test_thinness_recipe.py +286 -0
- atdd/coder/conventions/thinness.recipe.yaml +82 -0
- atdd/coder/conventions/train.convention.yaml +325 -0
- atdd/coder/conventions/verification.protocol.yaml +53 -0
- atdd/coder/schemas/design_system.schema.json +361 -0
- atdd/coder/validators/__init__.py +0 -0
- atdd/coder/validators/test_commons_structure.py +485 -0
- atdd/coder/validators/test_complexity.py +416 -0
- atdd/coder/validators/test_cross_language_consistency.py +431 -0
- atdd/coder/validators/test_design_system_compliance.py +413 -0
- atdd/coder/validators/test_dto_testing_patterns.py +268 -0
- atdd/coder/validators/test_green_cross_stack_layers.py +168 -0
- atdd/coder/validators/test_green_layer_dependencies.py +148 -0
- atdd/coder/validators/test_green_python_layer_structure.py +103 -0
- atdd/coder/validators/test_green_supabase_layer_structure.py +103 -0
- atdd/coder/validators/test_import_boundaries.py +396 -0
- atdd/coder/validators/test_init_file_urns.py +593 -0
- atdd/coder/validators/test_preact_layer_boundaries.py +221 -0
- atdd/coder/validators/test_presentation_convention.py +260 -0
- atdd/coder/validators/test_python_architecture.py +674 -0
- atdd/coder/validators/test_quality_metrics.py +420 -0
- atdd/coder/validators/test_station_master_pattern.py +244 -0
- atdd/coder/validators/test_train_infrastructure.py +454 -0
- atdd/coder/validators/test_train_urns.py +293 -0
- atdd/coder/validators/test_typescript_architecture.py +616 -0
- atdd/coder/validators/test_usecase_structure.py +421 -0
- atdd/coder/validators/test_wagon_boundaries.py +586 -0
- atdd/conftest.py +126 -0
- atdd/planner/__init__.py +1 -0
- atdd/planner/conventions/acceptance.convention.yaml +538 -0
- atdd/planner/conventions/appendix.convention.yaml +187 -0
- atdd/planner/conventions/artifact-naming.convention.yaml +852 -0
- atdd/planner/conventions/component.convention.yaml +670 -0
- atdd/planner/conventions/criteria.convention.yaml +141 -0
- atdd/planner/conventions/feature.convention.yaml +371 -0
- atdd/planner/conventions/interface.convention.yaml +382 -0
- atdd/planner/conventions/steps.convention.yaml +141 -0
- atdd/planner/conventions/train.convention.yaml +552 -0
- atdd/planner/conventions/wagon.convention.yaml +275 -0
- atdd/planner/conventions/wmbt.convention.yaml +258 -0
- atdd/planner/schemas/acceptance.schema.json +336 -0
- atdd/planner/schemas/appendix.schema.json +78 -0
- atdd/planner/schemas/component.schema.json +114 -0
- atdd/planner/schemas/feature.schema.json +197 -0
- atdd/planner/schemas/train.schema.json +192 -0
- atdd/planner/schemas/wagon.schema.json +281 -0
- atdd/planner/schemas/wmbt.schema.json +59 -0
- atdd/planner/validators/__init__.py +0 -0
- atdd/planner/validators/conftest.py +5 -0
- atdd/planner/validators/test_draft_wagon_registry.py +374 -0
- atdd/planner/validators/test_plan_cross_refs.py +240 -0
- atdd/planner/validators/test_plan_uniqueness.py +224 -0
- atdd/planner/validators/test_plan_urn_resolution.py +268 -0
- atdd/planner/validators/test_plan_wagons.py +174 -0
- atdd/planner/validators/test_train_validation.py +514 -0
- atdd/planner/validators/test_wagon_urn_chain.py +648 -0
- atdd/planner/validators/test_wmbt_consistency.py +327 -0
- atdd/planner/validators/test_wmbt_vocabulary.py +632 -0
- atdd/tester/__init__.py +1 -0
- atdd/tester/conventions/artifact.convention.yaml +257 -0
- atdd/tester/conventions/contract.convention.yaml +1009 -0
- atdd/tester/conventions/filename.convention.yaml +555 -0
- atdd/tester/conventions/migration.convention.yaml +509 -0
- atdd/tester/conventions/red.convention.yaml +797 -0
- atdd/tester/conventions/routing.convention.yaml +51 -0
- atdd/tester/conventions/telemetry.convention.yaml +458 -0
- atdd/tester/schemas/a11y.tmpl.json +17 -0
- atdd/tester/schemas/artifact.schema.json +189 -0
- atdd/tester/schemas/contract.schema.json +591 -0
- atdd/tester/schemas/contract.tmpl.json +95 -0
- atdd/tester/schemas/db.tmpl.json +20 -0
- atdd/tester/schemas/e2e.tmpl.json +17 -0
- atdd/tester/schemas/edge_function.tmpl.json +17 -0
- atdd/tester/schemas/event.tmpl.json +17 -0
- atdd/tester/schemas/http.tmpl.json +19 -0
- atdd/tester/schemas/job.tmpl.json +18 -0
- atdd/tester/schemas/load.tmpl.json +21 -0
- atdd/tester/schemas/metric.tmpl.json +19 -0
- atdd/tester/schemas/pack.schema.json +139 -0
- atdd/tester/schemas/realtime.tmpl.json +20 -0
- atdd/tester/schemas/rls.tmpl.json +18 -0
- atdd/tester/schemas/script.tmpl.json +16 -0
- atdd/tester/schemas/sec.tmpl.json +18 -0
- atdd/tester/schemas/storage.tmpl.json +18 -0
- atdd/tester/schemas/telemetry.schema.json +128 -0
- atdd/tester/schemas/telemetry_tracking_manifest.schema.json +143 -0
- atdd/tester/schemas/test_filename.schema.json +194 -0
- atdd/tester/schemas/test_intent.schema.json +179 -0
- atdd/tester/schemas/unit.tmpl.json +18 -0
- atdd/tester/schemas/visual.tmpl.json +18 -0
- atdd/tester/schemas/ws.tmpl.json +17 -0
- atdd/tester/utils/__init__.py +0 -0
- atdd/tester/utils/filename.py +300 -0
- atdd/tester/validators/__init__.py +0 -0
- atdd/tester/validators/cleanup_duplicate_headers.py +116 -0
- atdd/tester/validators/cleanup_duplicate_headers_v2.py +135 -0
- atdd/tester/validators/conftest.py +5 -0
- atdd/tester/validators/coverage_gap_report.py +321 -0
- atdd/tester/validators/fix_dual_ac_references.py +179 -0
- atdd/tester/validators/remove_duplicate_lines.py +93 -0
- atdd/tester/validators/test_acceptance_urn_filename_mapping.py +359 -0
- atdd/tester/validators/test_acceptance_urn_separator.py +166 -0
- atdd/tester/validators/test_artifact_naming_category.py +307 -0
- atdd/tester/validators/test_contract_schema_compliance.py +706 -0
- atdd/tester/validators/test_contracts_structure.py +200 -0
- atdd/tester/validators/test_coverage_adequacy.py +797 -0
- atdd/tester/validators/test_dual_ac_reference.py +225 -0
- atdd/tester/validators/test_fixture_validity.py +372 -0
- atdd/tester/validators/test_isolation.py +487 -0
- atdd/tester/validators/test_migration_coverage.py +204 -0
- atdd/tester/validators/test_migration_criteria.py +276 -0
- atdd/tester/validators/test_migration_generation.py +116 -0
- atdd/tester/validators/test_python_test_naming.py +410 -0
- atdd/tester/validators/test_red_layer_validation.py +95 -0
- atdd/tester/validators/test_red_python_layer_structure.py +87 -0
- atdd/tester/validators/test_red_supabase_layer_structure.py +90 -0
- atdd/tester/validators/test_telemetry_structure.py +634 -0
- atdd/tester/validators/test_typescript_test_naming.py +301 -0
- atdd/tester/validators/test_typescript_test_structure.py +84 -0
- atdd-0.2.1.dist-info/METADATA +221 -0
- atdd-0.2.1.dist-info/RECORD +184 -0
- atdd-0.2.1.dist-info/WHEEL +5 -0
- atdd-0.2.1.dist-info/entry_points.txt +2 -0
- atdd-0.2.1.dist-info/licenses/LICENSE +674 -0
- atdd-0.2.1.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
# Artifact Convention
|
|
2
|
+
# Defines naming, versioning, organization, and API mapping rules for artifact-centric contracts
|
|
3
|
+
|
|
4
|
+
description: "Artifact-centric contract system uses shared schemas organized by domain"
|
|
5
|
+
|
|
6
|
+
naming:
|
|
7
|
+
logical_pattern: "{domain}:{resource}[.{category}]"
|
|
8
|
+
physical_pattern: "contracts/{domain}/{resource}[/{category}].json"
|
|
9
|
+
rationale: "Domain-based organization enables REST API mapping and clear ownership. Colon separator denotes hierarchy (domain:resource), dot separator denotes facet (resource.category). Optional category facet supports nested resources like ux:foundations.colors."
|
|
10
|
+
|
|
11
|
+
examples:
|
|
12
|
+
- logical: "ux:foundations"
|
|
13
|
+
physical: "contracts/commons/ux/foundations.json"
|
|
14
|
+
|
|
15
|
+
- logical: "ux:foundations.colors"
|
|
16
|
+
physical: "contracts/commons/ux/foundations/colors.json"
|
|
17
|
+
|
|
18
|
+
- logical: "mechanic:decision.choice"
|
|
19
|
+
physical: "contracts/decision/choice.json"
|
|
20
|
+
|
|
21
|
+
- logical: "match:result"
|
|
22
|
+
physical: "contracts/match/result.json"
|
|
23
|
+
|
|
24
|
+
versioning:
|
|
25
|
+
location: "$id field"
|
|
26
|
+
filename_pattern: "{domain}/{resource}[/{category}].json"
|
|
27
|
+
id_pattern: "{domain}:{resource}[.{category}]:{version}"
|
|
28
|
+
rationale: "Version tracked in $id field, not filename. Supports monolithic deployment with coordinated releases. Breaking changes require coordinated updates across all consumers. Category facet preserved in ID with dot separator."
|
|
29
|
+
|
|
30
|
+
examples:
|
|
31
|
+
- artifact: "ux/foundations.json"
|
|
32
|
+
id_field: "ux:foundations:v1"
|
|
33
|
+
version_field: "1.0.0"
|
|
34
|
+
|
|
35
|
+
- artifact: "ux/foundations/colors.json"
|
|
36
|
+
id_field: "ux:foundations.colors:v1"
|
|
37
|
+
version_field: "1.0.0"
|
|
38
|
+
|
|
39
|
+
- artifact: "decision/choice.json"
|
|
40
|
+
id_field: "mechanic:decision.choice:v1"
|
|
41
|
+
version_field: "1.0.0"
|
|
42
|
+
|
|
43
|
+
- artifact: "match/result.json"
|
|
44
|
+
id_field: "match:result:v1"
|
|
45
|
+
version_field: "1.2.3"
|
|
46
|
+
|
|
47
|
+
organization:
|
|
48
|
+
strategy: "by_domain"
|
|
49
|
+
directory_structure: "contracts/{domain}/"
|
|
50
|
+
rationale: "Domain-based directories enable natural mapping to REST API endpoints. Each domain represents a resource collection with multiple artifact types (new, result, updated, config, etc.). Category facets create nested directories when present."
|
|
51
|
+
|
|
52
|
+
structure:
|
|
53
|
+
root: "contracts/"
|
|
54
|
+
domains:
|
|
55
|
+
- "ux/"
|
|
56
|
+
- "decision/"
|
|
57
|
+
- "match/"
|
|
58
|
+
- "player/"
|
|
59
|
+
- "session/"
|
|
60
|
+
- "dilemma/"
|
|
61
|
+
- "pacing/"
|
|
62
|
+
|
|
63
|
+
api_mapping:
|
|
64
|
+
description: "Artifact names map to REST API endpoints for external consumption. Category facets add path segments."
|
|
65
|
+
pattern: "/{domain}s/{id}/{resource}[/{category}]"
|
|
66
|
+
|
|
67
|
+
methods:
|
|
68
|
+
new: POST
|
|
69
|
+
created: POST
|
|
70
|
+
registered: POST
|
|
71
|
+
started: POST
|
|
72
|
+
result: GET
|
|
73
|
+
active: GET
|
|
74
|
+
config: GET
|
|
75
|
+
events: GET
|
|
76
|
+
current: GET
|
|
77
|
+
foundations: GET
|
|
78
|
+
updated: PUT
|
|
79
|
+
closed: PUT
|
|
80
|
+
completed: PUT
|
|
81
|
+
terminated: DELETE
|
|
82
|
+
deleted: DELETE
|
|
83
|
+
|
|
84
|
+
examples:
|
|
85
|
+
- artifact: "ux:foundations"
|
|
86
|
+
endpoint: "GET /uxs/{id}/foundations"
|
|
87
|
+
description: "Retrieve UX foundations"
|
|
88
|
+
|
|
89
|
+
- artifact: "ux:foundations.colors"
|
|
90
|
+
endpoint: "GET /uxs/{id}/foundations/colors"
|
|
91
|
+
description: "Retrieve UX color foundations"
|
|
92
|
+
|
|
93
|
+
- artifact: "match:result"
|
|
94
|
+
endpoint: "GET /matches/{id}/result"
|
|
95
|
+
description: "Retrieve match result"
|
|
96
|
+
|
|
97
|
+
- artifact: "session:new"
|
|
98
|
+
endpoint: "POST /sessions"
|
|
99
|
+
description: "Create new session"
|
|
100
|
+
|
|
101
|
+
- artifact: "player:identity"
|
|
102
|
+
endpoint: "GET /players/{id}"
|
|
103
|
+
description: "Retrieve player identity"
|
|
104
|
+
|
|
105
|
+
- artifact: "match:config"
|
|
106
|
+
endpoint: "GET /matches/{id}/config"
|
|
107
|
+
description: "Retrieve match configuration"
|
|
108
|
+
|
|
109
|
+
- artifact: "player:updated"
|
|
110
|
+
endpoint: "PUT /players/{id}"
|
|
111
|
+
description: "Update player"
|
|
112
|
+
|
|
113
|
+
- artifact: "match:terminated"
|
|
114
|
+
endpoint: "DELETE /matches/{id}"
|
|
115
|
+
description: "Terminate match"
|
|
116
|
+
|
|
117
|
+
ownership:
|
|
118
|
+
producer: "Generates artifact contract (wagon that declares artifact in produce[])"
|
|
119
|
+
consumer: "References existing contract (wagon that declares artifact in consume[])"
|
|
120
|
+
single_source: "One artifact = one JSON file. Multiple wagons reference same file. Zero duplication."
|
|
121
|
+
|
|
122
|
+
rules:
|
|
123
|
+
- "Producer wagon owns the artifact schema generation"
|
|
124
|
+
- "Consumer wagon validates artifact existence and references it"
|
|
125
|
+
- "Artifact path declared in wagon manifest contract: field"
|
|
126
|
+
- "Only producer generates; consumers must never modify"
|
|
127
|
+
|
|
128
|
+
metadata:
|
|
129
|
+
description: "Artifact schemas include x-artifact-metadata for tooling and API generation"
|
|
130
|
+
|
|
131
|
+
fields:
|
|
132
|
+
domain: "Resource collection (match, player, session)"
|
|
133
|
+
resource: "Specific artifact type (result, new, updated)"
|
|
134
|
+
api:
|
|
135
|
+
method: "HTTP method (GET, POST, PUT, DELETE)"
|
|
136
|
+
path: "REST endpoint path"
|
|
137
|
+
|
|
138
|
+
example:
|
|
139
|
+
domain: "match"
|
|
140
|
+
resource: "result"
|
|
141
|
+
api:
|
|
142
|
+
method: "GET"
|
|
143
|
+
path: "/matches/{id}/result"
|
|
144
|
+
|
|
145
|
+
validation:
|
|
146
|
+
required_fields: ["$schema", "$id", "version", "title", "type", "properties"]
|
|
147
|
+
schema_compliance: "JSON Schema Draft-07"
|
|
148
|
+
id_pattern: "^[a-z]+:[a-z][a-z0-9-]+(?:\\.[a-z0-9-]+)*:v\\d+$"
|
|
149
|
+
version_pattern: "^\\d+\\.\\d+\\.\\d+$"
|
|
150
|
+
|
|
151
|
+
artifact_urns:
|
|
152
|
+
urn_pattern:
|
|
153
|
+
format: "contract:{domain}:{resource}[.{category}]"
|
|
154
|
+
conversion_rule: "Keep colon for hierarchy (domain:resource); append category as a dot facet when present (resource.category)."
|
|
155
|
+
|
|
156
|
+
examples:
|
|
157
|
+
artifact_to_urn:
|
|
158
|
+
- artifact_name: "ux:foundations"
|
|
159
|
+
urn: "contract:ux:foundations"
|
|
160
|
+
|
|
161
|
+
- artifact_name: "ux:foundations.colors"
|
|
162
|
+
urn: "contract:ux:foundations.colors"
|
|
163
|
+
|
|
164
|
+
- artifact_name: "mechanic:decision.choice"
|
|
165
|
+
urn: "contract:mechanic:decision.choice"
|
|
166
|
+
|
|
167
|
+
bidirectional_linkage:
|
|
168
|
+
validation: "URN must resolve to a contract in the registry (including optional .category facet)."
|
|
169
|
+
|
|
170
|
+
migration_strategy:
|
|
171
|
+
refactor_note: "Legacy URNs contract:{domain}.{resource} → contract:{domain}:{resource}; category stays as a dot facet: contract:{domain}:{resource}.{category}"
|
|
172
|
+
|
|
173
|
+
wagon_artifacts:
|
|
174
|
+
produce_example:
|
|
175
|
+
wagon: "maintain-ux"
|
|
176
|
+
produce:
|
|
177
|
+
- name: "ux:foundations"
|
|
178
|
+
urn: "contract:ux:foundations"
|
|
179
|
+
to: "external"
|
|
180
|
+
|
|
181
|
+
- name: "ux:foundations.colors"
|
|
182
|
+
urn: "contract:ux:foundations.colors"
|
|
183
|
+
to: "external"
|
|
184
|
+
|
|
185
|
+
consume_example:
|
|
186
|
+
wagon: "stage-characters"
|
|
187
|
+
consume:
|
|
188
|
+
- name: "ux:foundations"
|
|
189
|
+
urn: "contract:ux:foundations"
|
|
190
|
+
from: "wagon:maintain-ux"
|
|
191
|
+
|
|
192
|
+
contract_artifacts:
|
|
193
|
+
id_field: "id: {domain}:{resource}[.{category}]:v{version}"
|
|
194
|
+
urn_mapping: "URN contract:{domain}:{resource}[.{category}] maps to any version of id {domain}:{resource}[.{category}]:v*"
|
|
195
|
+
|
|
196
|
+
example:
|
|
197
|
+
- id: "ux:foundations:v1"
|
|
198
|
+
version: "1.0.0"
|
|
199
|
+
path: "ux/foundations.json"
|
|
200
|
+
producer: "wagon:maintain-ux"
|
|
201
|
+
urn_match: "contract:ux:foundations"
|
|
202
|
+
|
|
203
|
+
- id: "ux:foundations.colors:v1"
|
|
204
|
+
version: "1.0.0"
|
|
205
|
+
path: "ux/foundations/colors.json"
|
|
206
|
+
producer: "wagon:maintain-ux"
|
|
207
|
+
urn_match: "contract:ux:foundations.colors"
|
|
208
|
+
|
|
209
|
+
demo_mode:
|
|
210
|
+
description: "Artifacts write to demo/contracts/artifacts/ when mode_demo: true"
|
|
211
|
+
path_prefix: "demo/contracts/artifacts/"
|
|
212
|
+
|
|
213
|
+
examples:
|
|
214
|
+
complete_workflow:
|
|
215
|
+
- step: "Wagon declares artifact in produce[]"
|
|
216
|
+
example: |
|
|
217
|
+
produce:
|
|
218
|
+
- name: mechanic:decision.choice
|
|
219
|
+
to: external
|
|
220
|
+
contract: contracts/artifacts/decision/choice.json
|
|
221
|
+
|
|
222
|
+
- step: "Tester agent classifies artifact ownership"
|
|
223
|
+
result: "producer: true, path: decision/choice.json"
|
|
224
|
+
|
|
225
|
+
- step: "Schema generation creates artifact"
|
|
226
|
+
output: "contracts/artifacts/decision/choice.json"
|
|
227
|
+
content: |
|
|
228
|
+
{
|
|
229
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
230
|
+
"$id": "mechanic:decision.choice:v1",
|
|
231
|
+
"version": "1.0.0",
|
|
232
|
+
"title": "Decision Choice",
|
|
233
|
+
"type": "object",
|
|
234
|
+
"properties": {...},
|
|
235
|
+
"x-artifact-metadata": {
|
|
236
|
+
"domain": "decision",
|
|
237
|
+
"resource": "choice",
|
|
238
|
+
"api": {
|
|
239
|
+
"method": "POST",
|
|
240
|
+
"path": "/decisions"
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
- step: "Consumer wagon references artifact"
|
|
246
|
+
example: |
|
|
247
|
+
consume:
|
|
248
|
+
- name: mechanic:decision.choice
|
|
249
|
+
from: wagon:resolve-dilemmas
|
|
250
|
+
contract: contracts/artifacts/decision/choice.json
|
|
251
|
+
|
|
252
|
+
- step: "Pack generation references (not embeds) artifact"
|
|
253
|
+
pack_manifest: |
|
|
254
|
+
produce:
|
|
255
|
+
- artifact: mechanic:decision.choice
|
|
256
|
+
contract: ../artifacts/decision/choice.json
|
|
257
|
+
owner: true
|