@medicine-wheel/brainstorming 0.5.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.
package/README.md ADDED
@@ -0,0 +1,85 @@
1
+ # @medicine-wheel/brainstorming
2
+
3
+ Idea into committed design, through approval gates a human holds.
4
+
5
+ > [!WARNING]
6
+ > **Experimental alpha.** Part of the Medicine Wheel Developer Suite, which is
7
+ > under active development. APIs change between patch versions and all packages
8
+ > move in lockstep — pin exact versions. See
9
+ > [ALPHA.md](https://github.com/jgwill/medicine-wheel/blob/main/ALPHA.md).
10
+
11
+ ## Why it exists
12
+
13
+ Convergence has a shape: read the ground, ask one question at a time, offer two
14
+ or three approaches with trade-offs, present the design in sections each
15
+ approved before the next, write the spec, let the human read it, then plan. This
16
+ package holds that shape as data rather than as advice, so it cannot be
17
+ forgotten under load.
18
+
19
+ ## The part that matters
20
+
21
+ It routes **every outcome statement it emits** through
22
+ `@medicine-wheel/creative-orientation` — including its own questions.
23
+
24
+ That is not decoration. An outcome phrased as elimination inside a
25
+ multiple-choice option becomes the human's *selected answer*, and from that
26
+ moment it stops looking like the agent's bias and starts looking like a
27
+ requirement. The moment of speaking is the only point where that is still
28
+ catchable.
29
+
30
+ ```ts
31
+ import { openSession, checkOptions, ask, suspendedOn, advance } from '@medicine-wheel/brainstorming';
32
+
33
+ const session = openSession('every cross-repository change arrives verified against its consumers');
34
+
35
+ checkOptions(session, [
36
+ 'Catch cross-service contract breaks',
37
+ 'Every change arrives already verified',
38
+ ]);
39
+ // → one finding, on the first option: phrased as removing something,
40
+ // while nothing is being restored.
41
+ ```
42
+
43
+ ## Gates are suspended states, not pauses
44
+
45
+ `ask()` suspends the session on a question. `advance()` **refuses** while a gate
46
+ is unanswered.
47
+
48
+ This is the one place refusal is correct. Everywhere else in this suite a check
49
+ advises and lets the caller proceed — but a gate is a question addressed to a
50
+ person, and answering it on their behalf is not a shortcut. It is a
51
+ substitution.
52
+
53
+ ```ts
54
+ const waiting = ask(session, 'thin convention, or a framework?');
55
+ suspendedOn(waiting); // the gate, holding
56
+ advance(waiting); // throws — the question belongs to someone else
57
+ ```
58
+
59
+ ## Phases
60
+
61
+ `explore → clarify → approaches → design → spec → review → plan`
62
+
63
+ Four of them are gated: `clarify`, `approaches`, `design`, `review`. Those are
64
+ the points where a half-finished creative process waits for its human — and
65
+ where, today, we still have nowhere good to put that suspended state when the
66
+ connection drops.
67
+
68
+ ## Where it sits
69
+
70
+ ```
71
+ creative-orientation ......... the gate
72
+ ├── gap-analysis ......... the fire path
73
+ └── structural-tension ... the advancing path
74
+
75
+ brainstorming ................ calls the gate on everything it says
76
+ ```
77
+
78
+ ## Status
79
+
80
+ First release. The protocol is expressed; the surface for *holding* a suspended
81
+ session across a dropped connection is not solved here and is named as open.
82
+
83
+ ## License
84
+
85
+ MIT
@@ -0,0 +1,89 @@
1
+ /**
2
+ * @medicine-wheel/brainstorming
3
+ *
4
+ * Idea into committed design, through approval gates a human holds.
5
+ *
6
+ * This is the convergence protocol as data: the phases, the order, and the
7
+ * points where the process stops and waits for a person. It calls
8
+ * `@medicine-wheel/creative-orientation` on every outcome statement it emits
9
+ * — including its own questions, which is the part that matters.
10
+ *
11
+ * An outcome phrased as elimination inside a multiple-choice option becomes
12
+ * the human's selected answer, and from then on it looks like a requirement
13
+ * rather than the agent's bias. Checking at the moment of speaking is the only
14
+ * point where that is still catchable.
15
+ *
16
+ * @packageDocumentation
17
+ */
18
+ import { type OrientationReading } from '@medicine-wheel/creative-orientation';
19
+ export type Phase = 'explore' | 'clarify' | 'approaches' | 'design' | 'spec' | 'review' | 'plan';
20
+ export declare const PHASE_ORDER: Phase[];
21
+ /** Phases that end with a suspended state holding a question for a human. */
22
+ export declare const GATED_PHASES: ReadonlySet<Phase>;
23
+ export interface Gate {
24
+ phase: Phase;
25
+ question: string;
26
+ /** Set when the human has answered. Absent means the process is suspended here. */
27
+ answer?: string;
28
+ askedAt: string;
29
+ answeredAt?: string;
30
+ }
31
+ export interface Session {
32
+ id: string;
33
+ /** The desired result this brainstorm is converging on. */
34
+ outcome: string;
35
+ phase: Phase;
36
+ gates: Gate[];
37
+ /** Reading taken on the outcome when the session opened. */
38
+ orientation: OrientationReading;
39
+ opened: string;
40
+ }
41
+ export interface OpenOptions {
42
+ id?: string;
43
+ timestamp?: string;
44
+ /** A prior state being restored, if this is a repair rather than a creating act. */
45
+ restores?: string | null;
46
+ evidence?: string;
47
+ }
48
+ /**
49
+ * Open a session.
50
+ *
51
+ * The outcome is read for orientation immediately. A session opened on an
52
+ * elimination-shaped outcome will converge rigorously on the wrong thing, and
53
+ * that is far more expensive to discover at the spec stage.
54
+ */
55
+ export declare function openSession(outcome: string, options?: OpenOptions): Session;
56
+ export interface EmitCheck {
57
+ /** The statement as written. */
58
+ statement: string;
59
+ reading: OrientationReading;
60
+ /** True when the statement should be reworded before it reaches a human. */
61
+ reword: boolean;
62
+ advice?: string;
63
+ }
64
+ /**
65
+ * Check any outcome statement before it is spoken — a section heading, an
66
+ * approach summary, and above all an option label in a question.
67
+ *
68
+ * `restores` is threaded through from the session so a repair session is not
69
+ * scolded for using repair vocabulary. Elimination language is only a finding
70
+ * when nothing is being restored.
71
+ */
72
+ export declare function checkEmission(session: Session, statement: string): EmitCheck;
73
+ /** Check a whole set of option labels at once, returning only the ones that need rewording. */
74
+ export declare function checkOptions(session: Session, options: string[]): EmitCheck[];
75
+ /** Suspend the session on a question. The process does not advance until answered. */
76
+ export declare function ask(session: Session, question: string, at?: string): Session;
77
+ export declare function answer(session: Session, question: string, response: string, at?: string): Session;
78
+ /** The gate currently holding the session, if any. */
79
+ export declare function suspendedOn(session: Session): Gate | null;
80
+ /**
81
+ * Advance to the next phase.
82
+ *
83
+ * Refuses while a gate is unanswered. This is the one place refusal is right:
84
+ * the gate is a question addressed to a person, and answering it on their
85
+ * behalf is not a shortcut, it is a substitution.
86
+ */
87
+ export declare function advance(session: Session): Session;
88
+ export declare function isComplete(session: Session): boolean;
89
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAGL,KAAK,kBAAkB,EAExB,MAAM,sCAAsC,CAAC;AAE9C,MAAM,MAAM,KAAK,GACb,SAAS,GACT,SAAS,GACT,YAAY,GACZ,QAAQ,GACR,MAAM,GACN,QAAQ,GACR,MAAM,CAAC;AAEX,eAAO,MAAM,WAAW,EAAE,KAAK,EAE9B,CAAC;AAEF,6EAA6E;AAC7E,eAAO,MAAM,YAAY,EAAE,WAAW,CAAC,KAAK,CAE1C,CAAC;AAEH,MAAM,WAAW,IAAI;IACnB,KAAK,EAAE,KAAK,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,mFAAmF;IACnF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,2DAA2D;IAC3D,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,KAAK,CAAC;IACb,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,4DAA4D;IAC5D,WAAW,EAAE,kBAAkB,CAAC;IAChC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oFAAoF;IACpF,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAMD;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAmB/E;AAED,MAAM,WAAW,SAAS;IACxB,gCAAgC;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,kBAAkB,CAAC;IAC5B,4EAA4E;IAC5E,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,CAY5E;AAED,+FAA+F;AAC/F,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE,CAE7E;AAID,sFAAsF;AACtF,wBAAgB,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAK5E;AAED,wBAAgB,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CASjG;AAED,sDAAsD;AACtD,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,GAAG,IAAI,CAEzD;AAED;;;;;;GAMG;AACH,wBAAgB,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAUjD;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAEpD"}
package/dist/index.js ADDED
@@ -0,0 +1,130 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GATED_PHASES = exports.PHASE_ORDER = void 0;
4
+ exports.openSession = openSession;
5
+ exports.checkEmission = checkEmission;
6
+ exports.checkOptions = checkOptions;
7
+ exports.ask = ask;
8
+ exports.answer = answer;
9
+ exports.suspendedOn = suspendedOn;
10
+ exports.advance = advance;
11
+ exports.isComplete = isComplete;
12
+ /**
13
+ * @medicine-wheel/brainstorming
14
+ *
15
+ * Idea into committed design, through approval gates a human holds.
16
+ *
17
+ * This is the convergence protocol as data: the phases, the order, and the
18
+ * points where the process stops and waits for a person. It calls
19
+ * `@medicine-wheel/creative-orientation` on every outcome statement it emits
20
+ * — including its own questions, which is the part that matters.
21
+ *
22
+ * An outcome phrased as elimination inside a multiple-choice option becomes
23
+ * the human's selected answer, and from then on it looks like a requirement
24
+ * rather than the agent's bias. Checking at the moment of speaking is the only
25
+ * point where that is still catchable.
26
+ *
27
+ * @packageDocumentation
28
+ */
29
+ const creative_orientation_1 = require("@medicine-wheel/creative-orientation");
30
+ exports.PHASE_ORDER = [
31
+ 'explore', 'clarify', 'approaches', 'design', 'spec', 'review', 'plan',
32
+ ];
33
+ /** Phases that end with a suspended state holding a question for a human. */
34
+ exports.GATED_PHASES = new Set([
35
+ 'clarify', 'approaches', 'design', 'review',
36
+ ]);
37
+ function defaultId() {
38
+ return `brainstorm:${Date.now()}:${Math.random().toString(36).slice(2, 8)}`;
39
+ }
40
+ /**
41
+ * Open a session.
42
+ *
43
+ * The outcome is read for orientation immediately. A session opened on an
44
+ * elimination-shaped outcome will converge rigorously on the wrong thing, and
45
+ * that is far more expensive to discover at the spec stage.
46
+ */
47
+ function openSession(outcome, options = {}) {
48
+ if (!outcome?.trim()) {
49
+ throw new Error('A brainstorm needs an outcome — what will exist when this is done?');
50
+ }
51
+ const claim = {
52
+ outcome,
53
+ restores: options.restores ?? null,
54
+ evidence: options.evidence,
55
+ };
56
+ return {
57
+ id: options.id ?? defaultId(),
58
+ outcome,
59
+ phase: 'explore',
60
+ gates: [],
61
+ orientation: (0, creative_orientation_1.readOrientation)(claim),
62
+ opened: options.timestamp ?? new Date().toISOString(),
63
+ };
64
+ }
65
+ /**
66
+ * Check any outcome statement before it is spoken — a section heading, an
67
+ * approach summary, and above all an option label in a question.
68
+ *
69
+ * `restores` is threaded through from the session so a repair session is not
70
+ * scolded for using repair vocabulary. Elimination language is only a finding
71
+ * when nothing is being restored.
72
+ */
73
+ function checkEmission(session, statement) {
74
+ const reading = (0, creative_orientation_1.readOrientation)({
75
+ outcome: statement,
76
+ restores: session.orientation.orientation === 'oscillating' ? 'inherited from session' : null,
77
+ });
78
+ const reword = (0, creative_orientation_1.worthSaying)(reading);
79
+ return {
80
+ statement,
81
+ reading,
82
+ reword,
83
+ ...(reword ? { advice: reading.advice } : {}),
84
+ };
85
+ }
86
+ /** Check a whole set of option labels at once, returning only the ones that need rewording. */
87
+ function checkOptions(session, options) {
88
+ return options.map(o => checkEmission(session, o)).filter(c => c.reword);
89
+ }
90
+ // ─── Gates ────────────────────────────────────────────────────────
91
+ /** Suspend the session on a question. The process does not advance until answered. */
92
+ function ask(session, question, at) {
93
+ return {
94
+ ...session,
95
+ gates: [...session.gates, { phase: session.phase, question, askedAt: at ?? new Date().toISOString() }],
96
+ };
97
+ }
98
+ function answer(session, question, response, at) {
99
+ return {
100
+ ...session,
101
+ gates: session.gates.map(g => g.question === question && g.answer === undefined
102
+ ? { ...g, answer: response, answeredAt: at ?? new Date().toISOString() }
103
+ : g),
104
+ };
105
+ }
106
+ /** The gate currently holding the session, if any. */
107
+ function suspendedOn(session) {
108
+ return session.gates.find(g => g.answer === undefined) ?? null;
109
+ }
110
+ /**
111
+ * Advance to the next phase.
112
+ *
113
+ * Refuses while a gate is unanswered. This is the one place refusal is right:
114
+ * the gate is a question addressed to a person, and answering it on their
115
+ * behalf is not a shortcut, it is a substitution.
116
+ */
117
+ function advance(session) {
118
+ const open = suspendedOn(session);
119
+ if (open) {
120
+ throw new Error(`Cannot advance past ${session.phase}: suspended on an unanswered question — "${open.question}"`);
121
+ }
122
+ const i = exports.PHASE_ORDER.indexOf(session.phase);
123
+ if (i === exports.PHASE_ORDER.length - 1)
124
+ return session;
125
+ return { ...session, phase: exports.PHASE_ORDER[i + 1] };
126
+ }
127
+ function isComplete(session) {
128
+ return session.phase === 'plan' && suspendedOn(session) === null;
129
+ }
130
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,45 @@
1
+ {
2
+ "name": "@medicine-wheel/brainstorming",
3
+ "version": "0.5.3",
4
+ "description": "Idea into committed design through approval gates a human holds, with every emitted outcome statement routed through creative orientation — including its own questions.",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "exports": {
8
+ ".": {
9
+ "types": "./dist/index.d.ts",
10
+ "import": "./dist/index.js",
11
+ "require": "./dist/index.js",
12
+ "default": "./dist/index.js"
13
+ }
14
+ },
15
+ "sideEffects": false,
16
+ "files": [
17
+ "dist",
18
+ "README.md"
19
+ ],
20
+ "scripts": {
21
+ "build": "tsc",
22
+ "clean": "rm -rf dist",
23
+ "prepublishOnly": "npm run clean && npm run build"
24
+ },
25
+ "keywords": [
26
+ "medicine-wheel",
27
+ "brainstorming",
28
+ "design",
29
+ "approval-gates",
30
+ "creative-orientation"
31
+ ],
32
+ "author": "jgwill",
33
+ "license": "MIT",
34
+ "repository": {
35
+ "type": "git",
36
+ "url": "git+https://github.com/jgwill/medicine-wheel.git",
37
+ "directory": "src/brainstorming"
38
+ },
39
+ "dependencies": {
40
+ "@medicine-wheel/creative-orientation": "^0.5.3"
41
+ },
42
+ "devDependencies": {
43
+ "typescript": "^5.7.0"
44
+ }
45
+ }