atdd 0.1.0__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.
Files changed (183) hide show
  1. atdd/__init__.py +0 -0
  2. atdd/cli.py +404 -0
  3. atdd/coach/__init__.py +0 -0
  4. atdd/coach/commands/__init__.py +0 -0
  5. atdd/coach/commands/add_persistence_metadata.py +215 -0
  6. atdd/coach/commands/analyze_migrations.py +188 -0
  7. atdd/coach/commands/consumers.py +720 -0
  8. atdd/coach/commands/infer_governance_status.py +149 -0
  9. atdd/coach/commands/initializer.py +177 -0
  10. atdd/coach/commands/interface.py +1078 -0
  11. atdd/coach/commands/inventory.py +565 -0
  12. atdd/coach/commands/migration.py +240 -0
  13. atdd/coach/commands/registry.py +1560 -0
  14. atdd/coach/commands/session.py +430 -0
  15. atdd/coach/commands/sync.py +405 -0
  16. atdd/coach/commands/test_interface.py +399 -0
  17. atdd/coach/commands/test_runner.py +141 -0
  18. atdd/coach/commands/tests/__init__.py +1 -0
  19. atdd/coach/commands/tests/test_telemetry_array_validation.py +235 -0
  20. atdd/coach/commands/traceability.py +4264 -0
  21. atdd/coach/conventions/session.convention.yaml +754 -0
  22. atdd/coach/overlays/__init__.py +2 -0
  23. atdd/coach/overlays/claude.md +2 -0
  24. atdd/coach/schemas/config.schema.json +34 -0
  25. atdd/coach/schemas/manifest.schema.json +101 -0
  26. atdd/coach/templates/ATDD.md +282 -0
  27. atdd/coach/templates/SESSION-TEMPLATE.md +327 -0
  28. atdd/coach/utils/__init__.py +0 -0
  29. atdd/coach/utils/graph/__init__.py +0 -0
  30. atdd/coach/utils/graph/urn.py +875 -0
  31. atdd/coach/validators/__init__.py +0 -0
  32. atdd/coach/validators/shared_fixtures.py +365 -0
  33. atdd/coach/validators/test_enrich_wagon_registry.py +167 -0
  34. atdd/coach/validators/test_registry.py +575 -0
  35. atdd/coach/validators/test_session_validation.py +1183 -0
  36. atdd/coach/validators/test_traceability.py +448 -0
  37. atdd/coach/validators/test_update_feature_paths.py +108 -0
  38. atdd/coach/validators/test_validate_contract_consumers.py +297 -0
  39. atdd/coder/__init__.py +1 -0
  40. atdd/coder/conventions/adapter.recipe.yaml +88 -0
  41. atdd/coder/conventions/backend.convention.yaml +460 -0
  42. atdd/coder/conventions/boundaries.convention.yaml +666 -0
  43. atdd/coder/conventions/commons.convention.yaml +460 -0
  44. atdd/coder/conventions/complexity.recipe.yaml +109 -0
  45. atdd/coder/conventions/component-naming.convention.yaml +178 -0
  46. atdd/coder/conventions/design.convention.yaml +327 -0
  47. atdd/coder/conventions/design.recipe.yaml +273 -0
  48. atdd/coder/conventions/dto.convention.yaml +660 -0
  49. atdd/coder/conventions/frontend.convention.yaml +542 -0
  50. atdd/coder/conventions/green.convention.yaml +1012 -0
  51. atdd/coder/conventions/presentation.convention.yaml +587 -0
  52. atdd/coder/conventions/refactor.convention.yaml +535 -0
  53. atdd/coder/conventions/technology.convention.yaml +206 -0
  54. atdd/coder/conventions/tests/__init__.py +0 -0
  55. atdd/coder/conventions/tests/test_adapter_recipe.py +302 -0
  56. atdd/coder/conventions/tests/test_complexity_recipe.py +289 -0
  57. atdd/coder/conventions/tests/test_component_taxonomy.py +278 -0
  58. atdd/coder/conventions/tests/test_component_urn_naming.py +165 -0
  59. atdd/coder/conventions/tests/test_thinness_recipe.py +286 -0
  60. atdd/coder/conventions/thinness.recipe.yaml +82 -0
  61. atdd/coder/conventions/train.convention.yaml +325 -0
  62. atdd/coder/conventions/verification.protocol.yaml +53 -0
  63. atdd/coder/schemas/design_system.schema.json +361 -0
  64. atdd/coder/validators/__init__.py +0 -0
  65. atdd/coder/validators/test_commons_structure.py +485 -0
  66. atdd/coder/validators/test_complexity.py +416 -0
  67. atdd/coder/validators/test_cross_language_consistency.py +431 -0
  68. atdd/coder/validators/test_design_system_compliance.py +413 -0
  69. atdd/coder/validators/test_dto_testing_patterns.py +268 -0
  70. atdd/coder/validators/test_green_cross_stack_layers.py +168 -0
  71. atdd/coder/validators/test_green_layer_dependencies.py +148 -0
  72. atdd/coder/validators/test_green_python_layer_structure.py +103 -0
  73. atdd/coder/validators/test_green_supabase_layer_structure.py +103 -0
  74. atdd/coder/validators/test_import_boundaries.py +396 -0
  75. atdd/coder/validators/test_init_file_urns.py +593 -0
  76. atdd/coder/validators/test_preact_layer_boundaries.py +221 -0
  77. atdd/coder/validators/test_presentation_convention.py +260 -0
  78. atdd/coder/validators/test_python_architecture.py +674 -0
  79. atdd/coder/validators/test_quality_metrics.py +420 -0
  80. atdd/coder/validators/test_station_master_pattern.py +244 -0
  81. atdd/coder/validators/test_train_infrastructure.py +454 -0
  82. atdd/coder/validators/test_train_urns.py +293 -0
  83. atdd/coder/validators/test_typescript_architecture.py +616 -0
  84. atdd/coder/validators/test_usecase_structure.py +421 -0
  85. atdd/coder/validators/test_wagon_boundaries.py +586 -0
  86. atdd/conftest.py +126 -0
  87. atdd/planner/__init__.py +1 -0
  88. atdd/planner/conventions/acceptance.convention.yaml +538 -0
  89. atdd/planner/conventions/appendix.convention.yaml +187 -0
  90. atdd/planner/conventions/artifact-naming.convention.yaml +852 -0
  91. atdd/planner/conventions/component.convention.yaml +670 -0
  92. atdd/planner/conventions/criteria.convention.yaml +141 -0
  93. atdd/planner/conventions/feature.convention.yaml +371 -0
  94. atdd/planner/conventions/interface.convention.yaml +382 -0
  95. atdd/planner/conventions/steps.convention.yaml +141 -0
  96. atdd/planner/conventions/train.convention.yaml +552 -0
  97. atdd/planner/conventions/wagon.convention.yaml +275 -0
  98. atdd/planner/conventions/wmbt.convention.yaml +258 -0
  99. atdd/planner/schemas/acceptance.schema.json +336 -0
  100. atdd/planner/schemas/appendix.schema.json +78 -0
  101. atdd/planner/schemas/component.schema.json +114 -0
  102. atdd/planner/schemas/feature.schema.json +197 -0
  103. atdd/planner/schemas/train.schema.json +192 -0
  104. atdd/planner/schemas/wagon.schema.json +281 -0
  105. atdd/planner/schemas/wmbt.schema.json +59 -0
  106. atdd/planner/validators/__init__.py +0 -0
  107. atdd/planner/validators/conftest.py +5 -0
  108. atdd/planner/validators/test_draft_wagon_registry.py +374 -0
  109. atdd/planner/validators/test_plan_cross_refs.py +240 -0
  110. atdd/planner/validators/test_plan_uniqueness.py +224 -0
  111. atdd/planner/validators/test_plan_urn_resolution.py +268 -0
  112. atdd/planner/validators/test_plan_wagons.py +174 -0
  113. atdd/planner/validators/test_train_validation.py +514 -0
  114. atdd/planner/validators/test_wagon_urn_chain.py +648 -0
  115. atdd/planner/validators/test_wmbt_consistency.py +327 -0
  116. atdd/planner/validators/test_wmbt_vocabulary.py +632 -0
  117. atdd/tester/__init__.py +1 -0
  118. atdd/tester/conventions/artifact.convention.yaml +257 -0
  119. atdd/tester/conventions/contract.convention.yaml +1009 -0
  120. atdd/tester/conventions/filename.convention.yaml +555 -0
  121. atdd/tester/conventions/migration.convention.yaml +509 -0
  122. atdd/tester/conventions/red.convention.yaml +797 -0
  123. atdd/tester/conventions/routing.convention.yaml +51 -0
  124. atdd/tester/conventions/telemetry.convention.yaml +458 -0
  125. atdd/tester/schemas/a11y.tmpl.json +17 -0
  126. atdd/tester/schemas/artifact.schema.json +189 -0
  127. atdd/tester/schemas/contract.schema.json +591 -0
  128. atdd/tester/schemas/contract.tmpl.json +95 -0
  129. atdd/tester/schemas/db.tmpl.json +20 -0
  130. atdd/tester/schemas/e2e.tmpl.json +17 -0
  131. atdd/tester/schemas/edge_function.tmpl.json +17 -0
  132. atdd/tester/schemas/event.tmpl.json +17 -0
  133. atdd/tester/schemas/http.tmpl.json +19 -0
  134. atdd/tester/schemas/job.tmpl.json +18 -0
  135. atdd/tester/schemas/load.tmpl.json +21 -0
  136. atdd/tester/schemas/metric.tmpl.json +19 -0
  137. atdd/tester/schemas/pack.schema.json +139 -0
  138. atdd/tester/schemas/realtime.tmpl.json +20 -0
  139. atdd/tester/schemas/rls.tmpl.json +18 -0
  140. atdd/tester/schemas/script.tmpl.json +16 -0
  141. atdd/tester/schemas/sec.tmpl.json +18 -0
  142. atdd/tester/schemas/storage.tmpl.json +18 -0
  143. atdd/tester/schemas/telemetry.schema.json +128 -0
  144. atdd/tester/schemas/telemetry_tracking_manifest.schema.json +143 -0
  145. atdd/tester/schemas/test_filename.schema.json +194 -0
  146. atdd/tester/schemas/test_intent.schema.json +179 -0
  147. atdd/tester/schemas/unit.tmpl.json +18 -0
  148. atdd/tester/schemas/visual.tmpl.json +18 -0
  149. atdd/tester/schemas/ws.tmpl.json +17 -0
  150. atdd/tester/utils/__init__.py +0 -0
  151. atdd/tester/utils/filename.py +300 -0
  152. atdd/tester/validators/__init__.py +0 -0
  153. atdd/tester/validators/cleanup_duplicate_headers.py +116 -0
  154. atdd/tester/validators/cleanup_duplicate_headers_v2.py +135 -0
  155. atdd/tester/validators/conftest.py +5 -0
  156. atdd/tester/validators/coverage_gap_report.py +321 -0
  157. atdd/tester/validators/fix_dual_ac_references.py +179 -0
  158. atdd/tester/validators/remove_duplicate_lines.py +93 -0
  159. atdd/tester/validators/test_acceptance_urn_filename_mapping.py +359 -0
  160. atdd/tester/validators/test_acceptance_urn_separator.py +166 -0
  161. atdd/tester/validators/test_artifact_naming_category.py +307 -0
  162. atdd/tester/validators/test_contract_schema_compliance.py +706 -0
  163. atdd/tester/validators/test_contracts_structure.py +200 -0
  164. atdd/tester/validators/test_coverage_adequacy.py +797 -0
  165. atdd/tester/validators/test_dual_ac_reference.py +225 -0
  166. atdd/tester/validators/test_fixture_validity.py +372 -0
  167. atdd/tester/validators/test_isolation.py +487 -0
  168. atdd/tester/validators/test_migration_coverage.py +204 -0
  169. atdd/tester/validators/test_migration_criteria.py +276 -0
  170. atdd/tester/validators/test_migration_generation.py +116 -0
  171. atdd/tester/validators/test_python_test_naming.py +410 -0
  172. atdd/tester/validators/test_red_layer_validation.py +95 -0
  173. atdd/tester/validators/test_red_python_layer_structure.py +87 -0
  174. atdd/tester/validators/test_red_supabase_layer_structure.py +90 -0
  175. atdd/tester/validators/test_telemetry_structure.py +634 -0
  176. atdd/tester/validators/test_typescript_test_naming.py +301 -0
  177. atdd/tester/validators/test_typescript_test_structure.py +84 -0
  178. atdd-0.1.0.dist-info/METADATA +191 -0
  179. atdd-0.1.0.dist-info/RECORD +183 -0
  180. atdd-0.1.0.dist-info/WHEEL +5 -0
  181. atdd-0.1.0.dist-info/entry_points.txt +2 -0
  182. atdd-0.1.0.dist-info/licenses/LICENSE +674 -0
  183. atdd-0.1.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,275 @@
