rhachet-roles-ehmpathy 1.13.1 → 1.13.3

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 (353) hide show
  1. package/dist/logic/roles/architect/.briefs/criteria.given_when_then.[seed].v3.md +87 -0
  2. package/dist/logic/roles/architect/.briefs/practices/prefer.env_access.prep_over_dev.md +12 -0
  3. package/dist/logic/roles/architect/.briefs/ubiqlang.ambiguous-from-overload.md +1 -0
  4. package/dist/logic/roles/bhrain/.briefs/cognition/cog000.overview.and.premise.md +115 -0
  5. package/dist/logic/roles/bhrain/.briefs/cognition/cog021.coordinates.spherical.md +69 -0
  6. package/dist/logic/roles/bhrain/.briefs/cognition/cog021.metaphor.cauliflorous.md +44 -0
  7. package/dist/logic/roles/bhrain/.briefs/cognition/cog021.metaphor.galactic_spacetravel.[article].md +42 -0
  8. package/dist/logic/roles/bhrain/.briefs/cognition/cog021.metaphor.galactic_spacetravel.[lesson].md +60 -0
  9. package/dist/logic/roles/bhrain/.briefs/cognition/cog021.structs.catalog.md +51 -0
  10. package/dist/logic/roles/bhrain/.briefs/cognition/cog021.structs.treestruct.md +85 -0
  11. package/dist/logic/roles/bhrain/.briefs/cognition/cog021.structs.vector.md +112 -0
  12. package/dist/logic/roles/bhrain/.briefs/cognition/cog101.concept.definition.md +115 -0
  13. package/dist/logic/roles/bhrain/.briefs/cognition/cog101.concept.treestruct._.md +112 -0
  14. package/dist/logic/roles/bhrain/.briefs/cognition/cog101.concept.treestruct.coords.1.spherical.md +80 -0
  15. package/dist/logic/roles/bhrain/.briefs/cognition/cog101.concept.treestruct.coords.2.abstractive.md +59 -0
  16. package/dist/logic/roles/bhrain/.briefs/cognition/cog101.concept.treestruct.coords.3.descriptive.md +64 -0
  17. package/dist/logic/roles/bhrain/.briefs/cognition/cog101.concept.treestruct.persp.1.perspectives.md +88 -0
  18. package/dist/logic/roles/bhrain/.briefs/cognition/cog101.concept.treestruct.persp.2.universal.md +82 -0
  19. package/dist/logic/roles/bhrain/.briefs/cognition/cog101.concept.treestruct.persp.3.relative.md +106 -0
  20. package/dist/logic/roles/bhrain/.briefs/cognition/cog101.concept.treestruct.persp.4.fractal.md +83 -0
  21. package/dist/logic/roles/bhrain/.briefs/cognition/cog151.concept.treestruct.gravity.md +89 -0
  22. package/dist/logic/roles/bhrain/.briefs/cognition/cog201.cortal.focus.p1.definition.md +231 -0
  23. package/dist/logic/roles/bhrain/.briefs/cognition/cog201.cortal.focus.p1.examples.cont.md +82 -0
  24. package/dist/logic/roles/bhrain/.briefs/cognition/cog201.cortal.focus.p2.acuity.md +134 -0
  25. package/dist/logic/roles/bhrain/.briefs/cognition/cog201.cortal.focus.p2.breadth.md +151 -0
  26. package/dist/logic/roles/bhrain/.briefs/cognition/cog201.cortal.focus.p2.depth.md +147 -0
  27. package/dist/logic/roles/bhrain/.briefs/cognition/cog251.cortal.focus.p3.fabric.md +96 -0
  28. package/dist/logic/roles/bhrain/.briefs/cognition/cog251.cortal.focus.p3.mode.md +68 -0
  29. package/dist/logic/roles/bhrain/.briefs/cognition/cog251.cortal.focus.p3.rythm.md +56 -0
  30. package/dist/logic/roles/bhrain/.briefs/cognition/cog251.cortal.focus.p3.usecases.md +76 -0
  31. package/dist/logic/roles/bhrain/.briefs/cognition/cog301.traversal.1.motion.primitives._.md +155 -0
  32. package/dist/logic/roles/bhrain/.briefs/cognition/cog301.traversal.1.motion.primitives.acuity.md +94 -0
  33. package/dist/logic/roles/bhrain/.briefs/cognition/cog301.traversal.1.motion.primitives.breadth.md +114 -0
  34. package/dist/logic/roles/bhrain/.briefs/cognition/cog301.traversal.1.motion.primitives.breadth.vary.md +105 -0
  35. package/dist/logic/roles/bhrain/.briefs/cognition/cog301.traversal.1.motion.primitives.depth.md +132 -0
  36. package/dist/logic/roles/bhrain/.briefs/cognition/cog301.traversal.2.motion.composites._.md +106 -0
  37. package/dist/logic/roles/bhrain/.briefs/cognition/cog301.traversal.2.motion.composites.grammar.md +105 -0
  38. package/dist/logic/roles/bhrain/.briefs/cognition/cog401.questions.._.md +209 -0
  39. package/dist/logic/roles/bhrain/.briefs/cognition/cog401.questions.1.persp.as.berries.md +168 -0
  40. package/dist/logic/roles/bhrain/.briefs/cognition/cog401.questions.1.persp.as.vectors.md +74 -0
  41. package/dist/logic/roles/bhrain/.briefs/cognition/cog401.questions.1.persp.has.precision.tunable.md +80 -0
  42. package/dist/logic/roles/bhrain/.briefs/cognition/cog401.questions.2.1.primitives.rough._.md +99 -0
  43. package/dist/logic/roles/bhrain/.briefs/cognition/cog401.questions.2.1.primitives.rough.interrogative.md +108 -0
  44. package/dist/logic/roles/bhrain/.briefs/cognition/cog401.questions.2.1.primitives.rough.why.[article].md +55 -0
  45. package/dist/logic/roles/bhrain/.briefs/cognition/cog401.questions.2.2.composite.smooth._.md +83 -0
  46. package/dist/logic/roles/bhrain/.briefs/cognition/cog401.questions.2.2.composite.smooth.examples.md +101 -0
  47. package/dist/logic/roles/bhrain/.briefs/cognition/cog501.cortal.assemblylang.1.primitives._.md +134 -0
  48. package/dist/logic/roles/bhrain/.briefs/cognition/cog501.cortal.assemblylang.1.primitives.recall.md +149 -0
  49. package/dist/logic/roles/bhrain/.briefs/cognition/cog501.cortal.assemblylang.1.primitives.steer.md +146 -0
  50. package/dist/logic/roles/bhrain/.briefs/cognition/cog501.cortal.assemblylang.1.primitives.think.md +141 -0
  51. package/dist/logic/roles/bhrain/.briefs/cognition/cog501.cortal.assemblylang.2.composites.zoom.md +127 -0
  52. package/dist/logic/roles/bhrain/.briefs/cognition/cog501.cortal.assemblylang.3.catalogs.md +107 -0
  53. package/dist/logic/roles/bhrain/.briefs/cognition/cog501.cortal.assemblylang.3.grammar.md +124 -0
  54. package/dist/logic/roles/bhrain/.briefs/cognition/cog501.cortal.assemblylang_.md +0 -0
  55. package/dist/logic/roles/bhrain/.briefs/cognition/inflight/concept.vs.idea.md +70 -0
  56. package/dist/logic/roles/bhrain/.briefs/cognition/inflight/core.concept.adjectives.md +8 -0
  57. package/dist/logic/roles/bhrain/.briefs/distilisys.grammar.compressed.md +19 -0
  58. package/dist/logic/roles/bhrain/.briefs/grammar/gerunds.1.why.common.[article].md +32 -0
  59. package/dist/logic/roles/bhrain/.briefs/grammar/gerunds.1.why.term_smells.[article].md +36 -0
  60. package/dist/logic/roles/bhrain/.briefs/grammar/gerunds.1.why.term_smells.detection.[lesson].md +73 -0
  61. package/dist/logic/roles/bhrain/.briefs/grammar/gerunds.2.tactic.eliminate.[article].md +55 -0
  62. package/dist/logic/roles/bhrain/.briefs/grammar/gerunds.2.tactic.eliminate.[lesson].md +41 -0
  63. package/dist/logic/roles/bhrain/.briefs/grammar/gerunds.3.eliminator.[trait]._.md +66 -0
  64. package/dist/logic/roles/bhrain/.briefs/grammar/gerunds.3.eliminator.[trait].balance.md +36 -0
  65. package/dist/logic/roles/bhrain/.briefs/grammar/gerunds.3.eliminator.[trait].bane.md +34 -0
  66. package/dist/logic/roles/bhrain/.briefs/grammar/gerunds.3.eliminator.[trait].boon.md +35 -0
  67. package/dist/logic/roles/bhrain/.briefs/knowledge/kno101.primitives.1.ontology.[article].frame.docs_as_materializations.md +63 -0
  68. package/dist/logic/roles/bhrain/.briefs/knowledge/kno101.primitives.1.ontology.[article].frame.docs_as_references.md +45 -0
  69. package/dist/logic/roles/bhrain/.briefs/knowledge/kno101.primitives.2.rel.many_to_many.[article].md +37 -0
  70. package/dist/logic/roles/bhrain/.briefs/knowledge/kno101.primitives.3.instances.[article].md +39 -0
  71. package/dist/logic/roles/bhrain/.briefs/knowledge/kno101.primitives.4.documents.[article].md +37 -0
  72. package/dist/logic/roles/bhrain/.briefs/knowledge/kno101.primitives.5.concepts.[article].md +39 -0
  73. package/dist/logic/roles/bhrain/.briefs/knowledge/kno201.documents._.[article].md +48 -0
  74. package/dist/logic/roles/bhrain/.briefs/knowledge/kno201.documents._.[catalog].md +52 -0
  75. package/dist/logic/roles/bhrain/.briefs/knowledge/kno201.documents.articles.[article].md +40 -0
  76. package/dist/logic/roles/bhrain/.briefs/knowledge/kno201.documents.catalogs.[article].md +41 -0
  77. package/dist/logic/roles/bhrain/.briefs/knowledge/kno201.documents.demos.[article].md +42 -0
  78. package/dist/logic/roles/bhrain/.briefs/knowledge/kno201.documents.lessons.[article].md +42 -0
  79. package/dist/logic/roles/bhrain/.briefs/knowledge/kno301.doc.compression.1.refs._.[article].md +41 -0
  80. package/dist/logic/roles/bhrain/.briefs/knowledge/kno301.doc.compression.2.kernels._.[article].i1.md +50 -0
  81. package/dist/logic/roles/bhrain/.briefs/knowledge/kno301.doc.compression.3.briefs._.[article].md +40 -0
  82. package/dist/logic/roles/bhrain/.briefs/knowledge/kno301.doc.compression._.[article].md +90 -0
  83. package/dist/logic/roles/bhrain/.briefs/knowledge/kno301.doc.compression._.[catalog].persp.garden.md +64 -0
  84. package/dist/logic/roles/bhrain/.briefs/knowledge/kno301.doc.enbrief.1.from_instances.[article].md +45 -0
  85. package/dist/logic/roles/bhrain/.briefs/knowledge/kno301.doc.enbrief.1.from_instances.[demo].algorithm.md +54 -0
  86. package/dist/logic/roles/bhrain/.briefs/knowledge/kno301.doc.enbrief.1.from_instances.[demo].color.md +56 -0
  87. package/dist/logic/roles/bhrain/.briefs/knowledge/kno301.doc.enbrief.1.from_instances.[demo].empathy.md +54 -0
  88. package/dist/logic/roles/bhrain/.briefs/knowledge/kno301.doc.enbrief.1.from_instances.[demo].entropy.md +54 -0
  89. package/dist/logic/roles/bhrain/.briefs/knowledge/kno301.doc.enbrief.1.from_instances.[demo].gravity.md +54 -0
  90. package/dist/logic/roles/bhrain/.briefs/knowledge/kno301.doc.enbrief.1.from_instances.[demo].joke.md +56 -0
  91. package/dist/logic/roles/bhrain/.briefs/knowledge/kno301.doc.enbrief.1.from_instances.[demo].value.md +54 -0
  92. package/dist/logic/roles/bhrain/.briefs/knowledge/kno301.doc.enbrief.2._.[catalog].md +43 -0
  93. package/dist/logic/roles/bhrain/.briefs/knowledge/kno301.doc.enbrief.2.articulate.[article].md +27 -0
  94. package/dist/logic/roles/bhrain/.briefs/knowledge/kno301.doc.enbrief.2.articulate.[lesson].md +49 -0
  95. package/dist/logic/roles/bhrain/.briefs/knowledge/kno301.doc.enbrief.2.catalogize.[article].md +27 -0
  96. package/dist/logic/roles/bhrain/.briefs/knowledge/kno301.doc.enbrief.2.catalogize.[lesson].md +54 -0
  97. package/dist/logic/roles/bhrain/.briefs/knowledge/kno301.doc.enbrief.2.demonstrate.[article].md +26 -0
  98. package/dist/logic/roles/bhrain/.briefs/knowledge/kno301.doc.enbrief.2.demonstrate.[lesson].md +49 -0
  99. package/dist/logic/roles/bhrain/.briefs/knowledge/kno301.doc.enbrief.2.lessonize.[article].md +26 -0
  100. package/dist/logic/roles/bhrain/.briefs/knowledge/kno301.doc.enbrief.2.lessonize.[lesson].md +54 -0
  101. package/dist/logic/roles/bhrain/.briefs/knowledge/kno301.doc.kernelize._.[article].md +58 -0
  102. package/dist/logic/roles/bhrain/.briefs/knowledge/kno301.doc.kernelize._.[lesson].md +88 -0
  103. package/dist/logic/roles/bhrain/.briefs/knowledge/kno351.docs.are_instances.[article].md +34 -0
  104. package/dist/logic/roles/bhrain/.briefs/knowledge/kno351.docs.recursion.[catalog].md +44 -0
  105. package/dist/logic/roles/bhrain/.briefs/knowledge/kno401.actors.1.role.author.[article].md +36 -0
  106. package/dist/logic/roles/bhrain/.briefs/knowledge/kno401.actors.1.role.librarian.[article].md +40 -0
  107. package/dist/logic/roles/bhrain/.briefs/knowledge/kno401.actors.2.interdependence.[article].md +52 -0
  108. package/dist/logic/roles/bhrain/.briefs/knowledge/kno501.doc.enbrief.catalog.structure1.[article].md +53 -0
  109. package/dist/logic/roles/bhrain/.briefs/knowledge/kno501.doc.enbrief.catalog.structure1.[lesson].template.md +101 -0
  110. package/dist/logic/roles/bhrain/.briefs/librarian.context/article.variant.vision.[article].md +60 -0
  111. package/dist/logic/roles/bhrain/.briefs/librarian.context/term.expectation.vs_assumption._.md +60 -0
  112. package/dist/logic/roles/bhrain/.briefs/librarian.context/term.frame.vs_perspective.[article].md +96 -0
  113. package/dist/logic/roles/bhrain/.briefs/librarian.context/term.invariant.[article].md +29 -0
  114. package/dist/logic/roles/bhrain/.briefs/librarian.context/term.lesson._vs_article.[article].md +36 -0
  115. package/dist/logic/roles/bhrain/.briefs/librarian.context/term.ref._vs_brief.md +90 -0
  116. package/dist/logic/roles/bhrain/.briefs/librarian.context/term.referent.[article].md +43 -0
  117. package/dist/logic/roles/bhrain/.briefs/librarian.context/usage.lesson_vs_article.[lesson].md +31 -0
  118. package/dist/logic/roles/bhrain/.briefs/librarian.context/usage.lesson_vs_article_vs_demo.[lesson].md +37 -0
  119. package/dist/logic/roles/bhrain/.briefs/librarian.tactics/.readme.md +12 -0
  120. package/dist/logic/roles/bhrain/.briefs/librarian.tactics/<articulate>._.[article].frame.cognitive.md +33 -0
  121. package/dist/logic/roles/bhrain/.briefs/librarian.tactics/<articulate>._.[article].frame.tactical.md +45 -0
  122. package/dist/logic/roles/bhrain/.briefs/librarian.tactics/<articulate>.tactic.[catalog].md +83 -0
  123. package/dist/logic/roles/bhrain/.briefs/librarian.tactics/<articulate>.tactic.concept_dimension.examples.[article][seed].md +4 -0
  124. package/dist/logic/roles/bhrain/.briefs/librarian.tactics/<articulate>.tactic.concept_dimension.invariants.[article].md +36 -0
  125. package/dist/logic/roles/bhrain/.briefs/librarian.tactics/<articulate>.tactic.from.examples.md +44 -0
  126. package/dist/logic/roles/bhrain/.briefs/librarian.tactics/<articulate>.tactic.from.seed.md +48 -0
  127. package/dist/logic/roles/bhrain/.briefs/librarian.tactics/<articulate>.tactic.with.templates.[article].md +57 -0
  128. package/dist/logic/roles/bhrain/.briefs/librarian.tactics/<articulate>.tactic.with.templates.[gallery][review].effective.md +1 -0
  129. package/dist/logic/roles/bhrain/.briefs/librarian.tactics/<articulate>.tone.bluecollar.[article][seed].md +5 -0
  130. package/dist/logic/roles/bhrain/.briefs/librarian.tactics/<catalogize>._.[article][seed].md +3 -0
  131. package/dist/logic/roles/bhrain/.briefs/librarian.tactics/<catalogize>.observation.via_clusterage_over_via_imagination.[seed].md +6 -0
  132. package/dist/logic/roles/bhrain/.briefs/librarian.tactics/<catalogize>.vs_diverge.[article].persp.save_compute.md +46 -0
  133. package/dist/logic/roles/bhrain/.briefs/librarian.tactics/<demonstrate>._.[article].frame.colloquial.i2.by_grok.md +64 -0
  134. package/dist/logic/roles/bhrain/.briefs/librarian.tactics/<demonstrate>.variants.[catalog].md +106 -0
  135. package/dist/logic/roles/bhrain/.briefs/librarian.tactics/<demonstrate>.variants.contrast.[demo].usecase.vs_userjourney.by_chatgpt.md +45 -0
  136. package/dist/logic/roles/bhrain/.briefs/librarian.tactics/<demonstrate>.variants.counter.[demo].usecase.flyer.by_chargpt.md +38 -0
  137. package/dist/logic/roles/bhrain/.briefs/librarian.tactics/<demonstrate>.variants.counter.[demo].walkability.phoenix.by_chargpt.md +41 -0
  138. package/dist/logic/roles/bhrain/.briefs/librarian.tactics/<demonstrate>.variants.example.[demo].shear_force.scissors.by_grok.md +52 -0
  139. package/dist/logic/roles/bhrain/.briefs/librarian.tactics/<demonstrate>.variants.example.[demo].tea.darjeeling.by_grok.md +50 -0
  140. package/dist/logic/roles/bhrain/.briefs/librarian.tactics/<demonstrate>.variants.example.[demo].usecase.book_flight.by_grok.md +54 -0
  141. package/dist/logic/roles/bhrain/.briefs/librarian.tactics/<demonstrate>.variants.example.[demo].usecase.order_food.by_chatgpt.md +40 -0
  142. package/dist/logic/roles/bhrain/.briefs/librarian.tactics/<demonstrate>.variants.example.[demo].walkability.portland.by_chatgpt.i3.md +42 -0
  143. package/dist/logic/roles/bhrain/.briefs/librarian.tactics/<demonstrate>.variants.example.[demo].walkability.portland.by_grok.i2.md +49 -0
  144. package/dist/logic/roles/bhrain/.briefs/librarian.tactics/<demonstrate>.variants.example.[lesson].howto.md +28 -0
  145. package/dist/logic/roles/bhrain/.briefs/librarian.tactics/<demonstrate>.variants.example.structure.[article].i2.md +73 -0
  146. package/dist/logic/roles/bhrain/.briefs/librarian.tactics/<demonstrate>.variants.narrative.[demo].usecase.order_online.by_chatgpt.md +34 -0
  147. package/dist/logic/roles/bhrain/.briefs/librarian.tactics/<demonstrate>.variants.walkthrough.[demo].usecase.book_online.by_chatgpt.md +47 -0
  148. package/dist/logic/roles/bhrain/.briefs/librarian.tactics/[brief].verbiage.outline.over.narrative.md +55 -0
  149. package/dist/logic/roles/bhrain/.briefs/logistics/term.logistics.[article].md +21 -0
  150. package/dist/logic/roles/bhrain/.briefs/logistics/term.logistics.of_information.[article].md +22 -0
  151. package/dist/logic/roles/bhrain/.briefs/logistics/term.logistics.of_knowledge.[article].md +29 -0
  152. package/dist/logic/roles/bhrain/.briefs/physics/optics.focal.acuity.md +77 -0
  153. package/dist/logic/roles/bhrain/.briefs/physics/optics.focal.breadth.md +74 -0
  154. package/dist/logic/roles/bhrain/.briefs/physics/optics.focal.depth.md +77 -0
  155. package/dist/logic/roles/bhrain/.briefs/physics/optics.focal.distance.md +92 -0
  156. package/dist/logic/roles/bhrain/.briefs/physics/optics.focal.tradeoffs.md +107 -0
  157. package/dist/logic/roles/bhrain/.briefs/tactician/tactics.compose.traits_and_skills.[article].md +76 -0
  158. package/dist/logic/roles/bhrain/.briefs/tactician/trait.articulation.[article].md +67 -0
  159. package/dist/logic/roles/bhrain/.briefs/tactician/trait.purpose.[article].md +56 -0
  160. package/dist/logic/roles/bhrain/.briefs/tactician/trait.vs_skill.[article].md +55 -0
  161. package/dist/logic/roles/bhrain/.briefs/tactician/trait.vs_tactic.[article].md +70 -0
  162. package/dist/logic/roles/bhrain/.briefs/terms.motive.intent.goal.md +46 -0
  163. package/dist/logic/roles/bhrain/.briefs/thinker.tactics/<cluster>._.[article].frame.tactical._.md +85 -0
  164. package/dist/logic/roles/bhrain/.briefs/thinker.tactics/<cluster>.vs_<diverge>.duality.[article].md +43 -0
  165. package/dist/logic/roles/bhrain/.briefs/thinker.tactics/<diverge>._.[article].frame.cognitive.[seed].md +4 -0
  166. package/dist/logic/roles/bhrain/.briefs/thinker.tactics/<diverge>._.[article].frame.tactical.md +89 -0
  167. package/dist/logic/roles/bhrain/.briefs/thinker.tactics/<elaborate>_vs_<elucidate>.[seed].md +1 -0
  168. package/dist/logic/roles/bhrain/.briefs/thinker.tactics/<enquestion>._.[article].md +113 -0
  169. package/dist/logic/roles/bhrain/.briefs/thinker.tactics/<enquestion>._.[gallery].plumber.diagnose.md +130 -0
  170. package/dist/logic/roles/bhrain/.briefs/thinker.tactics/<enquestion>._.[gallery].thinker.enquestion.md +125 -0
  171. package/dist/logic/roles/bhrain/.briefs/thinker.tactics/<enquestion>.tactic.perspectives.[article].md +36 -0
  172. package/dist/logic/roles/bhrain/.briefs/thinker.tactics/<triage>._.[article].frame.tactical.md +85 -0
  173. package/dist/logic/roles/bhrain/.briefs/thinker.tactics/<triage>.persp.grades_from_context.[article].md +48 -0
  174. package/dist/logic/roles/bhrain/.briefs/thinker.tactics/<triage>.persp.implicit_question.[article].md +65 -0
  175. package/dist/logic/roles/bhrain/.briefs/trait.chillnature.md +14 -0
  176. package/dist/logic/roles/bhrain/.briefs/trait.ocd.md +5 -0
  177. package/dist/logic/roles/bhrain/.briefs/worders/core.matmuls_vecmuls_elemuls.md +93 -0
  178. package/dist/logic/roles/bhrain/.briefs/worders/core.transformers.as_origin.md +62 -0
  179. package/dist/logic/roles/bhrain/.briefs/worders/core.transformers.self_attention.[article].md +93 -0
  180. package/dist/logic/roles/bhrain/.briefs/worders/core.transformers.self_attention.[demo].ambig.bank.md +80 -0
  181. package/dist/logic/roles/bhrain/.briefs/worders/core.transformers.self_attention.[demo].cat_sat.md +67 -0
  182. package/dist/logic/roles/bhrain/.briefs/worders/force.repeat_input_structures.md +48 -0
  183. package/dist/logic/roles/bhrain/.briefs/worders/knowledge.interdependence.[article].md +37 -0
  184. package/dist/logic/roles/bhrain/.briefs/worders/knowledge.interdependence.[demo].domain.physics.md +30 -0
  185. package/dist/logic/roles/bhrain/.briefs/worders/knowledge.internal_vs_external.[article].artist_vs_librarian.md +44 -0
  186. package/dist/logic/roles/bhrain/.briefs/worders/knowledge.internal_vs_external.[demo].artist_vs_librarian.md +37 -0
  187. package/dist/logic/roles/bhrain/.briefs/worders/knowledge.internal_vs_external.[demo].domain.physics.md +39 -0
  188. package/dist/logic/roles/bhrain/.briefs/worders/knowledge.internalized.[article].md +35 -0
  189. package/dist/logic/roles/bhrain/.briefs/worders/knowledge.internalized.[demo].artist.md +36 -0
  190. package/dist/logic/roles/bhrain/.briefs/worders/knowledge.internalized.[demo].neural.md +37 -0
  191. package/dist/logic/roles/bhrain/.briefs/worders/knowledge.internalized.[demo].pianist.md +34 -0
  192. package/dist/logic/roles/bhrain/.briefs/worders/limits.rhyme.md +46 -0
  193. package/dist/logic/roles/bhrain/.briefs/worders/limits.spell.md +49 -0
  194. package/dist/logic/roles/bhrain/.briefs/worders/teach.via.library.examples.md +28 -0
  195. package/dist/logic/roles/bhrain/.briefs/worders/teach.via.library.explanations_vs_examples.md +40 -0
  196. package/dist/logic/roles/bhrain/.briefs/worders/trend.prefer_reuse.[seed].md +10 -0
  197. package/dist/logic/roles/bhrain/brief.articulate/stepArticulate.template.md +120 -0
  198. package/dist/logic/roles/bhrain/brief.demonstrate/stepDemonstrate.template.md +135 -0
  199. package/dist/logic/roles/bhrain/khue.cluster/stepCluster.template.md +134 -0
  200. package/dist/logic/roles/bhrain/khue.diverge/stepDiverge.template.md +110 -0
  201. package/dist/logic/roles/bhrain/khue.instantiate/stepInstantiate.template.md +73 -0
  202. package/dist/logic/roles/bhrain/khue.triage/stepTriage.template.md +128 -0
  203. package/dist/logic/roles/coach/.briefs/claude.context-caching.md +76 -0
  204. package/dist/logic/roles/designer/.briefs/declarative-over-imperative.md +79 -0
  205. package/dist/logic/roles/designer/.briefs/declarative-over-imperative.stub.md +14 -0
  206. package/dist/logic/roles/designer/.briefs/pit-of-success.md +70 -0
  207. package/dist/logic/roles/designer/.briefs/pit-of-success.stub.md +3 -0
  208. package/dist/logic/roles/designer/outlineDistilisys/stepOutlineDistilisys.template.md +173 -0
  209. package/dist/logic/roles/designer/outlineRoadmap/stepOutlineRoadmap.template.md +88 -0
  210. package/dist/logic/roles/designer/outlineVision/stepOutlineVision.template.md +47 -0
  211. package/dist/logic/roles/ecologist/.briefs/.readme.md +17 -0
  212. package/dist/logic/roles/ecologist/.briefs/distilisys/sys101.distilisys.grammar.md +221 -0
  213. package/dist/logic/roles/ecologist/.briefs/distilisys/sys201.actor.motive._.summary.md +82 -0
  214. package/dist/logic/roles/ecologist/.briefs/distilisys/sys201.actor.motive.p1.reversibility.entropy.md +39 -0
  215. package/dist/logic/roles/ecologist/.briefs/distilisys/sys201.actor.motive.p2.option.chance.choice.md +140 -0
  216. package/dist/logic/roles/ecologist/.briefs/distilisys/sys201.actor.motive.p3.chance.motive.polarity.threat.md +72 -0
  217. package/dist/logic/roles/ecologist/.briefs/distilisys/sys201.actor.motive.p4.motive.horizon.md +101 -0
  218. package/dist/logic/roles/ecologist/.briefs/distilisys/sys201.actor.motive.p5.motive.grammar.md +131 -0
  219. package/dist/logic/roles/ecologist/.briefs/distilisys/sys211.actor.resources._.primitives.summary.md +108 -0
  220. package/dist/logic/roles/ecologist/.briefs/distilisys/sys211.actor.resources.pt1.primitive.time.md +56 -0
  221. package/dist/logic/roles/ecologist/.briefs/distilisys/sys211.actor.resources.pt2.primitive.energy.md +69 -0
  222. package/dist/logic/roles/ecologist/.briefs/distilisys/sys211.actor.resources.pt3.primitive.space.md +85 -0
  223. package/dist/logic/roles/ecologist/.briefs/distilisys/sys211.actor.resources.pt4.primitive.claim.md +113 -0
  224. package/dist/logic/roles/ecologist/.briefs/distilisys/sys211.actor.resources.pt5.composites.md +146 -0
  225. package/dist/logic/roles/ecologist/.briefs/distilisys/sys231.actor.claims.p1.primitive.exchange.md +130 -0
  226. package/dist/logic/roles/ecologist/.briefs/ecology/.eco001.origin.prompt.md +11 -0
  227. package/dist/logic/roles/ecologist/.briefs/ecology/eco001.overview.md +44 -0
  228. package/dist/logic/roles/ecologist/.briefs/ecology/eco101.core-system-understanding.md +70 -0
  229. package/dist/logic/roles/ecologist/.briefs/ecology/eco101.p1.ecosystem-structure.md +62 -0
  230. package/dist/logic/roles/ecologist/.briefs/ecology/eco101.p2.trophic-dynamics.md +59 -0
  231. package/dist/logic/roles/ecologist/.briefs/ecology/eco101.p3.population-ecology.md +71 -0
  232. package/dist/logic/roles/ecologist/.briefs/ecology/eco101.p4.community-interactions.md +78 -0
  233. package/dist/logic/roles/ecologist/.briefs/ecology/eco505.systems-thinking.md +62 -0
  234. package/dist/logic/roles/ecologist/.briefs/economy/econ001.overview.md +65 -0
  235. package/dist/logic/roles/ecologist/.briefs/economy/econ101.core-mechanics.md +65 -0
  236. package/dist/logic/roles/ecologist/.briefs/economy/econ101.p1.supply-and-demand.md +76 -0
  237. package/dist/logic/roles/ecologist/.briefs/economy/econ101.p2.opportunity-cost.md +106 -0
  238. package/dist/logic/roles/ecologist/.briefs/economy/econ101.p3.marginal-analysis.md +79 -0
  239. package/dist/logic/roles/ecologist/.briefs/economy/econ101.p4.rational-choice.md +81 -0
  240. package/dist/logic/roles/ecologist/.briefs/economy/econ201.market-structures-and-failures.md +81 -0
  241. package/dist/logic/roles/ecologist/.briefs/economy/econ301.production-and-growth.md +71 -0
  242. package/dist/logic/roles/ecologist/.briefs/economy/econ401.macro-systems.md +92 -0
  243. package/dist/logic/roles/ecologist/.briefs/economy/econ501.global-and-institutional.md +85 -0
  244. package/dist/logic/roles/ecologist/.briefs/economy/econ501.p1.game-theory.md +142 -0
  245. package/dist/logic/roles/ecologist/.briefs/economy/econ501.p4.behavioral-economics.md +146 -0
  246. package/dist/logic/roles/ecologist/.briefs/product/user.journey._.[article].i1.md +68 -0
  247. package/dist/logic/roles/ecologist/.briefs/product/user.journey._.[article].md +0 -0
  248. package/dist/logic/roles/ecologist/.briefs/product/user.journey.purpose.[article].i1.md +52 -0
  249. package/dist/logic/roles/ecologist/.briefs/product/user.journey.purpose.[article].md +52 -0
  250. package/dist/logic/roles/ecologist/.briefs/term.distillation.md +93 -0
  251. package/dist/logic/roles/mechanic/.briefs/architecture/bounded-contexts.md +61 -0
  252. package/dist/logic/roles/mechanic/.briefs/architecture/directional-dependencies.md +82 -0
  253. package/dist/logic/roles/mechanic/.briefs/architecture/domain-driven-design.md +61 -0
  254. package/dist/logic/roles/mechanic/.briefs/architecture/ubiqlang.md +37 -0
  255. package/dist/logic/roles/mechanic/.briefs/codestyle/_mech.compressed.md +57 -0
  256. package/dist/logic/roles/mechanic/.briefs/codestyle/_mech.compressed.prompt.md +5 -0
  257. package/dist/logic/roles/mechanic/.briefs/codestyle/flow.failfast.md +37 -0
  258. package/dist/logic/roles/mechanic/.briefs/codestyle/flow.idempotency.md +63 -0
  259. package/dist/logic/roles/mechanic/.briefs/codestyle/flow.immutability.md +48 -0
  260. package/dist/logic/roles/mechanic/.briefs/codestyle/flow.narratives.md +74 -0
  261. package/dist/logic/roles/mechanic/.briefs/codestyle/flow.single-responsibility.md +67 -0
  262. package/dist/logic/roles/mechanic/.briefs/codestyle/flow.transformers_over_conditionals.[lesson].md +97 -0
  263. package/dist/logic/roles/mechanic/.briefs/codestyle/mech.args.input-context.md +61 -0
  264. package/dist/logic/roles/mechanic/.briefs/codestyle/mech.args.input-inline.md +63 -0
  265. package/dist/logic/roles/mechanic/.briefs/codestyle/mech.arrowonly.md +47 -0
  266. package/dist/logic/roles/mechanic/.briefs/codestyle/mech.clear-contracts.md +53 -0
  267. package/dist/logic/roles/mechanic/.briefs/codestyle/mech.tests.given-when-then.md +62 -0
  268. package/dist/logic/roles/mechanic/.briefs/codestyle/mech.what-why.md +88 -0
  269. package/dist/logic/roles/mechanic/.briefs/codestyle/mech.what-why.v2.md +98 -0
  270. package/dist/logic/roles/mechanic/.briefs/codestyle/pit-of-success.via.minimize-surface-area.md +58 -0
  271. package/dist/logic/roles/mechanic/.briefs/criteria.practices/never.term.script.md +7 -0
  272. package/dist/logic/roles/mechanic/.briefs/criteria.practices/prefer.emojis.chill_nature.md +24 -0
  273. package/dist/logic/roles/mechanic/.briefs/criteria.practices/prefer.jq.over_alt.[demo].md +29 -0
  274. package/dist/logic/roles/mechanic/.briefs/criteria.practices/prefer.terraform.[criteria].md +4 -0
  275. package/dist/logic/roles/mechanic/.briefs/criteria.practices/prefer.terraform.[seed].md +17 -0
  276. package/dist/logic/roles/mechanic/.briefs/criteria.practices/require.dependency.pinned_versions.md +3 -0
  277. package/dist/logic/roles/mechanic/.briefs/criteria.practices/require.idempotency.md +33 -0
  278. package/dist/logic/roles/mechanic/.briefs/criteria.practices/require.knowledge.externalized.md +17 -0
  279. package/dist/logic/roles/mechanic/.briefs/engineer/dependency-injection.md +118 -0
  280. package/dist/logic/roles/mechanic/.briefs/engineer/dependency-injection.stub.md +11 -0
  281. package/dist/logic/roles/mechanic/.briefs/lessons/code.prod.typescript.types/bivariance_vs_contravariance.[lesson].md +95 -0
  282. package/dist/logic/roles/mechanic/.briefs/patterns/code.prod.contract.inputs.nameargs/bad-practice/forbid.positional-args.md +43 -0
  283. package/dist/logic/roles/mechanic/.briefs/patterns/code.prod.contract.inputs.nameargs/best-practice/require.namedargs.md +6 -0
  284. package/dist/logic/roles/mechanic/.briefs/patterns/code.prod.declarative/.readme.md +0 -0
  285. package/dist/logic/roles/mechanic/.briefs/patterns/code.prod.declarative/best-practice/declastruct.[demo].md +485 -0
  286. package/dist/logic/roles/mechanic/.briefs/patterns/code.prod.domain.objects/bad-practices/blocker.has.attributes.nullable.md +13 -0
  287. package/dist/logic/roles/mechanic/.briefs/patterns/code.prod.domain.objects/bad-practices/blocker.has.attributes.undefined.md +15 -0
  288. package/dist/logic/roles/mechanic/.briefs/patterns/code.prod.domain.objects/bad-practices/blocker.refs.immuatble.md +9 -0
  289. package/dist/logic/roles/mechanic/.briefs/patterns/code.prod.domain.objects/best-practice/ref.package.domain-objects.[readme].md +585 -0
  290. package/dist/logic/roles/mechanic/.briefs/patterns/code.prod.domain.operations/best-practice/require.sync.names.md +14 -0
  291. package/dist/logic/roles/mechanic/.briefs/patterns/code.prod.errors.failfast/bad-practices/forbid.failhide.md +19 -0
  292. package/dist/logic/roles/mechanic/.briefs/patterns/code.prod.errors.failfast/bad-practices/forbid.hide_errors.md +13 -0
  293. package/dist/logic/roles/mechanic/.briefs/patterns/code.prod.errors.failfast/best-practice/prefer.HelpfulError.wrap.md +54 -0
  294. package/dist/logic/roles/mechanic/.briefs/patterns/code.prod.errors.failfast/best-practice/require.fail_fast.[demo].shell.md +17 -0
  295. package/dist/logic/roles/mechanic/.briefs/patterns/code.prod.errors.failfast/best-practice/require.fail_fast.md +28 -0
  296. package/dist/logic/roles/mechanic/.briefs/patterns/code.prod.narrative/bad-practices/forbid.else.md +54 -0
  297. package/dist/logic/roles/mechanic/.briefs/patterns/code.prod.narrative/best-practice/early-returns.named-checks.[demo].md +181 -0
  298. package/dist/logic/roles/mechanic/.briefs/patterns/code.prod.repo.structure/bad-practices/forbid.barrel.exports.ts.md +41 -0
  299. package/dist/logic/roles/mechanic/.briefs/patterns/code.prod.repo.structure/bad-practices/forbid.index.ts.md +3 -0
  300. package/dist/logic/roles/mechanic/.briefs/patterns/code.prod.repo.structure/best-practice/directional-dependencies.md +82 -0
  301. package/dist/logic/roles/mechanic/.briefs/patterns/code.prod.repo.structure/best-practice/dot-test-and-dot-temp.md +20 -0
  302. package/dist/logic/roles/mechanic/.briefs/patterns/code.prod.typescript.utils/best-practice/ref.package.as-command.[tips].md +7 -0
  303. package/dist/logic/roles/mechanic/.briefs/patterns/code.test.acceptance/best-practice/blackbox.md +5 -0
  304. package/dist/logic/roles/mechanic/.briefs/patterns/code.test.howto/best-practice/howto.diagnose.[lesson].md +14 -0
  305. package/dist/logic/roles/mechanic/.briefs/patterns/code.test.howto/best-practice/howto.run.[lesson].md +18 -0
  306. package/dist/logic/roles/mechanic/.briefs/patterns/code.test.howto/best-practice/howto.use.[lesson].md +20 -0
  307. package/dist/logic/roles/mechanic/.briefs/patterns/code.test.howto/best-practice/howto.write.[lesson].md +3 -0
  308. package/dist/logic/roles/mechanic/.briefs/patterns/code.test.howto/best-practice/howto.write.[lesson].on_scope.for_integ.md +8 -0
  309. package/dist/logic/roles/mechanic/.briefs/patterns/code.test.howto/best-practice/howto.write.[lesson].on_scope.for_units.md +9 -0
  310. package/dist/logic/roles/mechanic/.briefs/patterns/code.test.howto/best-practice/howto.write.bdd.[lesson].md +280 -0
  311. package/dist/logic/roles/mechanic/.briefs/patterns/code.test.howto/best-practice/prefer.datadriven.md +41 -0
  312. package/dist/logic/roles/mechanic/.briefs/patterns/code.test.howto/best-practice/ref.test-fns.[readme].md +185 -0
  313. package/dist/logic/roles/mechanic/.briefs/patterns/code.test.howto/best-practice/whento.snapshots.[lesson].md +23 -0
  314. package/dist/logic/roles/mechanic/.briefs/patterns/lang.terms/.readme.md +1 -0
  315. package/dist/logic/roles/mechanic/.briefs/patterns/lang.terms/bad-practices/forbid.term=existing.md +10 -0
  316. package/dist/logic/roles/mechanic/.briefs/patterns/lang.terms/best-practice/require.order.noun_adj.md +39 -0
  317. package/dist/logic/roles/mechanic/.briefs/patterns/lang.terms/domain=practices.terms=forbid_prefer_desire_require.md +13 -0
  318. package/dist/logic/roles/mechanic/.briefs/patterns/lang.terms/domain=software.terms=prodcode_vs_testcode.md +7 -0
  319. package/dist/logic/roles/mechanic/.briefs/patterns/lang.tones/.readme.md +3 -0
  320. package/dist/logic/roles/mechanic/.briefs/patterns/lang.tones/prefer.chill-nature.md +0 -0
  321. package/dist/logic/roles/mechanic/.briefs/patterns/lang.tones/prefer.lowercase.md +0 -0
  322. package/dist/logic/roles/mechanic/.briefs/style.compressed.md +29 -0
  323. package/dist/logic/roles/mechanic/.briefs/style.compressed.prompt.md +5 -0
  324. package/dist/logic/roles/mechanic/.briefs/style.names.treestruct.md +48 -0
  325. package/dist/logic/roles/mechanic/.briefs/style.names.ubiqlang.md +37 -0
  326. package/dist/logic/roles/mechanic/.briefs/style.words.lowercase.md +36 -0
  327. package/dist/logic/roles/mechanic/.briefs/terms/badpractice/script.md +9 -0
  328. package/dist/logic/roles/mechanic/.briefs/terms/plan.exec_vs_apply.md +45 -0
  329. package/dist/logic/roles/mechanic/.skills/claude.hooks/check.pretooluse.permissions.sh +235 -0
  330. package/dist/logic/roles/mechanic/.skills/claude.hooks/forbid.stderr.redirect.sh +57 -0
  331. package/dist/logic/roles/mechanic/.skills/declapract.upgrade.sh +50 -0
  332. package/dist/logic/roles/mechanic/.skills/git.worktree.common.sh +58 -0
  333. package/dist/logic/roles/mechanic/.skills/git.worktree.del.sh +51 -0
  334. package/dist/logic/roles/mechanic/.skills/git.worktree.get.sh +51 -0
  335. package/dist/logic/roles/mechanic/.skills/git.worktree.set.sh +108 -0
  336. package/dist/logic/roles/mechanic/.skills/git.worktree.sh +46 -0
  337. package/dist/logic/roles/mechanic/.skills/init.bhuild.sh +260 -0
  338. package/dist/logic/roles/mechanic/.skills/init.claude.hooks.forbid.stderr.redirect.sh +116 -0
  339. package/dist/logic/roles/mechanic/.skills/init.claude.hooks.pretooluse.sh +118 -0
  340. package/dist/logic/roles/mechanic/.skills/init.claude.hooks.sessionstart.sh +113 -0
  341. package/dist/logic/roles/mechanic/.skills/init.claude.hooks.sh +25 -0
  342. package/dist/logic/roles/mechanic/.skills/init.claude.permissions.sh +156 -0
  343. package/dist/logic/roles/mechanic/.skills/init.claude.sh +47 -0
  344. package/dist/logic/roles/mechanic/.skills/link.claude.transcripts.sh +43 -0
  345. package/dist/logic/roles/mechanic/.skills/test.integration.sh +50 -0
  346. package/dist/logic/roles/mechanic/codediff/routeArtistCodeDiff.template.md +46 -0
  347. package/dist/logic/roles/mechanic/codediff/routeCriticCodeReviewArchitecture.template.md +78 -0
  348. package/dist/logic/roles/mechanic/codediff/routeCriticCodeReviewCodestyle.template.md +75 -0
  349. package/dist/logic/roles/mechanic/codediff/routeJudgeReleasable.template.md +67 -0
  350. package/dist/logic/roles/mechanic/study/routeStudyAsk.template.md +73 -0
  351. package/dist/logic/roles/mechanic/write/.test/prior.template.md +21 -0
  352. package/dist/logic/roles/mechanic/write/stepWrite.template.md +38 -0
  353. package/package.json +4 -4
