rhachet-roles-ehmpathy 1.13.0 → 1.13.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_topublish/rhachet-roles-bhrain/src/domain/objects/Focus.d.ts +2 -2
- package/dist/contract/sdk/index.d.ts +1 -1
- package/dist/contract/sdk/index.js +3 -3
- package/dist/contract/sdk/index.js.map +1 -1
- package/dist/data/sdk/sdkOpenAi.d.ts +2 -2
- package/dist/domain/constants.d.ts +3 -0
- package/dist/domain/constants.js +5 -0
- package/dist/domain/constants.js.map +1 -0
- package/dist/logic/artifact/genLoopFeedback.d.ts +3 -3
- package/dist/logic/artifact/genStepArtDel.d.ts +4 -4
- package/dist/logic/artifact/genStepArtDel.js.map +1 -1
- package/dist/logic/artifact/genStepArtSet.d.ts +4 -4
- package/dist/logic/artifact/genStepArtSet.js.map +1 -1
- package/dist/logic/artifact/genStepGrabCallerFeedbackToArtifact.d.ts +4 -4
- package/dist/logic/artifact/genStepResetFeedback.d.ts +4 -4
- package/dist/logic/artifact/genStepResetFeedback.js.map +1 -1
- package/dist/logic/artifact/genStepSwapArtifact.d.ts +3 -3
- package/dist/logic/artifact/setSkillOutputSrc.d.ts +1 -1
- package/dist/logic/context/genStitchStreamToDisk.d.ts +1 -1
- package/dist/logic/context/genStitchStreamToDisk.js +1 -0
- package/dist/logic/context/genStitchStreamToDisk.js.map +1 -1
- package/dist/logic/hooks/execTranslateDocOutputPath.d.ts +2 -2
- package/dist/logic/hooks/getInvokeHooks.d.ts +1 -1
- package/dist/logic/roles/architect/getArchitectRole.d.ts +1 -1
- package/dist/logic/roles/architect/getArchitectRole.js.map +1 -1
- package/dist/logic/roles/bhrain/brief.articulate/stepArticulate.d.ts +6 -6
- package/dist/logic/roles/bhrain/brief.articulate/stepArticulate.js.map +1 -1
- package/dist/logic/roles/bhrain/brief.articulate/stepArticulate.skill.d.ts +1 -1
- package/dist/logic/roles/bhrain/brief.catalogize/stepCatalogize.d.ts +6 -6
- package/dist/logic/roles/bhrain/brief.catalogize/stepCatalogize.skill.d.ts +1 -1
- package/dist/logic/roles/bhrain/brief.demonstrate/stepDemonstrate.d.ts +6 -6
- package/dist/logic/roles/bhrain/brief.demonstrate/stepDemonstrate.js.map +1 -1
- package/dist/logic/roles/bhrain/brief.demonstrate/stepDemonstrate.skill.d.ts +1 -1
- package/dist/logic/roles/bhrain/getBhrainBrief.Options.codegen.d.ts +1 -1
- package/dist/logic/roles/bhrain/getBhrainBrief.d.ts +3 -3
- package/dist/logic/roles/bhrain/getBhrainBrief.js.map +1 -1
- package/dist/logic/roles/bhrain/getBhrainRole.d.ts +1 -1
- package/dist/logic/roles/bhrain/getBhrainRole.js.map +1 -1
- package/dist/logic/roles/bhrain/khue.cluster/stepCluster.d.ts +6 -6
- package/dist/logic/roles/bhrain/khue.cluster/stepCluster.js.map +1 -1
- package/dist/logic/roles/bhrain/khue.cluster/stepCluster.skill.d.ts +1 -1
- package/dist/logic/roles/bhrain/khue.diverge/stepDiverge.d.ts +6 -6
- package/dist/logic/roles/bhrain/khue.diverge/stepDiverge.js.map +1 -1
- package/dist/logic/roles/bhrain/khue.diverge/stepDiverge.skill.d.ts +1 -1
- package/dist/logic/roles/bhrain/khue.instantiate/stepInstantiate.d.ts +6 -6
- package/dist/logic/roles/bhrain/khue.instantiate/stepInstantiate.js.map +1 -1
- package/dist/logic/roles/bhrain/khue.instantiate/stepInstantiate.skill.d.ts +1 -1
- package/dist/logic/roles/bhrain/khue.instantiate/stepInstantiate.skill.js.map +1 -1
- package/dist/logic/roles/bhrain/khue.triage/stepTriage.d.ts +6 -6
- package/dist/logic/roles/bhrain/khue.triage/stepTriage.js.map +1 -1
- package/dist/logic/roles/bhrain/khue.triage/stepTriage.skill.d.ts +1 -1
- package/dist/logic/roles/designer/getDesignerBrief.Options.codegen.d.ts +1 -1
- package/dist/logic/roles/designer/getDesignerBrief.d.ts +3 -3
- package/dist/logic/roles/designer/getDesignerBrief.js.map +1 -1
- package/dist/logic/roles/designer/outlineDistilisys/loopOutlineDistilisys.d.ts +4 -4
- package/dist/logic/roles/designer/outlineDistilisys/stepOutlineDistilisys.d.ts +4 -4
- package/dist/logic/roles/designer/outlineDistilisys/stepOutlineDistilisys.js.map +1 -1
- package/dist/logic/roles/designer/outlineRoadmap/loopOutlineRoadmap.d.ts +4 -4
- package/dist/logic/roles/designer/outlineRoadmap/stepOutlineRoadmap.d.ts +4 -4
- package/dist/logic/roles/designer/outlineRoadmap/stepOutlineRoadmap.js.map +1 -1
- package/dist/logic/roles/ecologist/getEcologistBrief.Options.codegen.d.ts +1 -1
- package/dist/logic/roles/ecologist/getEcologistBrief.d.ts +3 -3
- package/dist/logic/roles/ecologist/getEcologistBrief.js.map +1 -1
- package/dist/logic/roles/ecologist/getEcologistRole.d.ts +1 -1
- package/dist/logic/roles/ecologist/getEcologistRole.js.map +1 -1
- package/dist/logic/roles/mechanic/codediff/getRefOrgPatterns.d.ts +2 -2
- package/dist/logic/roles/mechanic/codediff/routeArtistCodeDiff.d.ts +4 -4
- package/dist/logic/roles/mechanic/codediff/routeArtistCodeDiff.js.map +1 -1
- package/dist/logic/roles/mechanic/codediff/routeCriticCodeReview.d.ts +4 -4
- package/dist/logic/roles/mechanic/codediff/routeCriticCodeReviewArchitecture.d.ts +4 -4
- package/dist/logic/roles/mechanic/codediff/routeCriticCodeReviewArchitecture.js.map +1 -1
- package/dist/logic/roles/mechanic/codediff/routeCriticCodeReviewBehavior.d.ts +4 -4
- package/dist/logic/roles/mechanic/codediff/routeCriticCodeReviewBehavior.js.map +1 -1
- package/dist/logic/roles/mechanic/codediff/routeCriticCodeReviewCodestyle.d.ts +4 -4
- package/dist/logic/roles/mechanic/codediff/routeCriticCodeReviewCodestyle.js.map +1 -1
- package/dist/logic/roles/mechanic/codediff/routeJudgeReleasable.d.ts +4 -4
- package/dist/logic/roles/mechanic/codediff/routeJudgeReleasable.js.map +1 -1
- package/dist/logic/roles/mechanic/codediff/routeMechanicCodeIterate.d.ts +4 -4
- package/dist/logic/roles/mechanic/codediff/routeMechanicCodePropose.d.ts +5 -5
- package/dist/logic/roles/mechanic/getMechanicBrief.Options.codegen.d.ts +1 -1
- package/dist/logic/roles/mechanic/getMechanicBrief.d.ts +3 -3
- package/dist/logic/roles/mechanic/getMechanicBrief.js.map +1 -1
- package/dist/logic/roles/mechanic/getMechanicRole.d.ts +1 -1
- package/dist/logic/roles/mechanic/getMechanicRole.js.map +1 -1
- package/dist/logic/roles/mechanic/skills/getSkillCodePropose.d.ts +3 -2
- package/dist/logic/roles/mechanic/skills/getSkillCodePropose.js.map +1 -1
- package/dist/logic/roles/mechanic/study/routeStudyAsk.d.ts +4 -4
- package/dist/logic/roles/mechanic/study/routeStudyAsk.js.map +1 -1
- package/dist/logic/roles/mechanic/write/loopWrite.d.ts +1 -1
- package/dist/logic/roles/mechanic/write/loopWrite.skill.d.ts +1 -1
- package/dist/logic/roles/mechanic/write/loopWrite.skill.js.map +1 -1
- package/dist/logic/roles/mechanic/write/stepWrite.d.ts +4 -4
- package/dist/logic/roles/mechanic/write/stepWrite.js.map +1 -1
- package/dist/logic/roles/terminal.commander/command.exec/stepExecCommand.d.ts +4 -4
- package/dist/logic/roles/terminal.commander/command.exec/stepExecCommand.js.map +1 -1
- package/dist/logic/roles/terminal.commander/command.exec/stepExecCommand.skill.d.ts +1 -1
- package/dist/logic/roles/terminal.commander/command.plan/stepPlanCommand.d.ts +6 -6
- package/dist/logic/roles/terminal.commander/command.plan/stepPlanCommand.skill.d.ts +1 -1
- package/dist/logic/roles/terminal.commander/getCommanderRole.d.ts +1 -1
- package/dist/logic/roles/terminal.commander/getCommanderRole.js.map +1 -1
- package/license.md +21 -0
- package/package.json +38 -38
- package/dist/contract/cases/mechanicGoalStubout.integration.test.d.ts +0 -0
- package/dist/contract/cases/mechanicGoalStubout.integration.test.js +0 -2
- package/dist/contract/cases/mechanicGoalStubout.integration.test.js.map +0 -1
- package/dist/contract/cases/mechanicStubFillout.integration.test.d.ts +0 -0
- package/dist/contract/cases/mechanicStubFillout.integration.test.js +0 -2
- package/dist/contract/cases/mechanicStubFillout.integration.test.js.map +0 -1
- package/dist/logic/artifact/genStepArtSet.integration.test.d.ts +0 -1
- package/dist/logic/artifact/genStepArtSet.integration.test.js +0 -142
- package/dist/logic/artifact/genStepArtSet.integration.test.js.map +0 -1
- package/dist/logic/artifact/genStepGrabCallerFeedbackToArtifact.integration.test.d.ts +0 -1
- package/dist/logic/artifact/genStepGrabCallerFeedbackToArtifact.integration.test.js +0 -97
- package/dist/logic/artifact/genStepGrabCallerFeedbackToArtifact.integration.test.js.map +0 -1
- package/dist/logic/artifact/genStepSwapArtifact.test.d.ts +0 -1
- package/dist/logic/artifact/genStepSwapArtifact.test.js +0 -131
- package/dist/logic/artifact/genStepSwapArtifact.test.js.map +0 -1
- package/dist/logic/hooks/decodeDocOutputPath.test.d.ts +0 -1
- package/dist/logic/hooks/decodeDocOutputPath.test.js +0 -146
- package/dist/logic/hooks/decodeDocOutputPath.test.js.map +0 -1
- package/dist/logic/hooks/execTranslateDocOutputPath.test.d.ts +0 -1
- package/dist/logic/hooks/execTranslateDocOutputPath.test.js +0 -528
- package/dist/logic/hooks/execTranslateDocOutputPath.test.js.map +0 -1
- package/dist/logic/hooks/relateDocOutputPath.test.d.ts +0 -1
- package/dist/logic/hooks/relateDocOutputPath.test.js +0 -111
- package/dist/logic/hooks/relateDocOutputPath.test.js.map +0 -1
- package/dist/logic/roles/architect/.briefs/criteria.given_when_then.[seed].v3.md +0 -87
- package/dist/logic/roles/architect/.briefs/practices/prefer.env_access.prep_over_dev.md +0 -12
- package/dist/logic/roles/architect/.briefs/ubiqlang.ambiguous-from-overload.md +0 -1
- package/dist/logic/roles/bhrain/.briefs/cognition/cog000.overview.and.premise.md +0 -115
- package/dist/logic/roles/bhrain/.briefs/cognition/cog021.coordinates.spherical.md +0 -69
- package/dist/logic/roles/bhrain/.briefs/cognition/cog021.metaphor.cauliflorous.md +0 -44
- package/dist/logic/roles/bhrain/.briefs/cognition/cog021.metaphor.galactic_spacetravel.[article].md +0 -42
- package/dist/logic/roles/bhrain/.briefs/cognition/cog021.metaphor.galactic_spacetravel.[lesson].md +0 -60
- package/dist/logic/roles/bhrain/.briefs/cognition/cog021.structs.catalog.md +0 -51
- package/dist/logic/roles/bhrain/.briefs/cognition/cog021.structs.treestruct.md +0 -85
- package/dist/logic/roles/bhrain/.briefs/cognition/cog021.structs.vector.md +0 -112
- package/dist/logic/roles/bhrain/.briefs/cognition/cog101.concept.definition.md +0 -115
- package/dist/logic/roles/bhrain/.briefs/cognition/cog101.concept.treestruct._.md +0 -112
- package/dist/logic/roles/bhrain/.briefs/cognition/cog101.concept.treestruct.coords.1.spherical.md +0 -80
- package/dist/logic/roles/bhrain/.briefs/cognition/cog101.concept.treestruct.coords.2.abstractive.md +0 -59
- package/dist/logic/roles/bhrain/.briefs/cognition/cog101.concept.treestruct.coords.3.descriptive.md +0 -64
- package/dist/logic/roles/bhrain/.briefs/cognition/cog101.concept.treestruct.persp.1.perspectives.md +0 -88
- package/dist/logic/roles/bhrain/.briefs/cognition/cog101.concept.treestruct.persp.2.universal.md +0 -82
- package/dist/logic/roles/bhrain/.briefs/cognition/cog101.concept.treestruct.persp.3.relative.md +0 -106
- package/dist/logic/roles/bhrain/.briefs/cognition/cog101.concept.treestruct.persp.4.fractal.md +0 -83
- package/dist/logic/roles/bhrain/.briefs/cognition/cog151.concept.treestruct.gravity.md +0 -89
- package/dist/logic/roles/bhrain/.briefs/cognition/cog201.cortal.focus.p1.definition.md +0 -231
- package/dist/logic/roles/bhrain/.briefs/cognition/cog201.cortal.focus.p1.examples.cont.md +0 -82
- package/dist/logic/roles/bhrain/.briefs/cognition/cog201.cortal.focus.p2.acuity.md +0 -134
- package/dist/logic/roles/bhrain/.briefs/cognition/cog201.cortal.focus.p2.breadth.md +0 -151
- package/dist/logic/roles/bhrain/.briefs/cognition/cog201.cortal.focus.p2.depth.md +0 -147
- package/dist/logic/roles/bhrain/.briefs/cognition/cog251.cortal.focus.p3.fabric.md +0 -96
- package/dist/logic/roles/bhrain/.briefs/cognition/cog251.cortal.focus.p3.mode.md +0 -68
- package/dist/logic/roles/bhrain/.briefs/cognition/cog251.cortal.focus.p3.rythm.md +0 -56
- package/dist/logic/roles/bhrain/.briefs/cognition/cog251.cortal.focus.p3.usecases.md +0 -76
- package/dist/logic/roles/bhrain/.briefs/cognition/cog301.traversal.1.motion.primitives._.md +0 -155
- package/dist/logic/roles/bhrain/.briefs/cognition/cog301.traversal.1.motion.primitives.acuity.md +0 -94
- package/dist/logic/roles/bhrain/.briefs/cognition/cog301.traversal.1.motion.primitives.breadth.md +0 -114
- package/dist/logic/roles/bhrain/.briefs/cognition/cog301.traversal.1.motion.primitives.breadth.vary.md +0 -105
- package/dist/logic/roles/bhrain/.briefs/cognition/cog301.traversal.1.motion.primitives.depth.md +0 -132
- package/dist/logic/roles/bhrain/.briefs/cognition/cog301.traversal.2.motion.composites._.md +0 -106
- package/dist/logic/roles/bhrain/.briefs/cognition/cog301.traversal.2.motion.composites.grammar.md +0 -105
- package/dist/logic/roles/bhrain/.briefs/cognition/cog401.questions.._.md +0 -209
- package/dist/logic/roles/bhrain/.briefs/cognition/cog401.questions.1.persp.as.berries.md +0 -168
- package/dist/logic/roles/bhrain/.briefs/cognition/cog401.questions.1.persp.as.vectors.md +0 -74
- package/dist/logic/roles/bhrain/.briefs/cognition/cog401.questions.1.persp.has.precision.tunable.md +0 -80
- package/dist/logic/roles/bhrain/.briefs/cognition/cog401.questions.2.1.primitives.rough._.md +0 -99
- package/dist/logic/roles/bhrain/.briefs/cognition/cog401.questions.2.1.primitives.rough.interrogative.md +0 -108
- package/dist/logic/roles/bhrain/.briefs/cognition/cog401.questions.2.1.primitives.rough.why.[article].md +0 -55
- package/dist/logic/roles/bhrain/.briefs/cognition/cog401.questions.2.2.composite.smooth._.md +0 -83
- package/dist/logic/roles/bhrain/.briefs/cognition/cog401.questions.2.2.composite.smooth.examples.md +0 -101
- package/dist/logic/roles/bhrain/.briefs/cognition/cog501.cortal.assemblylang.1.primitives._.md +0 -134
- package/dist/logic/roles/bhrain/.briefs/cognition/cog501.cortal.assemblylang.1.primitives.recall.md +0 -149
- package/dist/logic/roles/bhrain/.briefs/cognition/cog501.cortal.assemblylang.1.primitives.steer.md +0 -146
- package/dist/logic/roles/bhrain/.briefs/cognition/cog501.cortal.assemblylang.1.primitives.think.md +0 -141
- package/dist/logic/roles/bhrain/.briefs/cognition/cog501.cortal.assemblylang.2.composites.zoom.md +0 -127
- package/dist/logic/roles/bhrain/.briefs/cognition/cog501.cortal.assemblylang.3.catalogs.md +0 -107
- package/dist/logic/roles/bhrain/.briefs/cognition/cog501.cortal.assemblylang.3.grammar.md +0 -124
- package/dist/logic/roles/bhrain/.briefs/cognition/cog501.cortal.assemblylang_.md +0 -0
- package/dist/logic/roles/bhrain/.briefs/cognition/inflight/concept.vs.idea.md +0 -70
- package/dist/logic/roles/bhrain/.briefs/cognition/inflight/core.concept.adjectives.md +0 -8
- package/dist/logic/roles/bhrain/.briefs/distilisys.grammar.compressed.md +0 -19
- package/dist/logic/roles/bhrain/.briefs/grammar/gerunds.1.why.common.[article].md +0 -32
- package/dist/logic/roles/bhrain/.briefs/grammar/gerunds.1.why.term_smells.[article].md +0 -36
- package/dist/logic/roles/bhrain/.briefs/grammar/gerunds.1.why.term_smells.detection.[lesson].md +0 -73
- package/dist/logic/roles/bhrain/.briefs/grammar/gerunds.2.tactic.eliminate.[article].md +0 -55
- package/dist/logic/roles/bhrain/.briefs/grammar/gerunds.2.tactic.eliminate.[lesson].md +0 -41
- package/dist/logic/roles/bhrain/.briefs/grammar/gerunds.3.eliminator.[trait]._.md +0 -66
- package/dist/logic/roles/bhrain/.briefs/grammar/gerunds.3.eliminator.[trait].balance.md +0 -36
- package/dist/logic/roles/bhrain/.briefs/grammar/gerunds.3.eliminator.[trait].bane.md +0 -34
- package/dist/logic/roles/bhrain/.briefs/grammar/gerunds.3.eliminator.[trait].boon.md +0 -35
- package/dist/logic/roles/bhrain/.briefs/knowledge/kno101.primitives.1.ontology.[article].frame.docs_as_materializations.md +0 -63
- package/dist/logic/roles/bhrain/.briefs/knowledge/kno101.primitives.1.ontology.[article].frame.docs_as_references.md +0 -45
- package/dist/logic/roles/bhrain/.briefs/knowledge/kno101.primitives.2.rel.many_to_many.[article].md +0 -37
- package/dist/logic/roles/bhrain/.briefs/knowledge/kno101.primitives.3.instances.[article].md +0 -39
- package/dist/logic/roles/bhrain/.briefs/knowledge/kno101.primitives.4.documents.[article].md +0 -37
- package/dist/logic/roles/bhrain/.briefs/knowledge/kno101.primitives.5.concepts.[article].md +0 -39
- package/dist/logic/roles/bhrain/.briefs/knowledge/kno201.documents._.[article].md +0 -48
- package/dist/logic/roles/bhrain/.briefs/knowledge/kno201.documents._.[catalog].md +0 -52
- package/dist/logic/roles/bhrain/.briefs/knowledge/kno201.documents.articles.[article].md +0 -40
- package/dist/logic/roles/bhrain/.briefs/knowledge/kno201.documents.catalogs.[article].md +0 -41
- package/dist/logic/roles/bhrain/.briefs/knowledge/kno201.documents.demos.[article].md +0 -42
- package/dist/logic/roles/bhrain/.briefs/knowledge/kno201.documents.lessons.[article].md +0 -42
- package/dist/logic/roles/bhrain/.briefs/knowledge/kno301.doc.compression.1.refs._.[article].md +0 -41
- package/dist/logic/roles/bhrain/.briefs/knowledge/kno301.doc.compression.2.kernels._.[article].i1.md +0 -50
- package/dist/logic/roles/bhrain/.briefs/knowledge/kno301.doc.compression.3.briefs._.[article].md +0 -40
- package/dist/logic/roles/bhrain/.briefs/knowledge/kno301.doc.compression._.[article].md +0 -90
- package/dist/logic/roles/bhrain/.briefs/knowledge/kno301.doc.compression._.[catalog].persp.garden.md +0 -64
- package/dist/logic/roles/bhrain/.briefs/knowledge/kno301.doc.enbrief.1.from_instances.[article].md +0 -45
- package/dist/logic/roles/bhrain/.briefs/knowledge/kno301.doc.enbrief.1.from_instances.[demo].algorithm.md +0 -54
- package/dist/logic/roles/bhrain/.briefs/knowledge/kno301.doc.enbrief.1.from_instances.[demo].color.md +0 -56
- package/dist/logic/roles/bhrain/.briefs/knowledge/kno301.doc.enbrief.1.from_instances.[demo].empathy.md +0 -54
- package/dist/logic/roles/bhrain/.briefs/knowledge/kno301.doc.enbrief.1.from_instances.[demo].entropy.md +0 -54
- package/dist/logic/roles/bhrain/.briefs/knowledge/kno301.doc.enbrief.1.from_instances.[demo].gravity.md +0 -54
- package/dist/logic/roles/bhrain/.briefs/knowledge/kno301.doc.enbrief.1.from_instances.[demo].joke.md +0 -56
- package/dist/logic/roles/bhrain/.briefs/knowledge/kno301.doc.enbrief.1.from_instances.[demo].value.md +0 -54
- package/dist/logic/roles/bhrain/.briefs/knowledge/kno301.doc.enbrief.2._.[catalog].md +0 -43
- package/dist/logic/roles/bhrain/.briefs/knowledge/kno301.doc.enbrief.2.articulate.[article].md +0 -27
- package/dist/logic/roles/bhrain/.briefs/knowledge/kno301.doc.enbrief.2.articulate.[lesson].md +0 -49
- package/dist/logic/roles/bhrain/.briefs/knowledge/kno301.doc.enbrief.2.catalogize.[article].md +0 -27
- package/dist/logic/roles/bhrain/.briefs/knowledge/kno301.doc.enbrief.2.catalogize.[lesson].md +0 -54
- package/dist/logic/roles/bhrain/.briefs/knowledge/kno301.doc.enbrief.2.demonstrate.[article].md +0 -26
- package/dist/logic/roles/bhrain/.briefs/knowledge/kno301.doc.enbrief.2.demonstrate.[lesson].md +0 -49
- package/dist/logic/roles/bhrain/.briefs/knowledge/kno301.doc.enbrief.2.lessonize.[article].md +0 -26
- package/dist/logic/roles/bhrain/.briefs/knowledge/kno301.doc.enbrief.2.lessonize.[lesson].md +0 -54
- package/dist/logic/roles/bhrain/.briefs/knowledge/kno301.doc.kernelize._.[article].md +0 -58
- package/dist/logic/roles/bhrain/.briefs/knowledge/kno301.doc.kernelize._.[lesson].md +0 -88
- package/dist/logic/roles/bhrain/.briefs/knowledge/kno351.docs.are_instances.[article].md +0 -34
- package/dist/logic/roles/bhrain/.briefs/knowledge/kno351.docs.recursion.[catalog].md +0 -44
- package/dist/logic/roles/bhrain/.briefs/knowledge/kno401.actors.1.role.author.[article].md +0 -36
- package/dist/logic/roles/bhrain/.briefs/knowledge/kno401.actors.1.role.librarian.[article].md +0 -40
- package/dist/logic/roles/bhrain/.briefs/knowledge/kno401.actors.2.interdependence.[article].md +0 -52
- package/dist/logic/roles/bhrain/.briefs/knowledge/kno501.doc.enbrief.catalog.structure1.[article].md +0 -53
- package/dist/logic/roles/bhrain/.briefs/knowledge/kno501.doc.enbrief.catalog.structure1.[lesson].template.md +0 -101
- package/dist/logic/roles/bhrain/.briefs/librarian.context/article.variant.vision.[article].md +0 -60
- package/dist/logic/roles/bhrain/.briefs/librarian.context/term.expectation.vs_assumption._.md +0 -60
- package/dist/logic/roles/bhrain/.briefs/librarian.context/term.frame.vs_perspective.[article].md +0 -96
- package/dist/logic/roles/bhrain/.briefs/librarian.context/term.invariant.[article].md +0 -29
- package/dist/logic/roles/bhrain/.briefs/librarian.context/term.lesson._vs_article.[article].md +0 -36
- package/dist/logic/roles/bhrain/.briefs/librarian.context/term.ref._vs_brief.md +0 -90
- package/dist/logic/roles/bhrain/.briefs/librarian.context/term.referent.[article].md +0 -43
- package/dist/logic/roles/bhrain/.briefs/librarian.context/usage.lesson_vs_article.[lesson].md +0 -31
- package/dist/logic/roles/bhrain/.briefs/librarian.context/usage.lesson_vs_article_vs_demo.[lesson].md +0 -37
- package/dist/logic/roles/bhrain/.briefs/librarian.tactics/.readme.md +0 -12
- package/dist/logic/roles/bhrain/.briefs/librarian.tactics/<articulate>._.[article].frame.cognitive.md +0 -33
- package/dist/logic/roles/bhrain/.briefs/librarian.tactics/<articulate>._.[article].frame.tactical.md +0 -45
- package/dist/logic/roles/bhrain/.briefs/librarian.tactics/<articulate>.tactic.[catalog].md +0 -83
- package/dist/logic/roles/bhrain/.briefs/librarian.tactics/<articulate>.tactic.concept_dimension.examples.[article][seed].md +0 -4
- package/dist/logic/roles/bhrain/.briefs/librarian.tactics/<articulate>.tactic.concept_dimension.invariants.[article].md +0 -36
- package/dist/logic/roles/bhrain/.briefs/librarian.tactics/<articulate>.tactic.from.examples.md +0 -44
- package/dist/logic/roles/bhrain/.briefs/librarian.tactics/<articulate>.tactic.from.seed.md +0 -48
- package/dist/logic/roles/bhrain/.briefs/librarian.tactics/<articulate>.tactic.with.templates.[article].md +0 -57
- package/dist/logic/roles/bhrain/.briefs/librarian.tactics/<articulate>.tactic.with.templates.[gallery][review].effective.md +0 -1
- package/dist/logic/roles/bhrain/.briefs/librarian.tactics/<articulate>.tone.bluecollar.[article][seed].md +0 -5
- package/dist/logic/roles/bhrain/.briefs/librarian.tactics/<catalogize>._.[article][seed].md +0 -3
- package/dist/logic/roles/bhrain/.briefs/librarian.tactics/<catalogize>.observation.via_clusterage_over_via_imagination.[seed].md +0 -6
- package/dist/logic/roles/bhrain/.briefs/librarian.tactics/<catalogize>.vs_diverge.[article].persp.save_compute.md +0 -46
- package/dist/logic/roles/bhrain/.briefs/librarian.tactics/<demonstrate>._.[article].frame.colloquial.i2.by_grok.md +0 -64
- package/dist/logic/roles/bhrain/.briefs/librarian.tactics/<demonstrate>.variants.[catalog].md +0 -106
- package/dist/logic/roles/bhrain/.briefs/librarian.tactics/<demonstrate>.variants.contrast.[demo].usecase.vs_userjourney.by_chatgpt.md +0 -45
- package/dist/logic/roles/bhrain/.briefs/librarian.tactics/<demonstrate>.variants.counter.[demo].usecase.flyer.by_chargpt.md +0 -38
- package/dist/logic/roles/bhrain/.briefs/librarian.tactics/<demonstrate>.variants.counter.[demo].walkability.phoenix.by_chargpt.md +0 -41
- package/dist/logic/roles/bhrain/.briefs/librarian.tactics/<demonstrate>.variants.example.[demo].shear_force.scissors.by_grok.md +0 -52
- package/dist/logic/roles/bhrain/.briefs/librarian.tactics/<demonstrate>.variants.example.[demo].tea.darjeeling.by_grok.md +0 -50
- package/dist/logic/roles/bhrain/.briefs/librarian.tactics/<demonstrate>.variants.example.[demo].usecase.book_flight.by_grok.md +0 -54
- package/dist/logic/roles/bhrain/.briefs/librarian.tactics/<demonstrate>.variants.example.[demo].usecase.order_food.by_chatgpt.md +0 -40
- package/dist/logic/roles/bhrain/.briefs/librarian.tactics/<demonstrate>.variants.example.[demo].walkability.portland.by_chatgpt.i3.md +0 -42
- package/dist/logic/roles/bhrain/.briefs/librarian.tactics/<demonstrate>.variants.example.[demo].walkability.portland.by_grok.i2.md +0 -49
- package/dist/logic/roles/bhrain/.briefs/librarian.tactics/<demonstrate>.variants.example.[lesson].howto.md +0 -28
- package/dist/logic/roles/bhrain/.briefs/librarian.tactics/<demonstrate>.variants.example.structure.[article].i2.md +0 -73
- package/dist/logic/roles/bhrain/.briefs/librarian.tactics/<demonstrate>.variants.narrative.[demo].usecase.order_online.by_chatgpt.md +0 -34
- package/dist/logic/roles/bhrain/.briefs/librarian.tactics/<demonstrate>.variants.walkthrough.[demo].usecase.book_online.by_chatgpt.md +0 -47
- package/dist/logic/roles/bhrain/.briefs/librarian.tactics/[brief].verbiage.outline.over.narrative.md +0 -55
- package/dist/logic/roles/bhrain/.briefs/logistics/term.logistics.[article].md +0 -21
- package/dist/logic/roles/bhrain/.briefs/logistics/term.logistics.of_information.[article].md +0 -22
- package/dist/logic/roles/bhrain/.briefs/logistics/term.logistics.of_knowledge.[article].md +0 -29
- package/dist/logic/roles/bhrain/.briefs/physics/optics.focal.acuity.md +0 -77
- package/dist/logic/roles/bhrain/.briefs/physics/optics.focal.breadth.md +0 -74
- package/dist/logic/roles/bhrain/.briefs/physics/optics.focal.depth.md +0 -77
- package/dist/logic/roles/bhrain/.briefs/physics/optics.focal.distance.md +0 -92
- package/dist/logic/roles/bhrain/.briefs/physics/optics.focal.tradeoffs.md +0 -107
- package/dist/logic/roles/bhrain/.briefs/tactician/tactics.compose.traits_and_skills.[article].md +0 -76
- package/dist/logic/roles/bhrain/.briefs/tactician/trait.articulation.[article].md +0 -67
- package/dist/logic/roles/bhrain/.briefs/tactician/trait.purpose.[article].md +0 -56
- package/dist/logic/roles/bhrain/.briefs/tactician/trait.vs_skill.[article].md +0 -55
- package/dist/logic/roles/bhrain/.briefs/tactician/trait.vs_tactic.[article].md +0 -70
- package/dist/logic/roles/bhrain/.briefs/terms.motive.intent.goal.md +0 -46
- package/dist/logic/roles/bhrain/.briefs/thinker.tactics/<cluster>._.[article].frame.tactical._.md +0 -85
- package/dist/logic/roles/bhrain/.briefs/thinker.tactics/<cluster>.vs_<diverge>.duality.[article].md +0 -43
- package/dist/logic/roles/bhrain/.briefs/thinker.tactics/<diverge>._.[article].frame.cognitive.[seed].md +0 -4
- package/dist/logic/roles/bhrain/.briefs/thinker.tactics/<diverge>._.[article].frame.tactical.md +0 -89
- package/dist/logic/roles/bhrain/.briefs/thinker.tactics/<elaborate>_vs_<elucidate>.[seed].md +0 -1
- package/dist/logic/roles/bhrain/.briefs/thinker.tactics/<enquestion>._.[article].md +0 -113
- package/dist/logic/roles/bhrain/.briefs/thinker.tactics/<enquestion>._.[gallery].plumber.diagnose.md +0 -130
- package/dist/logic/roles/bhrain/.briefs/thinker.tactics/<enquestion>._.[gallery].thinker.enquestion.md +0 -125
- package/dist/logic/roles/bhrain/.briefs/thinker.tactics/<enquestion>.tactic.perspectives.[article].md +0 -36
- package/dist/logic/roles/bhrain/.briefs/thinker.tactics/<triage>._.[article].frame.tactical.md +0 -85
- package/dist/logic/roles/bhrain/.briefs/thinker.tactics/<triage>.persp.grades_from_context.[article].md +0 -48
- package/dist/logic/roles/bhrain/.briefs/thinker.tactics/<triage>.persp.implicit_question.[article].md +0 -65
- package/dist/logic/roles/bhrain/.briefs/trait.chillnature.md +0 -14
- package/dist/logic/roles/bhrain/.briefs/trait.ocd.md +0 -5
- package/dist/logic/roles/bhrain/.briefs/worders/core.matmuls_vecmuls_elemuls.md +0 -93
- package/dist/logic/roles/bhrain/.briefs/worders/core.transformers.as_origin.md +0 -62
- package/dist/logic/roles/bhrain/.briefs/worders/core.transformers.self_attention.[article].md +0 -93
- package/dist/logic/roles/bhrain/.briefs/worders/core.transformers.self_attention.[demo].ambig.bank.md +0 -80
- package/dist/logic/roles/bhrain/.briefs/worders/core.transformers.self_attention.[demo].cat_sat.md +0 -67
- package/dist/logic/roles/bhrain/.briefs/worders/force.repeat_input_structures.md +0 -48
- package/dist/logic/roles/bhrain/.briefs/worders/knowledge.interdependence.[article].md +0 -37
- package/dist/logic/roles/bhrain/.briefs/worders/knowledge.interdependence.[demo].domain.physics.md +0 -30
- package/dist/logic/roles/bhrain/.briefs/worders/knowledge.internal_vs_external.[article].artist_vs_librarian.md +0 -44
- package/dist/logic/roles/bhrain/.briefs/worders/knowledge.internal_vs_external.[demo].artist_vs_librarian.md +0 -37
- package/dist/logic/roles/bhrain/.briefs/worders/knowledge.internal_vs_external.[demo].domain.physics.md +0 -39
- package/dist/logic/roles/bhrain/.briefs/worders/knowledge.internalized.[article].md +0 -35
- package/dist/logic/roles/bhrain/.briefs/worders/knowledge.internalized.[demo].artist.md +0 -36
- package/dist/logic/roles/bhrain/.briefs/worders/knowledge.internalized.[demo].neural.md +0 -37
- package/dist/logic/roles/bhrain/.briefs/worders/knowledge.internalized.[demo].pianist.md +0 -34
- package/dist/logic/roles/bhrain/.briefs/worders/limits.rhyme.md +0 -46
- package/dist/logic/roles/bhrain/.briefs/worders/limits.spell.md +0 -49
- package/dist/logic/roles/bhrain/.briefs/worders/teach.via.library.examples.md +0 -28
- package/dist/logic/roles/bhrain/.briefs/worders/teach.via.library.explanations_vs_examples.md +0 -40
- package/dist/logic/roles/bhrain/.briefs/worders/trend.prefer_reuse.[seed].md +0 -10
- package/dist/logic/roles/bhrain/brief.articulate/stepArticulate.integration.test.d.ts +0 -1
- package/dist/logic/roles/bhrain/brief.articulate/stepArticulate.integration.test.js +0 -92
- package/dist/logic/roles/bhrain/brief.articulate/stepArticulate.integration.test.js.map +0 -1
- package/dist/logic/roles/bhrain/brief.articulate/stepArticulate.template.md +0 -120
- package/dist/logic/roles/bhrain/brief.catalogize/stepCatalogize.integration.test.d.ts +0 -1
- package/dist/logic/roles/bhrain/brief.catalogize/stepCatalogize.integration.test.js +0 -118
- package/dist/logic/roles/bhrain/brief.catalogize/stepCatalogize.integration.test.js.map +0 -1
- package/dist/logic/roles/bhrain/brief.demonstrate/stepDemonstrate.integration.test.d.ts +0 -1
- package/dist/logic/roles/bhrain/brief.demonstrate/stepDemonstrate.integration.test.js +0 -119
- package/dist/logic/roles/bhrain/brief.demonstrate/stepDemonstrate.integration.test.js.map +0 -1
- package/dist/logic/roles/bhrain/brief.demonstrate/stepDemonstrate.template.md +0 -135
- package/dist/logic/roles/bhrain/khue.cluster/stepCluster.integration.test.d.ts +0 -1
- package/dist/logic/roles/bhrain/khue.cluster/stepCluster.integration.test.js +0 -140
- package/dist/logic/roles/bhrain/khue.cluster/stepCluster.integration.test.js.map +0 -1
- package/dist/logic/roles/bhrain/khue.cluster/stepCluster.template.md +0 -134
- package/dist/logic/roles/bhrain/khue.diverge/stepDiverge.integration.test.d.ts +0 -1
- package/dist/logic/roles/bhrain/khue.diverge/stepDiverge.integration.test.js +0 -115
- package/dist/logic/roles/bhrain/khue.diverge/stepDiverge.integration.test.js.map +0 -1
- package/dist/logic/roles/bhrain/khue.diverge/stepDiverge.template.md +0 -110
- package/dist/logic/roles/bhrain/khue.instantiate/stepInstantiate.integration.test.d.ts +0 -1
- package/dist/logic/roles/bhrain/khue.instantiate/stepInstantiate.integration.test.js +0 -119
- package/dist/logic/roles/bhrain/khue.instantiate/stepInstantiate.integration.test.js.map +0 -1
- package/dist/logic/roles/bhrain/khue.instantiate/stepInstantiate.template.md +0 -73
- package/dist/logic/roles/bhrain/khue.triage/stepTriage.integration.test.d.ts +0 -1
- package/dist/logic/roles/bhrain/khue.triage/stepTriage.integration.test.js +0 -143
- package/dist/logic/roles/bhrain/khue.triage/stepTriage.integration.test.js.map +0 -1
- package/dist/logic/roles/bhrain/khue.triage/stepTriage.template.md +0 -128
- package/dist/logic/roles/coach/.briefs/claude.context-caching.md +0 -76
- package/dist/logic/roles/designer/.briefs/declarative-over-imperative.md +0 -79
- package/dist/logic/roles/designer/.briefs/declarative-over-imperative.stub.md +0 -14
- package/dist/logic/roles/designer/.briefs/pit-of-success.md +0 -70
- package/dist/logic/roles/designer/.briefs/pit-of-success.stub.md +0 -3
- package/dist/logic/roles/designer/outlineDistilisys/loopOutlineDistilisys.integration.test.d.ts +0 -1
- package/dist/logic/roles/designer/outlineDistilisys/loopOutlineDistilisys.integration.test.js +0 -77
- package/dist/logic/roles/designer/outlineDistilisys/loopOutlineDistilisys.integration.test.js.map +0 -1
- package/dist/logic/roles/designer/outlineDistilisys/stepOutlineDistilisys.integration.test.d.ts +0 -1
- package/dist/logic/roles/designer/outlineDistilisys/stepOutlineDistilisys.integration.test.js +0 -142
- package/dist/logic/roles/designer/outlineDistilisys/stepOutlineDistilisys.integration.test.js.map +0 -1
- package/dist/logic/roles/designer/outlineDistilisys/stepOutlineDistilisys.template.md +0 -173
- package/dist/logic/roles/designer/outlineRoadmap/loopOutlineRoadmap.integration.test.d.ts +0 -1
- package/dist/logic/roles/designer/outlineRoadmap/loopOutlineRoadmap.integration.test.js +0 -71
- package/dist/logic/roles/designer/outlineRoadmap/loopOutlineRoadmap.integration.test.js.map +0 -1
- package/dist/logic/roles/designer/outlineRoadmap/stepOutlineRoadmap.integration.test.d.ts +0 -1
- package/dist/logic/roles/designer/outlineRoadmap/stepOutlineRoadmap.integration.test.js +0 -130
- package/dist/logic/roles/designer/outlineRoadmap/stepOutlineRoadmap.integration.test.js.map +0 -1
- package/dist/logic/roles/designer/outlineRoadmap/stepOutlineRoadmap.template.md +0 -88
- package/dist/logic/roles/designer/outlineVision/stepOutlineVision.template.md +0 -47
- package/dist/logic/roles/ecologist/.briefs/.readme.md +0 -17
- package/dist/logic/roles/ecologist/.briefs/distilisys/sys101.distilisys.grammar.md +0 -221
- package/dist/logic/roles/ecologist/.briefs/distilisys/sys201.actor.motive._.summary.md +0 -82
- package/dist/logic/roles/ecologist/.briefs/distilisys/sys201.actor.motive.p1.reversibility.entropy.md +0 -39
- package/dist/logic/roles/ecologist/.briefs/distilisys/sys201.actor.motive.p2.option.chance.choice.md +0 -140
- package/dist/logic/roles/ecologist/.briefs/distilisys/sys201.actor.motive.p3.chance.motive.polarity.threat.md +0 -72
- package/dist/logic/roles/ecologist/.briefs/distilisys/sys201.actor.motive.p4.motive.horizon.md +0 -101
- package/dist/logic/roles/ecologist/.briefs/distilisys/sys201.actor.motive.p5.motive.grammar.md +0 -131
- package/dist/logic/roles/ecologist/.briefs/distilisys/sys211.actor.resources._.primitives.summary.md +0 -108
- package/dist/logic/roles/ecologist/.briefs/distilisys/sys211.actor.resources.pt1.primitive.time.md +0 -56
- package/dist/logic/roles/ecologist/.briefs/distilisys/sys211.actor.resources.pt2.primitive.energy.md +0 -69
- package/dist/logic/roles/ecologist/.briefs/distilisys/sys211.actor.resources.pt3.primitive.space.md +0 -85
- package/dist/logic/roles/ecologist/.briefs/distilisys/sys211.actor.resources.pt4.primitive.claim.md +0 -113
- package/dist/logic/roles/ecologist/.briefs/distilisys/sys211.actor.resources.pt5.composites.md +0 -146
- package/dist/logic/roles/ecologist/.briefs/distilisys/sys231.actor.claims.p1.primitive.exchange.md +0 -130
- package/dist/logic/roles/ecologist/.briefs/ecology/.eco001.origin.prompt.md +0 -11
- package/dist/logic/roles/ecologist/.briefs/ecology/eco001.overview.md +0 -44
- package/dist/logic/roles/ecologist/.briefs/ecology/eco101.core-system-understanding.md +0 -70
- package/dist/logic/roles/ecologist/.briefs/ecology/eco101.p1.ecosystem-structure.md +0 -62
- package/dist/logic/roles/ecologist/.briefs/ecology/eco101.p2.trophic-dynamics.md +0 -59
- package/dist/logic/roles/ecologist/.briefs/ecology/eco101.p3.population-ecology.md +0 -71
- package/dist/logic/roles/ecologist/.briefs/ecology/eco101.p4.community-interactions.md +0 -78
- package/dist/logic/roles/ecologist/.briefs/ecology/eco505.systems-thinking.md +0 -62
- package/dist/logic/roles/ecologist/.briefs/economy/econ001.overview.md +0 -65
- package/dist/logic/roles/ecologist/.briefs/economy/econ101.core-mechanics.md +0 -65
- package/dist/logic/roles/ecologist/.briefs/economy/econ101.p1.supply-and-demand.md +0 -76
- package/dist/logic/roles/ecologist/.briefs/economy/econ101.p2.opportunity-cost.md +0 -106
- package/dist/logic/roles/ecologist/.briefs/economy/econ101.p3.marginal-analysis.md +0 -79
- package/dist/logic/roles/ecologist/.briefs/economy/econ101.p4.rational-choice.md +0 -81
- package/dist/logic/roles/ecologist/.briefs/economy/econ201.market-structures-and-failures.md +0 -81
- package/dist/logic/roles/ecologist/.briefs/economy/econ301.production-and-growth.md +0 -71
- package/dist/logic/roles/ecologist/.briefs/economy/econ401.macro-systems.md +0 -92
- package/dist/logic/roles/ecologist/.briefs/economy/econ501.global-and-institutional.md +0 -85
- package/dist/logic/roles/ecologist/.briefs/economy/econ501.p1.game-theory.md +0 -142
- package/dist/logic/roles/ecologist/.briefs/economy/econ501.p4.behavioral-economics.md +0 -146
- package/dist/logic/roles/ecologist/.briefs/product/user.journey._.[article].i1.md +0 -68
- package/dist/logic/roles/ecologist/.briefs/product/user.journey._.[article].md +0 -0
- package/dist/logic/roles/ecologist/.briefs/product/user.journey.purpose.[article].i1.md +0 -52
- package/dist/logic/roles/ecologist/.briefs/product/user.journey.purpose.[article].md +0 -52
- package/dist/logic/roles/ecologist/.briefs/term.distillation.md +0 -93
- package/dist/logic/roles/mechanic/.briefs/architecture/bounded-contexts.md +0 -61
- package/dist/logic/roles/mechanic/.briefs/architecture/directional-dependencies.md +0 -82
- package/dist/logic/roles/mechanic/.briefs/architecture/domain-driven-design.md +0 -61
- package/dist/logic/roles/mechanic/.briefs/architecture/ubiqlang.md +0 -37
- package/dist/logic/roles/mechanic/.briefs/codestyle/_mech.compressed.md +0 -57
- package/dist/logic/roles/mechanic/.briefs/codestyle/_mech.compressed.prompt.md +0 -5
- package/dist/logic/roles/mechanic/.briefs/codestyle/flow.failfast.md +0 -37
- package/dist/logic/roles/mechanic/.briefs/codestyle/flow.idempotency.md +0 -63
- package/dist/logic/roles/mechanic/.briefs/codestyle/flow.immutability.md +0 -48
- package/dist/logic/roles/mechanic/.briefs/codestyle/flow.narratives.md +0 -74
- package/dist/logic/roles/mechanic/.briefs/codestyle/flow.single-responsibility.md +0 -67
- package/dist/logic/roles/mechanic/.briefs/codestyle/flow.transformers_over_conditionals.[lesson].md +0 -97
- package/dist/logic/roles/mechanic/.briefs/codestyle/mech.args.input-context.md +0 -61
- package/dist/logic/roles/mechanic/.briefs/codestyle/mech.args.input-inline.md +0 -63
- package/dist/logic/roles/mechanic/.briefs/codestyle/mech.arrowonly.md +0 -47
- package/dist/logic/roles/mechanic/.briefs/codestyle/mech.clear-contracts.md +0 -53
- package/dist/logic/roles/mechanic/.briefs/codestyle/mech.tests.given-when-then.md +0 -62
- package/dist/logic/roles/mechanic/.briefs/codestyle/mech.what-why.md +0 -88
- package/dist/logic/roles/mechanic/.briefs/codestyle/mech.what-why.v2.md +0 -98
- package/dist/logic/roles/mechanic/.briefs/codestyle/pit-of-success.via.minimize-surface-area.md +0 -58
- package/dist/logic/roles/mechanic/.briefs/criteria.practices/never.term.script.md +0 -7
- package/dist/logic/roles/mechanic/.briefs/criteria.practices/prefer.emojis.chill_nature.md +0 -24
- package/dist/logic/roles/mechanic/.briefs/criteria.practices/prefer.jq.over_alt.[demo].md +0 -29
- package/dist/logic/roles/mechanic/.briefs/criteria.practices/prefer.terraform.[criteria].md +0 -4
- package/dist/logic/roles/mechanic/.briefs/criteria.practices/prefer.terraform.[seed].md +0 -17
- package/dist/logic/roles/mechanic/.briefs/criteria.practices/require.dependency.pinned_versions.md +0 -3
- package/dist/logic/roles/mechanic/.briefs/criteria.practices/require.idempotency.md +0 -33
- package/dist/logic/roles/mechanic/.briefs/criteria.practices/require.knowledge.externalized.md +0 -17
- package/dist/logic/roles/mechanic/.briefs/engineer/dependency-injection.md +0 -118
- package/dist/logic/roles/mechanic/.briefs/engineer/dependency-injection.stub.md +0 -11
- package/dist/logic/roles/mechanic/.briefs/lessons/code.prod.typescript.types/bivariance_vs_contravariance.[lesson].md +0 -95
- package/dist/logic/roles/mechanic/.briefs/patterns/code.prod.contract.inputs.nameargs/bad-practice/forbid.positional-args.md +0 -43
- package/dist/logic/roles/mechanic/.briefs/patterns/code.prod.contract.inputs.nameargs/best-practice/require.namedargs.md +0 -6
- package/dist/logic/roles/mechanic/.briefs/patterns/code.prod.declarative/.readme.md +0 -0
- package/dist/logic/roles/mechanic/.briefs/patterns/code.prod.declarative/best-practice/declastruct.[demo].md +0 -485
- package/dist/logic/roles/mechanic/.briefs/patterns/code.prod.domain.objects/bad-practices/blocker.has.attributes.nullable.md +0 -13
- package/dist/logic/roles/mechanic/.briefs/patterns/code.prod.domain.objects/bad-practices/blocker.has.attributes.undefined.md +0 -15
- package/dist/logic/roles/mechanic/.briefs/patterns/code.prod.domain.objects/bad-practices/blocker.refs.immuatble.md +0 -9
- package/dist/logic/roles/mechanic/.briefs/patterns/code.prod.domain.objects/best-practice/ref.package.domain-objects.[readme].md +0 -585
- package/dist/logic/roles/mechanic/.briefs/patterns/code.prod.domain.operations/best-practice/require.sync.names.md +0 -14
- package/dist/logic/roles/mechanic/.briefs/patterns/code.prod.errors.failfast/bad-practices/forbid.failhide.md +0 -19
- package/dist/logic/roles/mechanic/.briefs/patterns/code.prod.errors.failfast/bad-practices/forbid.hide_errors.md +0 -13
- package/dist/logic/roles/mechanic/.briefs/patterns/code.prod.errors.failfast/best-practice/prefer.HelpfulError.wrap.md +0 -54
- package/dist/logic/roles/mechanic/.briefs/patterns/code.prod.errors.failfast/best-practice/require.fail_fast.[demo].shell.md +0 -17
- package/dist/logic/roles/mechanic/.briefs/patterns/code.prod.errors.failfast/best-practice/require.fail_fast.md +0 -28
- package/dist/logic/roles/mechanic/.briefs/patterns/code.prod.narrative/bad-practices/forbid.else.md +0 -54
- package/dist/logic/roles/mechanic/.briefs/patterns/code.prod.narrative/best-practice/early-returns.named-checks.[demo].md +0 -181
- package/dist/logic/roles/mechanic/.briefs/patterns/code.prod.repo.structure/bad-practices/forbid.barrel.exports.ts.md +0 -41
- package/dist/logic/roles/mechanic/.briefs/patterns/code.prod.repo.structure/bad-practices/forbid.index.ts.md +0 -3
- package/dist/logic/roles/mechanic/.briefs/patterns/code.prod.repo.structure/best-practice/directional-dependencies.md +0 -82
- package/dist/logic/roles/mechanic/.briefs/patterns/code.prod.repo.structure/best-practice/dot-test-and-dot-temp.md +0 -20
- package/dist/logic/roles/mechanic/.briefs/patterns/code.prod.typescript.utils/best-practice/ref.package.as-command.[tips].md +0 -7
- package/dist/logic/roles/mechanic/.briefs/patterns/code.test.acceptance/best-practice/blackbox.md +0 -5
- package/dist/logic/roles/mechanic/.briefs/patterns/code.test.howto/best-practice/howto.diagnose.[lesson].md +0 -14
- package/dist/logic/roles/mechanic/.briefs/patterns/code.test.howto/best-practice/howto.run.[lesson].md +0 -18
- package/dist/logic/roles/mechanic/.briefs/patterns/code.test.howto/best-practice/howto.use.[lesson].md +0 -20
- package/dist/logic/roles/mechanic/.briefs/patterns/code.test.howto/best-practice/howto.write.[lesson].md +0 -3
- package/dist/logic/roles/mechanic/.briefs/patterns/code.test.howto/best-practice/howto.write.[lesson].on_scope.for_integ.md +0 -8
- package/dist/logic/roles/mechanic/.briefs/patterns/code.test.howto/best-practice/howto.write.[lesson].on_scope.for_units.md +0 -9
- package/dist/logic/roles/mechanic/.briefs/patterns/code.test.howto/best-practice/howto.write.bdd.[lesson].md +0 -280
- package/dist/logic/roles/mechanic/.briefs/patterns/code.test.howto/best-practice/prefer.datadriven.md +0 -41
- package/dist/logic/roles/mechanic/.briefs/patterns/code.test.howto/best-practice/ref.test-fns.[readme].md +0 -185
- package/dist/logic/roles/mechanic/.briefs/patterns/code.test.howto/best-practice/whento.snapshots.[lesson].md +0 -23
- package/dist/logic/roles/mechanic/.briefs/patterns/lang.terms/.readme.md +0 -1
- package/dist/logic/roles/mechanic/.briefs/patterns/lang.terms/bad-practices/forbid.term=existing.md +0 -10
- package/dist/logic/roles/mechanic/.briefs/patterns/lang.terms/best-practice/require.order.noun_adj.md +0 -39
- package/dist/logic/roles/mechanic/.briefs/patterns/lang.terms/domain=practices.terms=forbid_prefer_desire_require.md +0 -13
- package/dist/logic/roles/mechanic/.briefs/patterns/lang.terms/domain=software.terms=prodcode_vs_testcode.md +0 -7
- package/dist/logic/roles/mechanic/.briefs/patterns/lang.tones/.readme.md +0 -3
- package/dist/logic/roles/mechanic/.briefs/patterns/lang.tones/prefer.chill-nature.md +0 -0
- package/dist/logic/roles/mechanic/.briefs/patterns/lang.tones/prefer.lowercase.md +0 -0
- package/dist/logic/roles/mechanic/.briefs/style.compressed.md +0 -29
- package/dist/logic/roles/mechanic/.briefs/style.compressed.prompt.md +0 -5
- package/dist/logic/roles/mechanic/.briefs/style.names.treestruct.md +0 -48
- package/dist/logic/roles/mechanic/.briefs/style.names.ubiqlang.md +0 -37
- package/dist/logic/roles/mechanic/.briefs/style.words.lowercase.md +0 -36
- package/dist/logic/roles/mechanic/.briefs/terms/badpractice/script.md +0 -9
- package/dist/logic/roles/mechanic/.briefs/terms/plan.exec_vs_apply.md +0 -45
- package/dist/logic/roles/mechanic/.skills/claude.hooks/check.pretooluse.permissions.sh +0 -235
- package/dist/logic/roles/mechanic/.skills/claude.hooks/forbid.stderr.redirect.sh +0 -57
- package/dist/logic/roles/mechanic/.skills/declapract.upgrade.sh +0 -50
- package/dist/logic/roles/mechanic/.skills/git.worktree.common.sh +0 -58
- package/dist/logic/roles/mechanic/.skills/git.worktree.del.sh +0 -51
- package/dist/logic/roles/mechanic/.skills/git.worktree.get.sh +0 -51
- package/dist/logic/roles/mechanic/.skills/git.worktree.set.sh +0 -108
- package/dist/logic/roles/mechanic/.skills/git.worktree.sh +0 -46
- package/dist/logic/roles/mechanic/.skills/init.bhuild.sh +0 -260
- package/dist/logic/roles/mechanic/.skills/init.claude.hooks.forbid.stderr.redirect.sh +0 -116
- package/dist/logic/roles/mechanic/.skills/init.claude.hooks.pretooluse.sh +0 -118
- package/dist/logic/roles/mechanic/.skills/init.claude.hooks.sessionstart.sh +0 -113
- package/dist/logic/roles/mechanic/.skills/init.claude.hooks.sh +0 -25
- package/dist/logic/roles/mechanic/.skills/init.claude.permissions.sh +0 -155
- package/dist/logic/roles/mechanic/.skills/init.claude.sh +0 -47
- package/dist/logic/roles/mechanic/.skills/link.claude.transcripts.sh +0 -43
- package/dist/logic/roles/mechanic/.skills/test.integration.sh +0 -50
- package/dist/logic/roles/mechanic/codediff/routeArtistCodeDiff.integration.test.d.ts +0 -1
- package/dist/logic/roles/mechanic/codediff/routeArtistCodeDiff.integration.test.js +0 -246
- package/dist/logic/roles/mechanic/codediff/routeArtistCodeDiff.integration.test.js.map +0 -1
- package/dist/logic/roles/mechanic/codediff/routeArtistCodeDiff.template.md +0 -46
- package/dist/logic/roles/mechanic/codediff/routeCriticCodeReview.integration.test.d.ts +0 -1
- package/dist/logic/roles/mechanic/codediff/routeCriticCodeReview.integration.test.js +0 -144
- package/dist/logic/roles/mechanic/codediff/routeCriticCodeReview.integration.test.js.map +0 -1
- package/dist/logic/roles/mechanic/codediff/routeCriticCodeReviewArchitecture.integration.test.d.ts +0 -1
- package/dist/logic/roles/mechanic/codediff/routeCriticCodeReviewArchitecture.integration.test.js +0 -138
- package/dist/logic/roles/mechanic/codediff/routeCriticCodeReviewArchitecture.integration.test.js.map +0 -1
- package/dist/logic/roles/mechanic/codediff/routeCriticCodeReviewArchitecture.template.md +0 -78
- package/dist/logic/roles/mechanic/codediff/routeCriticCodeReviewCodestyle.integration.test.d.ts +0 -1
- package/dist/logic/roles/mechanic/codediff/routeCriticCodeReviewCodestyle.integration.test.js +0 -294
- package/dist/logic/roles/mechanic/codediff/routeCriticCodeReviewCodestyle.integration.test.js.map +0 -1
- package/dist/logic/roles/mechanic/codediff/routeCriticCodeReviewCodestyle.template.md +0 -75
- package/dist/logic/roles/mechanic/codediff/routeJudgeReleasable.integration.test.d.ts +0 -1
- package/dist/logic/roles/mechanic/codediff/routeJudgeReleasable.integration.test.js +0 -162
- package/dist/logic/roles/mechanic/codediff/routeJudgeReleasable.integration.test.js.map +0 -1
- package/dist/logic/roles/mechanic/codediff/routeJudgeReleasable.template.md +0 -67
- package/dist/logic/roles/mechanic/codediff/routeMechanicCodeIterate.integration.test.d.ts +0 -1
- package/dist/logic/roles/mechanic/codediff/routeMechanicCodeIterate.integration.test.js +0 -169
- package/dist/logic/roles/mechanic/codediff/routeMechanicCodeIterate.integration.test.js.map +0 -1
- package/dist/logic/roles/mechanic/codediff/routeMechanicCodePropose.integration.test.d.ts +0 -1
- package/dist/logic/roles/mechanic/codediff/routeMechanicCodePropose.integration.test.js +0 -203
- package/dist/logic/roles/mechanic/codediff/routeMechanicCodePropose.integration.test.js.map +0 -1
- package/dist/logic/roles/mechanic/study/routeStudyAsk.integration.test.d.ts +0 -1
- package/dist/logic/roles/mechanic/study/routeStudyAsk.integration.test.js +0 -98
- package/dist/logic/roles/mechanic/study/routeStudyAsk.integration.test.js.map +0 -1
- package/dist/logic/roles/mechanic/study/routeStudyAsk.template.md +0 -73
- package/dist/logic/roles/mechanic/write/.test/prior.template.md +0 -21
- package/dist/logic/roles/mechanic/write/loopWrite.integration.test.d.ts +0 -1
- package/dist/logic/roles/mechanic/write/loopWrite.integration.test.js +0 -57
- package/dist/logic/roles/mechanic/write/loopWrite.integration.test.js.map +0 -1
- package/dist/logic/roles/mechanic/write/stepWrite.integration.test.d.ts +0 -1
- package/dist/logic/roles/mechanic/write/stepWrite.integration.test.js +0 -189
- package/dist/logic/roles/mechanic/write/stepWrite.integration.test.js.map +0 -1
- package/dist/logic/roles/mechanic/write/stepWrite.template.md +0 -38
- package/dist/logic/roles/terminal.commander/command.exec/stepExecCommand.integration.test.d.ts +0 -1
- package/dist/logic/roles/terminal.commander/command.exec/stepExecCommand.integration.test.js +0 -76
- package/dist/logic/roles/terminal.commander/command.exec/stepExecCommand.integration.test.js.map +0 -1
- package/dist/logic/roles/terminal.commander/command.plan/stepPlanCommand.integration.test.d.ts +0 -1
- package/dist/logic/roles/terminal.commander/command.plan/stepPlanCommand.integration.test.js +0 -97
- package/dist/logic/roles/terminal.commander/command.plan/stepPlanCommand.integration.test.js.map +0 -1
|
@@ -1,485 +0,0 @@
|
|
|
1
|
-
# .brief.demo = declastruct pattern, implemented for the stripe sdk
|
|
2
|
-
|
|
3
|
-
Use the declastruct pattern whenever we need to construct and control remote resources. Each remote resource is considered a structure that we declaratively control, via idempotent get+set semantics.
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
### 1. first, declare the entities we wish to construct
|
|
7
|
-
|
|
8
|
-
declare them as explicit domain-objects
|
|
9
|
-
|
|
10
|
-
most importantly, we must understand
|
|
11
|
-
- the unique, natural key upon which we can drive idempotency
|
|
12
|
-
- the primary, artificial key upon which we can reference the resource with in foreign keys with other entities
|
|
13
|
-
|
|
14
|
-
ref: https://github.com/ehmpathy/declastruct-stripe-sdk/blob/1f9e2ecefb46028f75348aed8a5f9e3528eb5c1e/src/domain/objects/DeclaredStripeCustomer.ts
|
|
15
|
-
|
|
16
|
-
```ts
|
|
17
|
-
import { DomainEntity, DomainLiteral } from 'domain-objects';
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* .what = a declarative structure which represents a Stripe Customer
|
|
21
|
-
*/
|
|
22
|
-
export interface DeclaredStripeCustomer {
|
|
23
|
-
/**
|
|
24
|
-
* the public stripe customer id of this customer
|
|
25
|
-
*/
|
|
26
|
-
id?: string;
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* the email address of the customer
|
|
30
|
-
*
|
|
31
|
-
* note
|
|
32
|
-
* - stripe does not enforce this to be a unique key
|
|
33
|
-
* - however, to create a pit-of-success, this is used as the unique key with declastruct, since it is the only non-id field that we can search on
|
|
34
|
-
*/
|
|
35
|
-
email: string;
|
|
36
|
-
|
|
37
|
-
/**
|
|
38
|
-
* then name of the customer, if set
|
|
39
|
-
*/
|
|
40
|
-
name: null | string;
|
|
41
|
-
|
|
42
|
-
/**
|
|
43
|
-
* a description of the customer, if set
|
|
44
|
-
*/
|
|
45
|
-
description: null | string;
|
|
46
|
-
|
|
47
|
-
/**
|
|
48
|
-
* then phone of the customer, if set
|
|
49
|
-
*/
|
|
50
|
-
phone: null | string;
|
|
51
|
-
|
|
52
|
-
/**
|
|
53
|
-
* metadata that the customer was tagged with
|
|
54
|
-
*/
|
|
55
|
-
metadata: null | Record<string, string>;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
export class DeclaredStripeCustomer
|
|
59
|
-
extends DomainEntity<DeclaredStripeCustomer>
|
|
60
|
-
implements DeclaredStripeCustomer
|
|
61
|
-
{
|
|
62
|
-
public static primary = ['id'] as const;
|
|
63
|
-
public static unique = ['email'] as const;
|
|
64
|
-
public static nested = {
|
|
65
|
-
metadata: DomainLiteral,
|
|
66
|
-
};
|
|
67
|
-
}
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
### 2. next, declare how to translate from the sdk's shape to our declared shape
|
|
72
|
-
|
|
73
|
-
declare how to translate from the sdk's shape to our declared shape
|
|
74
|
-
|
|
75
|
-
why? because its rare that the simplest way to represent a domain-entity is the way that the api has represented it, due to backwards compat && practice differences
|
|
76
|
-
|
|
77
|
-
our objective is
|
|
78
|
-
- make things as simple and intuitive to understand
|
|
79
|
-
- provide a pit of success
|
|
80
|
-
|
|
81
|
-
therefore, we always cast into our own representation, to give ourselves the flexibility to speak more clearly about entities
|
|
82
|
-
|
|
83
|
-
additionally, this enables us to cast them into `domain-object` instances, which give us explicit declarations of the distinct objects and domain-driven features like references
|
|
84
|
-
|
|
85
|
-
ref: https://github.com/ehmpathy/declastruct-stripe-sdk/blob/1f9e2ecefb46028f75348aed8a5f9e3528eb5c1e/src/logic/cast/castToDeclaredStripeCustomer.ts
|
|
86
|
-
```ts
|
|
87
|
-
import { UnexpectedCodePathError } from 'helpful-errors';
|
|
88
|
-
import Stripe from 'stripe';
|
|
89
|
-
import { HasMetadata, omit } from 'type-fns';
|
|
90
|
-
|
|
91
|
-
import { DeclaredStripeCustomer } from '../../domain/objects/DeclaredStripeCustomer';
|
|
92
|
-
|
|
93
|
-
export const castToDeclaredStripeCustomer = (
|
|
94
|
-
input: Stripe.Customer,
|
|
95
|
-
): HasMetadata<DeclaredStripeCustomer> => {
|
|
96
|
-
return new DeclaredStripeCustomer({
|
|
97
|
-
id: input.id,
|
|
98
|
-
email:
|
|
99
|
-
input.email ??
|
|
100
|
-
UnexpectedCodePathError.throw(
|
|
101
|
-
'no email found for customer. not a valid declared stripe customer',
|
|
102
|
-
{ input },
|
|
103
|
-
),
|
|
104
|
-
description: input.description ?? null,
|
|
105
|
-
name: input.name ?? null,
|
|
106
|
-
phone: input.phone ?? null,
|
|
107
|
-
metadata: (() => {
|
|
108
|
-
const obj = input.metadata ? omit(input.metadata, ['exid']) : {};
|
|
109
|
-
if (Object.keys(obj).length === 0) return null;
|
|
110
|
-
return obj;
|
|
111
|
-
})(),
|
|
112
|
-
}) as HasMetadata<DeclaredStripeCustomer>;
|
|
113
|
-
};
|
|
114
|
-
|
|
115
|
-
```
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
### 3. next, declare how to get the resource from the remote repository
|
|
119
|
-
|
|
120
|
-
support get.by.unique, get.by.primary, and get.by.ref
|
|
121
|
-
|
|
122
|
-
ref: https://github.com/ehmpathy/declastruct-stripe-sdk/blob/1f9e2ecefb46028f75348aed8a5f9e3528eb5c1e/src/logic/customer/getCustomer.ts
|
|
123
|
-
```ts
|
|
124
|
-
import { Ref, RefByPrimary, RefByUnique, isUniqueKeyRef } from 'domain-objects';
|
|
125
|
-
import { BadRequestError, UnexpectedCodePathError } from 'helpful-errors';
|
|
126
|
-
import { HasMetadata, PickOne } from 'type-fns';
|
|
127
|
-
import { VisualogicContext } from 'visualogic';
|
|
128
|
-
|
|
129
|
-
import { StripeApiContext } from '../../domain/constants';
|
|
130
|
-
import { DeclaredStripeCustomer } from '../../domain/objects/DeclaredStripeCustomer';
|
|
131
|
-
import { castToDeclaredStripeCustomer } from '../cast/castToDeclaredStripeCustomer';
|
|
132
|
-
|
|
133
|
-
/**
|
|
134
|
-
* .what = gets a customer from stripe
|
|
135
|
-
*/
|
|
136
|
-
export const getCustomer = async (
|
|
137
|
-
input: {
|
|
138
|
-
by: PickOne<{
|
|
139
|
-
primary: RefByPrimary<typeof DeclaredStripeCustomer>;
|
|
140
|
-
unique: RefByUnique<typeof DeclaredStripeCustomer>;
|
|
141
|
-
ref: Ref<typeof DeclaredStripeCustomer>;
|
|
142
|
-
}>;
|
|
143
|
-
},
|
|
144
|
-
context: StripeApiContext & VisualogicContext,
|
|
145
|
-
): Promise<HasMetadata<DeclaredStripeCustomer> | null> => {
|
|
146
|
-
// handle by ref
|
|
147
|
-
if (input.by.ref)
|
|
148
|
-
return isUniqueKeyRef({ of: DeclaredStripeCustomer })(input.by.ref)
|
|
149
|
-
? getCustomer({ by: { unique: input.by.ref } }, context)
|
|
150
|
-
: getCustomer({ by: { primary: input.by.ref } }, context);
|
|
151
|
-
|
|
152
|
-
// handle get by id
|
|
153
|
-
if (input.by.primary) {
|
|
154
|
-
try {
|
|
155
|
-
const customer = await context.stripe.customers.retrieve(
|
|
156
|
-
input.by.primary.id,
|
|
157
|
-
);
|
|
158
|
-
if (customer.deleted) return null;
|
|
159
|
-
return castToDeclaredStripeCustomer(customer);
|
|
160
|
-
} catch (error) {
|
|
161
|
-
if (!(error instanceof Error)) throw error;
|
|
162
|
-
if (error.message.includes('No such customer')) return null; // handle "null" responses without an error
|
|
163
|
-
throw error;
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
// handle get by email
|
|
168
|
-
if (input.by.unique) {
|
|
169
|
-
const {
|
|
170
|
-
data: [customer, ...otherCustomers],
|
|
171
|
-
} = await context.stripe.customers.list({
|
|
172
|
-
email: input.by.unique.email,
|
|
173
|
-
});
|
|
174
|
-
if (otherCustomers.length)
|
|
175
|
-
throw new BadRequestError('more than one customer for this email', {
|
|
176
|
-
input,
|
|
177
|
-
customers: [customer, ...otherCustomers],
|
|
178
|
-
});
|
|
179
|
-
if (!customer) return null;
|
|
180
|
-
return castToDeclaredStripeCustomer(customer);
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
// otherwise, unexpected input
|
|
184
|
-
throw new UnexpectedCodePathError('invalid input', { input });
|
|
185
|
-
};
|
|
186
|
-
```
|
|
187
|
-
|
|
188
|
-
and dont forget the tests!
|
|
189
|
-
|
|
190
|
-
ref: https://github.com/ehmpathy/declastruct-stripe-sdk/blob/1f9e2ecefb46028f75348aed8a5f9e3528eb5c1e/src/logic/customer/getCustomer.integration.test.ts
|
|
191
|
-
```ts
|
|
192
|
-
import { given, then, when, useBeforeAll } from 'test-fns';
|
|
193
|
-
import { HasMetadata } from 'type-fns';
|
|
194
|
-
import { getUuid } from 'uuid-fns';
|
|
195
|
-
|
|
196
|
-
import { getStripeCredentials } from '../../__test_assets__/getStripeCredentials';
|
|
197
|
-
import { DeclaredStripeCustomer } from '../../domain/objects/DeclaredStripeCustomer';
|
|
198
|
-
import { getStripe } from '../auth/getStripe';
|
|
199
|
-
import { getCustomer } from './getCustomer';
|
|
200
|
-
import { setCustomer } from './setCustomer';
|
|
201
|
-
|
|
202
|
-
describe('getCustomer', () => {
|
|
203
|
-
given('a by.primary', () => {
|
|
204
|
-
when('the customer does not exist', () => {
|
|
205
|
-
const stripeCustomerId = getUuid();
|
|
206
|
-
|
|
207
|
-
then('we should get null', async () => {
|
|
208
|
-
const customer = await getCustomer(
|
|
209
|
-
{ by: { primary: { id: stripeCustomerId } } },
|
|
210
|
-
{ stripe: await getStripe(getStripeCredentials()), log: console },
|
|
211
|
-
);
|
|
212
|
-
expect(customer).toEqual(null);
|
|
213
|
-
});
|
|
214
|
-
});
|
|
215
|
-
|
|
216
|
-
when('the customer does exist', () => {
|
|
217
|
-
const customerFound: HasMetadata<DeclaredStripeCustomer> = useBeforeAll(
|
|
218
|
-
async () =>
|
|
219
|
-
await setCustomer(
|
|
220
|
-
{
|
|
221
|
-
finsert: {
|
|
222
|
-
email: 'svc-protools@ahbode.dev',
|
|
223
|
-
name: 'svc-protools.test',
|
|
224
|
-
description: 'test',
|
|
225
|
-
metadata: null,
|
|
226
|
-
phone: null,
|
|
227
|
-
},
|
|
228
|
-
},
|
|
229
|
-
{ stripe: await getStripe(getStripeCredentials()), log: console },
|
|
230
|
-
),
|
|
231
|
-
);
|
|
232
|
-
|
|
233
|
-
when('we attempt to get the customer', () => {
|
|
234
|
-
then('we should get null', async () => {
|
|
235
|
-
const customer = await getCustomer(
|
|
236
|
-
{ by: { primary: { id: customerFound.id } } },
|
|
237
|
-
{ stripe: await getStripe(getStripeCredentials()), log: console },
|
|
238
|
-
);
|
|
239
|
-
expect(customer?.id).toEqual(customerFound.id);
|
|
240
|
-
});
|
|
241
|
-
});
|
|
242
|
-
});
|
|
243
|
-
});
|
|
244
|
-
});
|
|
245
|
-
```
|
|
246
|
-
|
|
247
|
-
### 4. last, declare how to set the resource into the remote repository
|
|
248
|
-
|
|
249
|
-
support set via both set.finsert and set.upsert idempotent operations
|
|
250
|
-
|
|
251
|
-
ref: https://github.com/ehmpathy/declastruct-stripe-sdk/blob/1f9e2ecefb46028f75348aed8a5f9e3528eb5c1e/src/logic/customer/setCustomer.ts
|
|
252
|
-
|
|
253
|
-
```ts
|
|
254
|
-
import { serialize } from 'domain-objects';
|
|
255
|
-
import { toHashSha256Sync } from 'hash-fns';
|
|
256
|
-
import { UnexpectedCodePathError } from 'helpful-errors';
|
|
257
|
-
import { HasMetadata, PickOne } from 'type-fns';
|
|
258
|
-
import {
|
|
259
|
-
getResourceNameFromFileName,
|
|
260
|
-
VisualogicContext,
|
|
261
|
-
withLogTrail,
|
|
262
|
-
} from 'visualogic';
|
|
263
|
-
|
|
264
|
-
import { StripeApiContext } from '../../domain/constants';
|
|
265
|
-
import { DeclaredStripeCustomer } from '../../domain/objects/DeclaredStripeCustomer';
|
|
266
|
-
import { castToDeclaredStripeCustomer } from '../cast/castToDeclaredStripeCustomer';
|
|
267
|
-
import { getCustomer } from './getCustomer';
|
|
268
|
-
|
|
269
|
-
export const setCustomer = withLogTrail(
|
|
270
|
-
async (
|
|
271
|
-
input: PickOne<{
|
|
272
|
-
finsert: DeclaredStripeCustomer;
|
|
273
|
-
upsert: DeclaredStripeCustomer;
|
|
274
|
-
}>,
|
|
275
|
-
context: StripeApiContext & VisualogicContext,
|
|
276
|
-
): Promise<HasMetadata<DeclaredStripeCustomer>> => {
|
|
277
|
-
// lookup the customer
|
|
278
|
-
const customerFound = await getCustomer(
|
|
279
|
-
{
|
|
280
|
-
by: {
|
|
281
|
-
unique: {
|
|
282
|
-
email:
|
|
283
|
-
input.finsert?.email ??
|
|
284
|
-
input.upsert?.email ??
|
|
285
|
-
UnexpectedCodePathError.throw('no email in input', { input }),
|
|
286
|
-
},
|
|
287
|
-
},
|
|
288
|
-
},
|
|
289
|
-
context,
|
|
290
|
-
);
|
|
291
|
-
|
|
292
|
-
// sanity check that if the customer exists, their id matches the user's expectations, if any
|
|
293
|
-
const stripeCustomerIdExpected = input.finsert?.id || input.upsert?.id;
|
|
294
|
-
if (
|
|
295
|
-
customerFound &&
|
|
296
|
-
stripeCustomerIdExpected &&
|
|
297
|
-
stripeCustomerIdExpected !== customerFound.id
|
|
298
|
-
)
|
|
299
|
-
throw new UnexpectedCodePathError(
|
|
300
|
-
'asked to setCustomer with a .primary=id which does not match the .unique=email',
|
|
301
|
-
{
|
|
302
|
-
stripeCustomerIdExpected,
|
|
303
|
-
stripeCustomerIdFound: customerFound.id,
|
|
304
|
-
customerFound,
|
|
305
|
-
},
|
|
306
|
-
);
|
|
307
|
-
|
|
308
|
-
// if the customer was found, then handle that
|
|
309
|
-
if (customerFound) {
|
|
310
|
-
// if asked to finsert, then we can return it now
|
|
311
|
-
if (input.finsert) return customerFound;
|
|
312
|
-
|
|
313
|
-
// if asked to upsert, then we can update it now
|
|
314
|
-
if (input.upsert)
|
|
315
|
-
return castToDeclaredStripeCustomer(
|
|
316
|
-
await context.stripe.customers.update(customerFound.id, {
|
|
317
|
-
name: input.upsert.name ?? undefined,
|
|
318
|
-
description: input.upsert.description ?? undefined,
|
|
319
|
-
phone: input.upsert.phone ?? undefined,
|
|
320
|
-
metadata: input.upsert.metadata ?? undefined,
|
|
321
|
-
}),
|
|
322
|
-
);
|
|
323
|
-
}
|
|
324
|
-
|
|
325
|
-
// otherwise, create the customer
|
|
326
|
-
const customerDesired: DeclaredStripeCustomer =
|
|
327
|
-
input.upsert ?? input.finsert;
|
|
328
|
-
const customerCreated = await context.stripe.customers.create(
|
|
329
|
-
{
|
|
330
|
-
email: customerDesired.email,
|
|
331
|
-
name: customerDesired.name ?? undefined,
|
|
332
|
-
description: customerDesired.description ?? undefined,
|
|
333
|
-
phone: customerDesired.phone ?? undefined,
|
|
334
|
-
metadata: customerDesired.metadata ?? undefined,
|
|
335
|
-
},
|
|
336
|
-
{
|
|
337
|
-
idempotencyKey: toHashSha256Sync(
|
|
338
|
-
[
|
|
339
|
-
// stage, // todo: pull stage from context.environment
|
|
340
|
-
'v1.0.0',
|
|
341
|
-
serialize({ ...customerDesired }),
|
|
342
|
-
].join(';'),
|
|
343
|
-
),
|
|
344
|
-
},
|
|
345
|
-
);
|
|
346
|
-
return castToDeclaredStripeCustomer(customerCreated);
|
|
347
|
-
},
|
|
348
|
-
{ name: getResourceNameFromFileName(__filename) },
|
|
349
|
-
);
|
|
350
|
-
```
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
and of course, the tests
|
|
354
|
-
|
|
355
|
-
ref: https://github.com/ehmpathy/declastruct-stripe-sdk/blob/1f9e2ecefb46028f75348aed8a5f9e3528eb5c1e/src/logic/customer/setCustomer.integration.test.ts
|
|
356
|
-
```ts
|
|
357
|
-
import { given, then, useBeforeAll, when } from 'test-fns';
|
|
358
|
-
import { getUuid } from 'uuid-fns';
|
|
359
|
-
|
|
360
|
-
import { getStripeCredentials } from '../../__test_assets__/getStripeCredentials';
|
|
361
|
-
import { getStripe } from '../auth/getStripe';
|
|
362
|
-
import { setCustomer } from './setCustomer';
|
|
363
|
-
|
|
364
|
-
const log = console;
|
|
365
|
-
|
|
366
|
-
describe('setCustomer', () => {
|
|
367
|
-
given('a .finsert', () => {
|
|
368
|
-
when('the customer does not exist yet', () => {
|
|
369
|
-
const email = `svc-protools.test.${getUuid()}@ahbode.dev`; // random uuid => new customer
|
|
370
|
-
|
|
371
|
-
then('we should create it', async () => {
|
|
372
|
-
const customer = await setCustomer(
|
|
373
|
-
{
|
|
374
|
-
finsert: {
|
|
375
|
-
email,
|
|
376
|
-
name: 'svc-protools.test',
|
|
377
|
-
description: 'test',
|
|
378
|
-
metadata: null,
|
|
379
|
-
phone: null,
|
|
380
|
-
},
|
|
381
|
-
},
|
|
382
|
-
{ stripe: await getStripe(getStripeCredentials()), log },
|
|
383
|
-
);
|
|
384
|
-
console.log(customer);
|
|
385
|
-
expect(customer.id).toContain('cus_');
|
|
386
|
-
});
|
|
387
|
-
});
|
|
388
|
-
|
|
389
|
-
when('the customer already exists', () => {
|
|
390
|
-
const email = `svc-protools.test.${getUuid()}@ahbode.dev`; // random uuid => new customer
|
|
391
|
-
const customerBefore = useBeforeAll(
|
|
392
|
-
async () =>
|
|
393
|
-
await setCustomer(
|
|
394
|
-
{
|
|
395
|
-
finsert: {
|
|
396
|
-
email,
|
|
397
|
-
name: 'svc-protools.test',
|
|
398
|
-
description: 'test',
|
|
399
|
-
metadata: null,
|
|
400
|
-
phone: null,
|
|
401
|
-
},
|
|
402
|
-
},
|
|
403
|
-
{ stripe: await getStripe(getStripeCredentials()), log },
|
|
404
|
-
),
|
|
405
|
-
);
|
|
406
|
-
|
|
407
|
-
then('it should not update the customers attributes', async () => {
|
|
408
|
-
const customerAfter = await setCustomer(
|
|
409
|
-
{
|
|
410
|
-
finsert: {
|
|
411
|
-
email,
|
|
412
|
-
name: 'new name',
|
|
413
|
-
description: 'test',
|
|
414
|
-
metadata: null,
|
|
415
|
-
phone: null,
|
|
416
|
-
},
|
|
417
|
-
},
|
|
418
|
-
{ stripe: await getStripe(getStripeCredentials()), log },
|
|
419
|
-
);
|
|
420
|
-
expect(customerAfter.name).not.toEqual('new name');
|
|
421
|
-
expect(customerAfter.name).toEqual(customerBefore.name);
|
|
422
|
-
});
|
|
423
|
-
});
|
|
424
|
-
});
|
|
425
|
-
given('a .upsert', () => {
|
|
426
|
-
when('the customer does not exist yet', () => {
|
|
427
|
-
const email = `svc-protools.test.${getUuid()}@ahbode.dev`; // random uuid => new customer
|
|
428
|
-
|
|
429
|
-
then('we should create it', async () => {
|
|
430
|
-
const customer = await setCustomer(
|
|
431
|
-
{
|
|
432
|
-
upsert: {
|
|
433
|
-
email,
|
|
434
|
-
name: 'svc-protools.test',
|
|
435
|
-
description: 'test',
|
|
436
|
-
metadata: null,
|
|
437
|
-
phone: null,
|
|
438
|
-
},
|
|
439
|
-
},
|
|
440
|
-
{ stripe: await getStripe(getStripeCredentials()), log },
|
|
441
|
-
);
|
|
442
|
-
console.log(customer);
|
|
443
|
-
expect(customer.id).toContain('cus_');
|
|
444
|
-
});
|
|
445
|
-
});
|
|
446
|
-
|
|
447
|
-
when('the customer already exists', () => {
|
|
448
|
-
const email = `svc-protools.test.${getUuid()}@ahbode.dev`; // random uuid => new customer
|
|
449
|
-
const customerBefore = useBeforeAll(
|
|
450
|
-
async () =>
|
|
451
|
-
await setCustomer(
|
|
452
|
-
{
|
|
453
|
-
upsert: {
|
|
454
|
-
email,
|
|
455
|
-
name: 'svc-protools.test',
|
|
456
|
-
description: 'test',
|
|
457
|
-
metadata: null,
|
|
458
|
-
phone: null,
|
|
459
|
-
},
|
|
460
|
-
},
|
|
461
|
-
{ stripe: await getStripe(getStripeCredentials()), log },
|
|
462
|
-
),
|
|
463
|
-
);
|
|
464
|
-
|
|
465
|
-
then('it should update the customers attributes', async () => {
|
|
466
|
-
const customerAfter = await setCustomer(
|
|
467
|
-
{
|
|
468
|
-
upsert: {
|
|
469
|
-
email,
|
|
470
|
-
name: 'new name',
|
|
471
|
-
description: 'test',
|
|
472
|
-
metadata: null,
|
|
473
|
-
phone: null,
|
|
474
|
-
},
|
|
475
|
-
},
|
|
476
|
-
{ stripe: await getStripe(getStripeCredentials()), log },
|
|
477
|
-
);
|
|
478
|
-
expect(customerAfter.name).toEqual('new name');
|
|
479
|
-
expect(customerAfter.name).not.toEqual(customerBefore.name);
|
|
480
|
-
});
|
|
481
|
-
});
|
|
482
|
-
});
|
|
483
|
-
});
|
|
484
|
-
```
|
|
485
|
-
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
we need to be very skeptical of nullable attributes
|
|
2
|
-
|
|
3
|
-
there needs to be a clear domain reason for why an attribute can be null - and it should be clearly articulated
|
|
4
|
-
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
if there's no clear reason to support it as null, ensure the attribute has a clear type declared
|
|
8
|
-
|
|
9
|
-
rational or its forbidden
|
|
10
|
-
|
|
11
|
-
===
|
|
12
|
-
|
|
13
|
-
this is a BLOCKER level violation
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
never allow "undefined" attributes for domain objects UNLESS they are database-generated metadata
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
i.e.,
|
|
5
|
-
- ids, createdAt, updatedAt, etc - these are allowed to be undefined, since they're metadata, and only known on read
|
|
6
|
-
|
|
7
|
-
however, everything else should be explicitly knowable
|
|
8
|
-
- if we know that it is null, then set it as null
|
|
9
|
-
- however, we should be really clear as to WHY it can be null; if there is no good domain reason for null, forbid it
|
|
10
|
-
- otherwise, define the exact type
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
=====
|
|
14
|
-
|
|
15
|
-
this is a BLOCKER level violation
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
refs must be immutable
|
|
2
|
-
|
|
3
|
-
primary keys must be immutable; otherwise, they are not a stable identifier => not a reference key candidate
|
|
4
|
-
|
|
5
|
-
unique keys must be immutable; otherwise, they are not a stable identifier => not a reference key candidate
|
|
6
|
-
|
|
7
|
-
===
|
|
8
|
-
|
|
9
|
-
this is a BLOCKER level violation when detected
|