1
+ version: "1.0"
2
+ name: "Wagon Convention"
3
+ description: "Semantic refinement patterns for converting ambiguous input to structured wagon definitions"
4
+
5
+ # Wagon structure defined in schema
6
+ structure:
7
+ $ref: "schemas:planner:wagon"
8
+
9
+ # URN naming pattern
10
+ urn_naming:
11
+ pattern: "wagon:{kebab-case-name}"
12
+ description: "Unique identifier for wagon using verb-object pattern"
13
+ utility: "utils.graph.URNBuilder.wagon(wagon_id)"
14
+
15
+ format:
16
+ pattern: "kebab-case (lowercase, alphanumeric with hyphens)"
17
+ preference: "verb-object (e.g., resolve-dilemmas, commit-state)"
18
+
19
+ examples:
20
+ - urn: "wagon:resolve-dilemmas"
21
+ name: "Resolve Dilemmas"
22
+ slug: "resolve-dilemmas"
23
+
24
+ - urn: "wagon:burn-timebank"
25
+ name: "Burn Timebank"
26
+ slug: "burn-timebank"
27
+
28
+ - urn: "wagon:manage-users"
29
+ name: "Manage Users"
30
+ slug: "manage-users"
31
+
32
+ validation:
33
+ pattern: "^wagon:[a-z][a-z0-9-]*$"
34
+ must_start_with: "lowercase letter"
35
+ allowed_chars: "lowercase letters, digits, hyphens"
36
+
37
+ # Naming conventions (SPEC-COACH-UTILS-0281)
38
+ naming:
39
+ slug_derivation:
40
+ pattern: "kebab-case from name"
41
+ preference: "verb-object pattern (e.g., resolve-dilemmas, commit-state)"
42
+ transformation: "lowercase, replace spaces/underscores with hyphens"
43
+
44
+ filesystem_naming:
45
+ description: "Filesystem uses snake_case, logical identifiers use kebab-case"
46
+ rules:
47
+ urns_and_slugs:
48
+ format: "kebab-case"
49
+ examples:
50
+ - "wagon:maintain-ux"
51
+ - "maintain-ux"
52
+ - "resolve-dilemmas"
53
+ - "feature:authenticate-identity:verify-session"
54
+ usage: "URNs, slug fields in YAML, references"
55
+
56
+ directories:
57
+ format: "snake_case"
58
+ pattern: "plan/{wagon_dirname}/"
59
+ examples:
60
+ - "plan/maintain_design/"
61
+ - "plan/resolve_dilemmas/"
62
+ - "plan/commit_state/"
63
+ - "plan/authenticate_identity/"
64
+ derivation: "slug.replace('-', '_')"
65
+
66
+ manifest_files:
67
+ format: "_{dirname}.yaml"
68
+ pattern: "plan/{dirname}/_{dirname}.yaml"
69
+ examples:
70
+ - "plan/maintain_design/_maintain_design.yaml"
71
+ - "plan/resolve_dilemmas/_resolve_dilemmas.yaml"
72
+ - "plan/authenticate_identity/_authenticate_identity.yaml"
73
+ note: "File name matches directory name, NOT slug"
74
+
75
+ feature_files:
76
+ format: "snake_case"
77
+ pattern: "plan/{wagon_dirname}/features/{feature_name}.yaml"
78
+ examples:
79
+ - "plan/authenticate_identity/features/verify_session.yaml"
80
+ - "plan/authenticate_identity/features/link_match_user.yaml"
81
+ - "plan/burn_timebank/features/track_remaining.yaml"
82
+ - "plan/setup_match/features/configure_match.yaml"
83
+ derivation: "feature_slug.replace('-', '_')"
84
+ note: "Feature file names use underscores, even though URNs use hyphens"
85
+
86
+ conversion:
87
+ slug_to_dirname: "slug.replace('-', '_')"
88
+ dirname_to_slug: "dirname.replace('_', '-')"
89
+ feature_slug_to_filename: "feature_slug.replace('-', '_') + '.yaml'"
90
+ feature_filename_to_slug: "filename.replace('_', '-').replace('.yaml', '')"
91
+
92
+ rationale: "Consistent filesystem naming reduces conversion complexity; clear separation between logical (kebab) and physical (snake) identifiers"
93
+
94
+ summary:
95
+ logical_identifiers: "kebab-case with hyphens (-) - used in URNs, slugs, YAML references"
96
+ filesystem: "snake_case with underscores (_) - used in directories, manifest files, feature files"
97
+ examples:
98
+ - logical: "feature:authenticate-identity:verify-session"
99
+ directory: "plan/authenticate_identity/"
100
+ manifest: "plan/authenticate_identity/_authenticate_identity.yaml"
101
+ feature_file: "plan/authenticate_identity/features/verify_session.yaml"
102
+
103
+ # Refinement process for converting ambiguous input to structured wagon
104
+ refinement:
105
+ # How to extract semantic fields from name + requirements
106
+ extraction:
107
+ subject:
108
+ prompt: "From '${inputs.requirements}', identify WHO or WHAT performs the main action (single actor, e.g., 'player:active', 'engine:orchestrator')"
109
+ pattern: "actor:role or entity:state format preferred"
110
+ images:
111
+ - ".claude/docs/examples/wagon-subjects-good.png"
112
+ - ".claude/docs/examples/wagon-subjects-bad.png"
113
+
114
+ action:
115
+ prompt: "Extract the core ACTION verb from '${inputs.requirements}' as present-tense phrase (e.g., 'applies the chosen option')"
116
+ pattern: "single present-tense verb phrase"
117
+ image: ".claude/docs/examples/action-verbs-reference.png"
118
+
119
+ goal:
120
+ prompt: "Identify the WHY/motivation behind this action from '${inputs.requirements}' (e.g., 'advance toward stable trajectory')"
121
+ pattern: "single intent statement"
122
+
123
+ context:
124
+ prompt: "Determine WHEN/WHERE this action occurs from '${inputs.requirements}' (e.g., 'in-match, timebank-active')"
125
+ pattern: "situational phrase, comma-separated conditions"
126
+
127
+ outcome:
128
+ prompt: "Define the measurable result from '${inputs.requirements}' (e.g., 'choice applied and state updated')"
129
+ pattern: "single measurable progress statement"
130
+
131
+ produce:
132
+ $ref: "conventions:planner:artifact#/naming_patterns/produce"
133
+
134
+ consume:
135
+ $ref: "conventions:planner:artifact#/naming_patterns/consume"
136
+
137
+ theme:
138
+ prompt: "Select most appropriate theme category for this wagon"
139
+ options:
140
+ mechanic: "Core game rules, decision systems, and immediate feedback loops"
141
+ scenario: "Content ingestion, entity extraction, and narrative structure processing"
142
+ match: "Session orchestration, state management, and lifecycle control, Multi-player coordination, turn management"
143
+ sensory: "UI rendering, audio mixing, gesture capture, and player interaction"
144
+ player: "Individual lifecycle, onboarding, progression, and session management"
145
+ league: "Competitive organization, bracket management, and tournament operations"
146
+ audience: "Spectator engagement, streaming infrastructure, and viewer participation"
147
+ monetization: "Token economy, wallet operations, and transaction processing"
148
+ partnership: "Sponsor/partner onboarding, delegation, and commercial integration"
149
+ commons: "Shared infrastructure, cross-cutting utilities, and platform services"
150
+
151
+ description:
152
+ template: "Generate concise one-liner from refined understanding of subject, action, goal, and context"
153
+ min_length: 10
154
+
155
+ wmbt:
156
+ default: {}
157
+ note: "Placeholder - WMBTs will be generated via handoff to wmbt.action"
158
+
159
+ total:
160
+ default: 0
161
+ note: "Placeholder - count will be updated when WMBTs are added via wmbt.action"
162
+
163
+ # Validation rules for semantic coherence
164
+ validation:
165
+ coherence_checks:
166
+ - "subject and action must align (subject can perform the action)"
167
+ - "action and goal must align (action serves the goal)"
168
+ - "outcome must be measurable result of action"
169
+ - "all produce artifacts must be owned by this wagon"
170
+ - "all consume artifacts must be owned by different wagons"
171
+ - "context must make sense for when/where action occurs"
172
+ - "at least one produce artifact must be external (scope: 'external')"
173
+
174
+ # Artifact conventions (see artifact.convention.yaml for full details)
175
+ artifact_contracts:
176
+ $ref: "conventions:planner:artifact#/artifact_contracts"
177
+ note: "Full artifact contract conventions defined in artifact.convention.yaml"
178
+
179
+ urn_format:
180
+ contract_urn: "contract:domain:resource (e.g., contract:ux:foundations, contract:match:result)"
181
+ telemetry_urn: "telemetry:domain:resource[.category] (e.g., telemetry:ux:foundations, telemetry:ux:foundations.colors)"
182
+
183
+ telemetry_filesystem:
184
+ description: "Telemetry URN maps to filesystem directory containing signal files"
185
+ pattern: "telemetry/{domain}/{resource}[/{category}]/{signal-type}.{plane}[.{measure}].json"
186
+ urn_to_path: "telemetry:{domain}:{resource}[.{category}] → telemetry/{domain}/{resource}[/{category}]/"
187
+
188
+ examples:
189
+ - urn: "telemetry:mechanic:decision.choice"
190
+ path: "telemetry/decision/choice/"
191
+ files:
192
+ - "metric.db.count.json"
193
+ - "metric.be.duration.json"
194
+ - "event.be.json"
195
+
196
+ - urn: "telemetry:ux:foundations"
197
+ path: "telemetry/ux/foundations/"
198
+ files:
199
+ - "metric.ui.render_latency.json"
200
+ - "event.ui.json"
201
+
202
+ - urn: "telemetry:ux:foundations.colors"
203
+ path: "telemetry/ux/foundations/colors/"
204
+ files:
205
+ - "metric.ui.render_latency.json"
206
+ - "event.ui.json"
207
+
208
+ signal_types:
209
+ metric: "Observability metrics (OpenTelemetry) - requires measure suffix"
210
+ event: "Analytics events (Segment/Mixpanel) - no measure suffix"
211
+
212
+ planes: ["ui", "ux", "be", "nw", "db", "st", "tm", "sc", "au", "fn", "if"]
213
+
214
+ measures:
215
+ metrics_only: ["count", "duration", "latency", "size", "rate", "percentage"]
216
+ not_for_events: "Events use pattern {signal-type}.{plane}.json (no measure)"
217
+
218
+ manifest_generation:
219
+ description: "Manifest generated from telemetry/ source files"
220
+ source: "telemetry/{domain}/{resource}/*.json"
221
+ output: "Generated manifest aggregates all signal definitions"
222
+
223
+ produce_artifacts:
224
+ required_fields:
225
+ - name: "Artifact name (e.g., ux:foundations)"
226
+ - contract: "Contract URN or null (e.g., contract:ux:foundations)"
227
+ - telemetry: "Telemetry URN for observability and analytics or null (e.g., telemetry:ux:foundations)"
228
+ optional_fields:
229
+ - to: "Visibility (internal|external), defaults to external"
230
+ - urn: "Legacy artifact URN"
231
+ - version: "Version string (e.g., v1)"
232
+
233
+ example:
234
+ - name: ux:foundations
235
+ contract: contract:ux:foundations
236
+ telemetry: telemetry:ux:foundations
237
+ - name: internal:cache
238
+ contract: null
239
+ telemetry: null
240
+ to: internal
241
+
242
+ consume_artifacts:
243
+ required_fields:
244
+ - name: "Artifact name (e.g., appendix:mockup)"
245
+ optional_fields:
246
+ - from: "Source (wagon:slug|system:service|appendix:type|internal)"
247
+ - contract: "Contract URN or null"
248
+ - telemetry: "Telemetry URN or null"
249
+ - urn: "Legacy artifact URN"
250
+ - version: "Version requirement"
251
+
252
+ example:
253
+ - name: appendix:mockup
254
+ - name: match:config
255
+ from: wagon:setup-match
256
+ contract: contract:match:config
257
+ telemetry: telemetry:match:config
258
+
259
+ features_format:
260
+ legacy_format:
261
+ type: "object"
262
+ example:
263
+ provide-foundations: "Provide foundation design tokens"
264
+ compose-primitives: "Compose UI primitives"
265
+
266
+ urn_format:
267
+ type: "array of URN objects"
268
+ example:
269
+ - urn: feature:maintain-ux:provide-foundations
270
+ - urn: feature:maintain-ux:compose-primitives
271
+ pattern: "feature:{wagon-slug}:{feature-name}"
272
+
273
+ artifact_transformation:
274
+ $ref: "conventions:planner:artifact#/artifact_transformation"
275
+ note: "Full artifact transformation patterns defined in artifact.convention.yaml"
@@ -0,0 +1,258 @@
1
+ version: "1.0"
2
+ name: "WMBT Convention"
3
+ description: "Convention for What Must Be True (WMBT) decomposition"
4
+
5
+
6
+ # WMBT structure defined in schema
7
+ structure:
8
+ $ref: "schemas:planner:wmbt"
9
+
10
+ # URN naming pattern
11
+ urn_naming:
12
+ pattern: "wmbt:{wagon}:{STEP_CODE}{NNN}"
13
+ description: "Unique identifier for WMBT using step-coded sequence"
14
+ utility: "utils.graph.URNBuilder.wmbt(wagon_id, sequence)"
15
+
16
+ parts:
17
+ wagon: "Parent wagon identifier (kebab-case)"
18
+ STEP_CODE: "Single letter step code (D|L|P|C|E|M|Y|R|K)"
19
+ NNN: "Three-digit zero-padded sequence (001-999)"
20
+
21
+ step_codes:
22
+ D: "define - Define requirements, criteria, or constraints"
23
+ L: "locate - Locate, discover, or find resources"
24
+ P: "prepare - Prepare, setup, or configure prerequisites"
25
+ C: "confirm - Confirm, verify, or validate conditions"
26
+ E: "execute - Execute, perform, or run the main action"
27
+ M: "monitor - Monitor, observe, or track progress"
28
+ Y: "modify - Modify, update, or adjust state"
29
+ R: "resolve - Resolve, fix, or handle issues"
30
+ K: "conclude - Conclude, complete, or finalize"
31
+
32
+ examples:
33
+ - urn: "wmbt:resolve-dilemmas:E001"
34
+ wagon: "resolve-dilemmas"
35
+ step_code: "E"
36
+ step_name: "execute"
37
+ sequence: "001"
38
+
39
+ - urn: "wmbt:burn-timebank:M045"
40
+ wagon: "burn-timebank"
41
+ step_code: "M"
42
+ step_name: "monitor"
43
+ sequence: "045"
44
+
45
+ - urn: "wmbt:user-mgmt:C023"
46
+ wagon: "user-mgmt"
47
+ step_code: "C"
48
+ step_name: "confirm"
49
+ sequence: "023"
50
+
51
+ validation:
52
+ pattern: "^wmbt:[a-z][a-z0-9-]*:[DLPCEMYRK][0-9]{3}$"
53
+ step_codes: "Must be one of: D, L, P, C, E, M, Y, R, K"
54
+ sequence_range: "001-999"
55
+
56
+ # External data sources
57
+ steps:
58
+ $ref: "conventions:planner:steps:steps"
59
+
60
+ dimension_instructions:
61
+ - "Analyze the user requirement to identify the core metric the user wants to optimize."
62
+ - "Use the 'keywords' to match the user's intent to one of the dimensions below."
63
+ - "Decompose the requirement into a structured format specifying the 'dimension', the 'actor' (e.g., employee, manager), the 'action' (e.g., minimize, increase, reduce), and the 'object' of the action."
64
+ - "Use the 'description' and 'rationale' to understand the purpose of each dimension."
65
+
66
+ dimensions:
67
+ generator: &dimension_generator
68
+ prompt: "From '${inputs.description}', identify the primary dimension being worked on"
69
+ pattern: "single dimension keyword"
70
+ source: "conventions:planner:wmbt:dimensions.options"
71
+ options:
72
+ - name: "Time"
73
+ keywords: ["time", "duration", "fast", "slow", "quick", "speed", "delay", "wait", "rework", "onboard", "productive"]
74
+ description: "Measures the duration associated with executing a job or any of its steps. It encompasses speed, waiting, delays, and the time spent on rework and corrections. It's a measure of the job performer's most finite resource."
75
+ rationale: "Minimizing the time it takes to achieve a goal is a primary driver of value. Solutions that give the job performer their time back are highly valued, as that time can be reallocated to other tasks."
76
+ examples:
77
+ - "(Employee): Minimize the time it takes for a new employee to be fully onboarded and productive."
78
+ - "(Surgeon): Minimize the time it takes to complete a specific surgical procedure safely."
79
+
80
+ - name: "Effort"
81
+ keywords: ["effort", "physical", "mental", "cognitive", "easy", "intuitive", "concentration", "load", "force", "fatigue", "bug"]
82
+ description: "Measures the physical or cognitive load the job performer must endure to get a job done. Physical effort is muscular force; mental effort is the amount of concentration, learning, memory, and decision-making required."
83
+ rationale: "All actors are wired to conserve energy. Solutions that feel 'easy,' 'intuitive,' or 'effortless' are superior. High effort leads to frustration, errors, fatigue, and potential abandonment of the task."
84
+ examples:
85
+ - "(Nurse): Minimize the physical effort required to move a patient from a bed to a wheelchair."
86
+ - "(Software Developer): Reduce the mental effort required to find a specific bug in the code."
87
+
88
+ - name: "Likelihood"
89
+ keywords: ["likelihood", "probability", "chance", "risk", "error", "failure", "success", "predictability", "control", "reliability", "reject", "usable"]
90
+ description: "Measures the probability of a specific outcome occurring. It's used to articulate the desire for predictability, control, and success. It can be about increasing the probability of a desired outcome or decreasing the probability of an undesired one."
91
+ rationale: "Uncertainty creates stress, inefficiency, and risk. Increasing the likelihood of success and reducing the likelihood of errors builds trust and confidence."
92
+ examples:
93
+ - "(Scientist): Increase the likelihood that an experiment will produce a usable result."
94
+ - "(Citizen): Decrease the likelihood that a submitted application form will be rejected due to an error."
95
+
96
+ - name: "Frequency"
97
+ keywords: ["frequency", "often", "repetitive", "manual", "number of times", "switch", "resets"]
98
+ description: "Measures the rate of occurrence of an event or action within the execution of a job. It is most often used to reduce how often the job performer must perform an undesirable, repetitive, or non-value-added task."
99
+ rationale: "Repetitive tasks are a major source of frustration and wasted effort. Reducing the frequency of these annoyances frees the job performer to focus on what truly matters."
100
+ examples:
101
+ - "(System Admin): Reduce the frequency with which manual server resets are required."
102
+ - "(Call Center Agent): Minimize the number of times they have to switch between different software applications to resolve one issue."
103
+
104
+ - name: "Quantity / Amount"
105
+ keywords: ["quantity", "amount", "volume", "number", "resource", "consumed", "produced", "scrap", "leads", "spent"]
106
+ description: "Measures the volume, number, or amount of a resource that is either consumed or produced. It's about optimizing the tangible inputs and outputs of a job to improve efficiency."
107
+ rationale: "Every job performer operates with finite resources. Using fewer resources (inputs) translates directly into higher efficiency. Conversely, increasing the output from the same input is a universal measure of productivity."
108
+ examples:
109
+ - "(Factory Manager): Minimize the amount of scrap material generated per production run."
110
+ - "(Marketing Manager): Increase the number of qualified leads generated per dollar spent."
111
+
112
+ - name: "Financial Value"
113
+ keywords: ["financial", "value", "cost", "revenue", "money", "budget", "expense", "profit", "earnings", "currency", "fleet"]
114
+ description: "Measures the monetary impact of getting the job done from the job performer's perspective. It includes direct costs, operational expenses, opportunity costs, revenue lost, or revenue gained."
115
+ rationale: "Financial impact is a primary consideration in almost any organized system. A solution that helps an organization operate more profitably or a public institution to work more efficiently provides clear, quantifiable value."
116
+ examples:
117
+ - "(CFO): Minimize the financial impact of currency fluctuations on the company's earnings."
118
+ - "(Fleet Manager): Minimize the annual cost of maintaining the vehicle fleet."
119
+
120
+ directions:
121
+ generator: &direction_generator
122
+ prompt: "From '${inputs.description}', pick the most suitable direction verb for the optimization goal"
123
+ pattern: "single action verb matching schema enum"
124
+ source: "conventions:planner:wmbt:directions.palette"
125
+ palette:
126
+ minimize: [reduce, decrease, lower, shrink]
127
+ maximize: [increase, boost, raise, grow]
128
+ increase: [improve, elevate, accelerate]
129
+ decrease: [cut, dampen, slow, limit]
130
+
131
+ # Lenses for viewing the work
132
+ lenses:
133
+ generator: &lens_generator
134
+ prompt: "From '${inputs.description}', determine the quality lens most relevant to this work"
135
+ pattern: "single quality attribute"
136
+ source: "conventions:planner:wmbt:lenses.catalog"
137
+ catalog:
138
+ social:
139
+ - id: belong
140
+ definition: "The drive to be accepted by a group and align with its norms—finding community and connection."
141
+ example: "Using the same communication tool as teammates to stay included in shared conversations."
142
+ - id: stand_out
143
+ definition: "The drive to differentiate oneself positively—signaling uniqueness, status, taste, or expertise."
144
+ example: "Choosing a distinctive design or advanced configuration to showcase personal style or mastery."
145
+ - id: affirm
146
+ definition: "The drive to reinforce an existing identity—expressing and validating a role one already holds."
147
+ example: "Selecting professional-grade tools consistent with one’s established expertise."
148
+ - id: aspire
149
+ definition: "The drive to become a better future self—signaling progress toward a desired identity."
150
+ example: "Enrolling in a skills program to move toward a new career path."
151
+
152
+ functional:
153
+ - id: efficiency
154
+ definition: "Minimizing time, effort, or resources required to complete a task."
155
+ example: "Completing a routine workflow in fewer steps or less time."
156
+ - id: effectiveness
157
+ definition: "Improving the quality, accuracy, or impact of outcomes."
158
+ example: "Raising the percentage of correct results produced by a process."
159
+ - id: availability
160
+ definition: "Ensuring a system or resource is accessible and operational when needed."
161
+ example: "Keeping a service reliably reachable during expected usage periods."
162
+ - id: adaptability
163
+ definition: "Enabling a process or system to handle new or changing requirements."
164
+ example: "Allowing users to add new data inputs without custom engineering work."
165
+ - id: sustainability
166
+ definition: "Maintaining performance over time without degradation or undue negative impact."
167
+ example: "Automating repetitive tasks to reduce manual effort and error over the long term."
168
+
169
+ emotional:
170
+ - id: joy
171
+ definition: "Pleasure or happiness when a product exceeds expectations or removes friction."
172
+ example: "Feeling satisfied when a task completes smoothly without extra effort."
173
+ - id: trust
174
+ definition: "Confidence that a product is reliable and safe, performing as promised."
175
+ example: "Feeling secure because progress is auto-saved and data is protected."
176
+ - id: fear
177
+ definition: "Anxiety about a potential negative outcome."
178
+ example: "Hesitating before confirming an irreversible action."
179
+ - id: surprise
180
+ definition: "A reaction to the unexpected—positive (delight) or negative (confusion)."
181
+ example: "Encountering a helpful hint unexpectedly—or an unexplained interface change."
182
+ - id: sadness
183
+ definition: "Unhappiness triggered by loss or a blocked goal."
184
+ example: "Feeling disappointed when informed a task cannot be completed right now."
185
+ - id: disgust
186
+ definition: "Aversion caused by unethical design, clutter, or offensive elements."
187
+ example: "Reacting negatively to an interface overloaded with intrusive prompts."
188
+ - id: anger
189
+ definition: "Frustration or hostility when things fail to work as expected."
190
+ example: "Feeling upset when a critical function fails at a key moment."
191
+ - id: anticipation
192
+ definition: "Hopeful expectation while awaiting a desired outcome."
193
+ example: "Watching a progress indicator while a process nears completion."
194
+
195
+ object_of_control:
196
+ generator: &object_of_control_generator
197
+ prompt: "From '${inputs.description}' and '${inputs.step}', synthesize what specific thing is being controlled or manipulated"
198
+ pattern: "kebab-case noun phrase (e.g., 'user-profile', 'payment-flow')"
199
+
200
+ context_clarifier:
201
+ generator: &context_clarifier_generator
202
+ prompt: "From '${inputs.description}', extract any contextual clarifier that specifies when/where/how this applies"
203
+ pattern: "detailed situational phrase, one line maximum"
204
+ required: true
205
+
206
+ statement:
207
+ generator: &statement_generator
208
+ pattern: "${direction} ${dimension} of ${object_of_control}${context_clarifier ? ' ' + context_clarifier : ''}"
209
+
210
+ generators:
211
+ direction: *direction_generator
212
+ dimension: *dimension_generator
213
+ lens: *lens_generator
214
+ object_of_control: *object_of_control_generator
215
+ context_clarifier: *context_clarifier_generator
216
+ statement: *statement_generator
217
+
218
+ # Splitting rules for WMBT decomposition
219
+ splitting_rules:
220
+ acceptance_cap:
221
+ maximum: 5
222
+ rationale: "Beyond 5 acceptances indicates mixed concerns that should be separate WMBTs"
223
+ enforcement: "schemas:planner:wmbt enforces via acceptance array maxItems"
224
+
225
+ when_to_split:
226
+ mixed_dimensions:
227
+ indicator: "Statement mentions multiple dimensions (e.g., 'fast AND reliable')"
228
+ action: "Create separate WMBTs: one for time dimension, one for likelihood"
229
+ example: "Split 'Minimize time while maximizing reliability' into two WMBTs"
230
+
231
+ multiple_actors:
232
+ indicator: "Different actors performing different actions"
233
+ action: "One WMBT per actor-action pair"
234
+ example: "Split 'Manager approves and employee submits' into separate WMBTs"
235
+
236
+ divergent_gates:
237
+ indicator: "Different acceptances need different gate modes (ALL vs ANY)"
238
+ action: "Group acceptances by gate requirements into separate WMBTs"
239
+
240
+ when_to_keep_together:
241
+ single_truth_multiple_layers:
242
+ indicator: "Same outcome verified at UI, API, and DB layers"
243
+ example: "Latency measured at presentation, application, integration"
244
+ gate_mode: "ALL - all layers must meet the requirement"
245
+
246
+ coherent_sequence:
247
+ indicator: "Sequential steps of a single process"
248
+ example: "Upload → Validate → Store → Confirm"
249
+ note: "Each acceptance tests one step, all must pass"
250
+
251
+ consistency_with_acceptances:
252
+ reference: "conventions:planner:acceptance:rules.acceptance_cap"
253
+ note: "This rule aligns with acceptance convention cap of ≤5 per WMBT"
254
+
255
+ # Filename pattern (step-coded, no prefix)
256
+ filename:
257
+ - pattern: "{STEP_CODE}{NNN}.yaml"
258
+ - examples: ["E001.yaml", "L045.yaml", "K023.yaml"]