@@ -0,0 +1,280 @@
1
+ # How to Write BDD Style Tests
2
+
3
+ This guide explains the pattern for writing integration tests using `test-fns` with `given`, `when`, `then`, and `useBeforeAll`.
4
+
5
+ ## Core Pattern
6
+
7
+ ```typescript
8
+ import { given, when, then, useBeforeAll } from 'test-fns';
9
+
10
+ describe('featureName', () => {
11
+ // Shared setup for all tests in the describe block
12
+ const dbConnection = useBeforeAll(() => getDatabaseConnection());
13
+ afterAll(async () => dbConnection.end());
14
+
15
+ given('[case1] description of the initial state', () => {
16
+ // Setup specific to this case, shared across all when/then blocks
17
+ const scene = useBeforeAll(async () => {
18
+ // Create test data
19
+ const entity = await createEntity({ dbConnection });
20
+ return { entity };
21
+ });
22
+
23
+ when('[t0] action or event occurs', () => {
24
+ then('expected outcome', async () => {
25
+ // Execute and verify using scene.entity
26
+ const result = await performAction({ id: scene.entity.id });
27
+ expect(result).toEqual(expectedValue);
28
+ });
29
+ });
30
+
31
+ when('[t1] different action occurs', () => {
32
+ then('different expected outcome', async () => {
33
+ // Another test using the same scene
34
+ const result = await performOtherAction({ id: scene.entity.id });
35
+ expect(result).toEqual(otherExpectedValue);
36
+ });
37
+ });
38
+ });
39
+ });
40
+ ```
41
+
42
+ ## Key Principles
43
+
44
+ ### 1. Wrap Everything in `describe`
45
+
46
+ All tests for a feature should be wrapped in a single `describe` block:
47
+
48
+ ```typescript
49
+ describe('syncPhoneFromWhodis', () => {
50
+ // all given/when/then blocks go here
51
+ });
52
+ ```
53
+
54
+ ### 2. Use `useBeforeAll` for shared resources
55
+
56
+ Instead of `let` + `beforeAll` + `afterAll`:
57
+
58
+ e.g.,
59
+ ```typescript
60
+ // ❌ Don't do this
61
+ let dbConnection: DatabaseConnection;
62
+ beforeAll(async () => {
63
+ dbConnection = await getDatabaseConnection();
64
+ });
65
+ afterAll(async () => {
66
+ await dbConnection.end();
67
+ });
68
+
69
+ // ✅ Do this
70
+ const dbConnection = useBeforeAll(() => getDatabaseConnection());
71
+ afterAll(async () => dbConnection.end());
72
+ ```
73
+
74
+ ### 3. Label given(scenes) with `[caseN]`
75
+
76
+ Each `given` block should have a unique case label:
77
+
78
+ ```typescript
79
+ given('[case1] doer with outdated phone', () => { ... });
80
+ given('[case2] doer with matching phone', () => { ... });
81
+ given('[case3] doer does not exist', () => { ... });
82
+ ```
83
+
84
+ ### 4. Label when(event) with `[tN]`
85
+
86
+ Each `when` block should have an event time index label. The counter resets within each `given` block:
87
+
88
+ ```typescript
89
+ given('[case1] first scenario', () => {
90
+ when('[t0] command executed in PLAN mode', () => { ... });
91
+ when('[t1] command executed in EXECUTE mode', () => { ... });
92
+ });
93
+
94
+ given('[case2] second scenario', () => {
95
+ when('[t0] first action', () => { ... }); // counter resets to 0
96
+ when('[t1] second action', () => { ... });
97
+ });
98
+ ```
99
+
100
+ ### 5. One Behavioral Assertion per `then` Block
101
+
102
+ Each `then` block should test a single behavioral assertion. This makes test failures more precise and test names more descriptive:
103
+
104
+ ```typescript
105
+ // ❌ Don't do this - multiple assertions in one then
106
+ when('[t0] command executed in PLAN mode', () => {
107
+ then('decision is UPDATE and doer remains unchanged', async () => {
108
+ const result = await command({ mode: 'PLAN' });
109
+ expect(result.decision).toEqual('UPDATE');
110
+ expect(result.before.doer.contactPhoneNumber).toEqual('+13175550200');
111
+
112
+ const doerAfter = await doerDao.findByUnique({ dbConnection, userUuid });
113
+ expect(doerAfter?.contactPhoneNumber).toEqual('+13175550200');
114
+ });
115
+ });
116
+
117
+ // ✅ Do this - separate then blocks for each behavioral assertion
118
+ when('[t0] command executed in PLAN mode', () => {
119
+ then('decision is "UPDATE"', async () => {
120
+ const result = await command({ mode: 'PLAN' });
121
+ expect(result.decision).toEqual('UPDATE');
122
+ });
123
+
124
+ then('before.doer.contactPhoneNumber is "+13175550200"', async () => {
125
+ const result = await command({ mode: 'PLAN' });
126
+ expect(result.before.doer.contactPhoneNumber).toEqual('+13175550200');
127
+ });
128
+
129
+ then('doer contactPhoneNumber remains unchanged', async () => {
130
+ await command({ mode: 'PLAN' });
131
+ const doerAfter = await doerDao.findByUnique({ dbConnection, userUuid });
132
+ expect(doerAfter?.contactPhoneNumber).toEqual('+13175550200');
133
+ });
134
+ });
135
+ ```
136
+
137
+ ### 6. Use `scene` for Shared Test Data
138
+
139
+ When multiple `when/then` blocks need the same test data, use `useBeforeAll` to create a `scene`:
140
+
141
+ ```typescript
142
+ given('[case1] description', () => {
143
+ const scene = useBeforeAll(async () => {
144
+ const doer = await createDoer({ dbConnection });
145
+ const provider = await createProvider({ dbConnection, doerId: doer.id });
146
+ return { doer, provider };
147
+ });
148
+
149
+ when('[t0] first test', () => {
150
+ then('outcome', async () => {
151
+ // Access scene.doer and scene.provider
152
+ const result = await action({ doerId: scene.doer.id });
153
+ });
154
+ });
155
+
156
+ when('[t1] second test', () => {
157
+ then('outcome', async () => {
158
+ // Same scene is reused
159
+ const result = await otherAction({ providerId: scene.provider.id });
160
+ });
161
+ });
162
+ });
163
+ ```
164
+
165
+ ### 7. Cases Without Setup
166
+
167
+ If a case doesn't need setup (e.g., testing error handling with invalid input), skip the `scene`:
168
+
169
+ ```typescript
170
+ given('[case4] valid userUuid', () => {
171
+ when('[t7] Whodis user cannot be found', () => {
172
+ then('command throws error', async () => {
173
+ await expect(
174
+ command({ userUuid: '00000000-0000-0000-0000-000000000001' }),
175
+ ).rejects.toThrow('Whodis user not found');
176
+ });
177
+ });
178
+ });
179
+ ```
180
+
181
+ ## Complete Example
182
+
183
+ ```typescript
184
+ import { given, when, then, useBeforeAll } from 'test-fns';
185
+ import { getDatabaseConnection } from '../../utils/database/getDatabaseConnection';
186
+ import { myCommand } from './myCommand';
187
+
188
+ describe('myCommand', () => {
189
+ const dbConnection = useBeforeAll(() => getDatabaseConnection());
190
+ afterAll(async () => dbConnection.end());
191
+
192
+ given('[case1] entity exists with state A', () => {
193
+ const scene = useBeforeAll(async () => {
194
+ const entity = await createEntity({
195
+ dbConnection,
196
+ state: 'A',
197
+ });
198
+ return { entity };
199
+ });
200
+
201
+ when('[t0] command executed in PLAN mode', () => {
202
+ then('decision is "UPDATE"', async () => {
203
+ const result = await myCommand({
204
+ entityId: scene.entity.id,
205
+ mode: 'PLAN',
206
+ });
207
+ expect(result.decision).toEqual('UPDATE');
208
+ });
209
+
210
+ then('entity state remains "A"', async () => {
211
+ await myCommand({ entityId: scene.entity.id, mode: 'PLAN' });
212
+ const entityAfter = await findEntity({ dbConnection, id: scene.entity.id });
213
+ expect(entityAfter.state).toEqual('A');
214
+ });
215
+ });
216
+
217
+ when('[t1] command executed in EXECUTE mode', () => {
218
+ then('decision is "UPDATE"', async () => {
219
+ const result = await myCommand({
220
+ entityId: scene.entity.id,
221
+ mode: 'EXECUTE',
222
+ });
223
+ expect(result.decision).toEqual('UPDATE');
224
+ });
225
+
226
+ then('after.state is "B"', async () => {
227
+ const result = await myCommand({
228
+ entityId: scene.entity.id,
229
+ mode: 'EXECUTE',
230
+ });
231
+ expect(result.after.state).toEqual('B');
232
+ });
233
+
234
+ then('entity state is updated to "B"', async () => {
235
+ await myCommand({ entityId: scene.entity.id, mode: 'EXECUTE' });
236
+ const entityAfter = await findEntity({ dbConnection, id: scene.entity.id });
237
+ expect(entityAfter.state).toEqual('B');
238
+ });
239
+ });
240
+ });
241
+
242
+ given('[case2] entity already in state B', () => {
243
+ const scene = useBeforeAll(async () => {
244
+ const entity = await createEntity({
245
+ dbConnection,
246
+ state: 'B',
247
+ });
248
+ return { entity };
249
+ });
250
+
251
+ when('[t0] command executed', () => {
252
+ then('decision is "NOCHANGE"', async () => {
253
+ const result = await myCommand({
254
+ entityId: scene.entity.id,
255
+ mode: 'EXECUTE',
256
+ });
257
+ expect(result.decision).toEqual('NOCHANGE');
258
+ });
259
+ });
260
+ });
261
+
262
+ given('[case3] invalid entityId', () => {
263
+ when('[t0] command executed', () => {
264
+ then('throws error', async () => {
265
+ await expect(
266
+ myCommand({ entityId: 'invalid-id', mode: 'PLAN' }),
267
+ ).rejects.toThrow('Entity not found');
268
+ });
269
+ });
270
+ });
271
+ });
272
+ ```
273
+
274
+ ## Benefits
275
+
276
+ 1. **Readable test output**: Test names clearly show the scenario being tested
277
+ 2. **Efficient setup**: `useBeforeAll` runs once per `given` block, not per test
278
+ 3. **Immutable references**: `const scene` and `const dbConnection` prevent accidental reassignment
279
+ 4. **Clear labeling**: `[caseN]` and `[tN]` labels make it easy to identify and discuss specific tests
280
+ 5. **Black-box testing**: Tests interact only through the contract layer, not internal implementations
@@ -0,0 +1,41 @@
1
+ when possible, prefer data driven, caselist based, tests
2
+
3
+ this is especially applicable for unit tests, which often evaluate a transform
4
+
5
+ ---
6
+
7
+
8
+ for example
9
+
10
+
11
+ ```ts
12
+
13
+ const TEST_CASES = [
14
+ {
15
+ description: 'capitalizes the first word in a sentence',
16
+ given: {
17
+ input: 'the bird is in the basket',
18
+ },
19
+ expect: {
20
+ output: 'The bird is in the basket',
21
+ }
22
+ },
23
+ {
24
+ description: 'retains existing capitals in the sentence',
25
+ given: {
26
+ input: 'that Doctor Goose is a loon!',
27
+ },
28
+ expect: {
29
+ output: 'That Doctor Goose is a loon!',
30
+ }
31
+ },
32
+ ]
33
+
34
+ describe('asSentenceCase', () => {
35
+ TEST_CASES.map(thisCase => test(thisCase.description, () => {
36
+ const output = asSentenceCase(thisCase.given.input);
37
+ expect(output).toEqual(thisCase.expect.output);
38
+ }))
39
+ })
40
+
41
+ ```
@@ -0,0 +1,185 @@
1
+ # test-fns
2
+
3
+ ![ci_on_commit](https://github.com/ehmpathy/test-fns/workflows/ci_on_commit/badge.svg)
4
+ ![deploy_on_tag](https://github.com/ehmpathy/test-fns/workflows/deploy_on_tag/badge.svg)
5
+
6
+ write usecase driven tests systematically for simpler, safer, and more readable code
7
+
8
+ # purpose
9
+
10
+ establishes a pattern of writing tests for simpler, safer, and more readable code.
11
+
12
+ by defining tests in terms of usecases (`given`, `when`, `then`) your tests are
13
+ - simpler to write
14
+ - easier to read
15
+ - safer to trust
16
+
17
+ # install
18
+
19
+ ```sh
20
+ npm install --save test-fns
21
+ ```
22
+
23
+ # use
24
+
25
+ ```ts
26
+ type Plant = { id: number, hydration: 'DRY' | 'WET' };
27
+ const doesPlantNeedWater = (plant: Plant) => plant.hydration === 'DRY';
28
+
29
+ describe('doesPlantNeedWater', () => {
30
+ given('a plant', () => {
31
+ when('the plant doesnt have enough water', () => {
32
+ const plant: Plant = {
33
+ id: 7,
34
+ hydration: 'DRY',
35
+ };
36
+ then('it should return true', () => {
37
+ expect(doesPlantNeedWater(plant)).toEqual(true)
38
+ })
39
+ })
40
+ })
41
+ })
42
+ ```
43
+
44
+ produces
45
+
46
+ ```sh
47
+ PASS src/givenWhenThen.test.ts
48
+ doesPlantNeedWater
49
+ given: a plant
50
+ when: the plant doesnt have enough water
51
+ ✓ then: it should return true (1 ms)
52
+ ```
53
+
54
+ # features
55
+
56
+
57
+ ### .runIf(condition) && .skipIf(condition)
58
+
59
+ skip running the suite if the condition is not met
60
+
61
+ ```ts
62
+ describe('your test', () => {
63
+ given.runIf(onLocalMachine)('some test that should only run locally', () => {
64
+ then.skipIf(onProduction)('some test that should not run against production', () => {
65
+ expect(onProduction).toBeFalse()
66
+ })
67
+ })
68
+ })
69
+ ```
70
+
71
+ ### usePrep
72
+
73
+ prepare test scenarios within a .given/.when block asynchronously, without any `let`s or `beforeAll`s
74
+
75
+ `usePrep` accepts a `mode` option to control when setup runs:
76
+ - `mode: 'beforeAll'` - runs setup once for all tests (default)
77
+ - `mode: 'beforeEach'` - runs setup fresh before each test
78
+
79
+ ```ts
80
+ given('an overdue invoice', () => {
81
+ const invoice = usePrep(async () => {
82
+ const invoiceOverdue = await ... // your logic
83
+ return invoiceOverdue;
84
+ })
85
+
86
+ then('it should invoke a reminder', async () => {
87
+ const result = await nurtureInvoice({ invoice }, context)
88
+ expect(result.sent.reminder).toEqual(true)
89
+ })
90
+ })
91
+ ```
92
+
93
+ **useBeforeAll and useBeforeEach are convenience wrappers** around `usePrep`:
94
+ - `useBeforeAll(setup)` is equivalent to `usePrep(setup, { mode: 'beforeAll' })`
95
+ - `useBeforeEach(setup)` is equivalent to `usePrep(setup, { mode: 'beforeEach' })`
96
+
97
+ Use the named functions for clarity about when setup runs.
98
+
99
+ ### useBeforeAll
100
+
101
+ prepare test resources once for all tests in a suite, optimizing setup time for expensive operations
102
+
103
+ ```ts
104
+ describe('spaceship refueling system', () => {
105
+ given('a spaceship that needs to refuel', () => {
106
+ const spaceship = useBeforeAll(async () => {
107
+ // This runs once before all tests in this suite
108
+ const ship = await prepareExampleSpaceship();
109
+ await ship.dock();
110
+ return ship;
111
+ });
112
+
113
+ when('no changes are made', () => {
114
+ then('it should be docked', async () => {
115
+ expect(spaceship.isDocked).toEqual(true);
116
+ });
117
+
118
+ then('it should need fuel', async () => {
119
+ expect(spaceship.fuelLevel).toBeLessThan(spaceship.fuelCapacity);
120
+ });
121
+ });
122
+
123
+ when('it connects to the fuel station', () => {
124
+ const result = useBeforeAll(async () => await spaceship.connectToFuelStation());
125
+
126
+ then('it should be connected', async () => {
127
+ expect(result.connected).toEqual(true);
128
+ });
129
+
130
+ then('it should calculate required fuel', async () => {
131
+ expect(result.fuelNeeded).toBeGreaterThan(0);
132
+ });
133
+ });
134
+ });
135
+ });
136
+ ```
137
+
138
+ ### useBeforeEach
139
+
140
+ prepare fresh test resources before each test, ensuring test isolation
141
+
142
+ ```ts
143
+ describe('spaceship combat system', () => {
144
+ given('a spaceship in battle', () => {
145
+ // This runs before each test, ensuring a fresh spaceship
146
+ const spaceship = useBeforeEach(async () => {
147
+ const ship = await prepareExampleSpaceship();
148
+ await ship.resetShields();
149
+ return ship;
150
+ });
151
+
152
+ when('no changes are made', () => {
153
+ then('it should have full shields', async () => {
154
+ expect(spaceship.shields).toEqual(100);
155
+ });
156
+
157
+ then('it should be ready for combat', async () => {
158
+ expect(spaceship.status).toEqual('READY');
159
+ });
160
+ });
161
+
162
+ when('it takes damage', () => {
163
+ const result = useBeforeEach(async () => await spaceship.takeDamage(25));
164
+
165
+ then('it should reduce shield strength', async () => {
166
+ expect(spaceship.shields).toEqual(75);
167
+ });
168
+
169
+ then('it should return damage report', async () => {
170
+ expect(result.damageReceived).toEqual(25);
171
+ });
172
+ });
173
+ });
174
+ });
175
+ ```
176
+
177
+ **When to use each:**
178
+ - `useBeforeAll`: Use when setup is expensive (database connections, API calls) and tests don't modify the resource
179
+ - `useBeforeEach`: Use when tests modify the resource and need isolation between runs
180
+ - `usePrep`: The base function that powers both - use when you want explicit control over the mode or need to dynamically choose between `beforeAll` and `beforeEach`
181
+
182
+ **Key differences:**
183
+ - All three functions (`usePrep`, `useBeforeAll`, `useBeforeEach`) create a proxy that defers setup until the test framework's lifecycle hooks run
184
+ - `useBeforeAll` and `useBeforeEach` are just clearer, more readable shortcuts for `usePrep` with a specific mode
185
+ - Choose based on readability: use `useBeforeAll`/`useBeforeEach` for explicit intent, or `usePrep` when mode needs to be configurable
@@ -0,0 +1,23 @@
1
+ use snapshots whenever output artifacts are created
2
+
3
+ why?
4
+ - makes it easier to review in prs what is actually being produced
5
+ - e.g., visual spotcheck, make sure it looks good
6
+ - especially important when the output is userfacing (e.g., codegen, comms, etc)
7
+
8
+ - makes it easier to detect exactly what the impact of a change is
9
+ - most of the time its intended and the snapshot can just be updated
10
+ - sometimes though, the snapshot diff exposes critical differences that are blockers or nitpicks that need to be addressed
11
+
12
+
13
+ ---
14
+
15
+ critical:
16
+
17
+ use both
18
+ - a snapshot
19
+ - AND
20
+ - explicit assertions before the snapshot
21
+
22
+ snapshot is for observability in code reviews and aesthetic verification
23
+ assertions are for functional verification
@@ -0,0 +1 @@
1
+ practices on which terms to use to promote a ubiquitous language go here
@@ -0,0 +1,10 @@
1
+ never use the term `existing`; its a needless gerund
2
+
3
+ either
4
+ - foundBefore
5
+ - or
6
+ - foundAfter
7
+
8
+ or some nonGerund alternative
9
+
10
+ but never `existing`
@@ -0,0 +1,39 @@
1
+ always use [noun][adjective] order
2
+
3
+ e.g.,
4
+
5
+ instead of
6
+
7
+ currentOwner = [adj][noun]
8
+
9
+ prefer
10
+
11
+ ownerCurrent = [noun][adj]
12
+
13
+
14
+ ---
15
+
16
+ instead of
17
+
18
+
19
+ foundUser
20
+
21
+ prefer
22
+
23
+ userFound
24
+
25
+ ----
26
+
27
+
28
+ why?
29
+
30
+ because it enables autocomplete via common prefixes
31
+
32
+ e.g.,
33
+
34
+ userBefore
35
+ userAfter
36
+ userCreated
37
+ etc
38
+
39
+ can see via autocomplete suggestions all the variants of user available in the current scope, rather than need to remember what the variants are
@@ -0,0 +1,13 @@
1
+ these are the terms we use to describe how to use practices
2
+
3
+ forbid = search to ensure this was not done
4
+ - it's a bad practice
5
+ - it's a BLOCKER if detected
6
+
7
+ prefer = search for opportunities to do this
8
+ - it's a best practice, but not mandatory
9
+ - it's a NITPICK if detected
10
+
11
+ require = search for opportunities to do this
12
+ - it's a best practice, and is mandatory
13
+ - it's a BLOCKER if detected
@@ -0,0 +1,7 @@
1
+ prodcode = the product's code
2
+ - the code that produces the behavior users experience
3
+ - the code that gets shipped to production
4
+
5
+ testcode = the builder's code
6
+ - the code that verifies the behaviors users experience
7
+ - the code that runs at build time to protect production
@@ -0,0 +1,3 @@
1
+ briefs on what tones to use in writing goes here
2
+
3
+ tones impact how things are thought about, so they are important to curate
@@ -0,0 +1,29 @@
1
+ // style:tactics (compressed)
2
+
3
+ - name:ubiqlang
4
+ - use one canonical term per concept (e.g., always use `customer`, never `client`, `user`, or `account`)
5
+ - eliminate overloads: each term must refer to exactly one thing (e.g., do not use `update` for both "save" and "fetch")
6
+ - when introducing a new term:
7
+ - define its interface and role
8
+ - document its meaning clearly
9
+ - ensure consistent usage across code, docs, and tests
10
+
11
+ - name:treestruct
12
+ - for mechanisms (procedures, steps, transforms), use `[Verb][NounHierarchy]` format
13
+ - verb must come first and be atomic (e.g., `gen`, `set`, `get`, `map`, `submit`)
14
+ - examples: `genStepImagineViaTemplate`, `setCustomerPhone`
15
+ - for resources (records, results), use `[NounHierarchy][State]?` format
16
+ - `State` is optional and should clarify the form or phase (e.g., `Found`, `Updated`, `Draft`, `Final`)
17
+ - examples: `contentFound`, `invoiceDraft`, `customer`
18
+ - group nouns by domain to maintain treesorted file and symbol organization
19
+
20
+ - words:lowercase
21
+ - use lowercase for all non-code text (comments, prompts, markdown, logs)
22
+ - never capitalize:
23
+ - the start of a sentence
24
+ - generic nouns (`customer`, `step`)
25
+ - verbs (`set`, `submit`, `handle`)
26
+ - system messages or instructions
27
+ - only capitalize:
28
+ - code symbols (e.g., `StitchStepImagine`, `GitRepo`)
29
+ - proper nouns or brand names (e.g., OpenAI, GitHub)
@@ -0,0 +1,5 @@
1
+ compress these three style tactics for use in prompt context
2
+
3
+ retain references to the tactics each section came from, so that it can always be dereferenced
4
+
5
+ use outline form with each tactic a root bullet