A gap analysis looks for what is missing. It measures what is true now against a prior state that existed, names the difference, and lists elimination steps you can verify. Root cause, incidents, regressions, troubleshooting: when something worked and stopped, the technique can be useful.
It is not part of the creative orientation. This package lets the analysis happen, then turns the work to the creative orientation.
One question confirms that an analysis fits:
Is there a prior state you are restoring?
Yes, and you can evidence it. Open the analysis: baseline, observation, the difference between them, and elimination steps you can verify.
No, you cannot name a state that actually existed. Then the difference has
nothing to be measured against, and
@medicine-wheel/creative-orientation
will point you toward structural tension instead. A feeling of urgency is not
evidence.
[!WARNING] Experimental alpha. Part of the Medicine Wheel Developer Suite, which is under active development. APIs change between patch versions and all packages move in lockstep — pin exact versions. See ALPHA.md.
A gap analysis looks for what is missing, and its main job here is to teach the model using it. A model that has found what is missing is pulled toward filling each missing item, one task per item. That is not what we are doing.
So the package lets the analysis happen, then names that pull and turns the work to the creative orientation:
Every analysis carries an orientation reading taken when it was opened, via
@medicine-wheel/creative-orientation. The question is always the same: is a
prior state actually being restored?
Opening an analysis requires a baseline with evidence. That requirement separates a restore from a creating act, and a feeling of urgency cannot satisfy it.
import { openGapAnalysis, addStep, doorAdvice } from '@medicine-wheel/gap-analysis';
let analysis = openGapAnalysis(
{ description: 'the published image matched the published packages',
evidence: 'true in the previously tagged release, verified from registry and image metadata' },
{ description: 'the newest image tag trails npm; an intermediate release has no image',
source: 'Docker Hub tags API, read 2026-07-25' },
'the image no longer tracks npm because building it depends on a human remembering a flag',
);
doorAdvice(analysis); // null — the situation and the instrument agree
analysis = addStep(analysis, {
action: 'build the image from the tag in CI rather than from release.sh',
verifiedBy: 'a v* tag push produces :app and :<version> without anyone running anything',
});
import { turnToCreativeOrientation } from '@medicine-wheel/gap-analysis';
const turn = turnToCreativeOrientation(analysis);
turn.currentReality; // the findings, as facts about today
turn.reflection; // names the pull to fill each missing item
turn.nextStep; // { tool: 'create_structural_tension_chart',
// needs: ['desired_outcome', 'direction'], question }
const withOutcome = turnToCreativeOrientation(analysis, {
desiredOutcome: 'every release publishes its image from the tag, with no one remembering a flag',
});
withOutcome.chartDraft;
// { desired_outcome, current_reality, action_steps: [] }
// No action step is taken from the findings. Add a direction and create the chart.
A desired outcome phrased as removing something is still placed in the draft,
with desiredOutcomeAdvice beside it.
The MCP server (@medicine-wheel/mcp) carries the same turn as the tool
turn_to_creative_orientation, called after open_gap_analysis.
A check (a validator, an audit, a coverage reading) has no baseline that existed. It reads a plan or a graph as it is and says what it does not find. Its findings turn the same way:
const turn = turnToCreativeOrientation({
check: 'accountability_validator',
findings: ['CRITICAL: The plan has no Elder co-investigators; …'],
holds: ['Hold the research while Elder co-investigators are part of the plan.'],
});
turn.currentReality; // each finding as { from: 'finding' }, each hold as { from: 'hold' }
turn.reflection; // names the pull, and says the holds stay as the check states them
A hold says what must be in place before the research continues: community
review, consent, governance. It is kept as current reality, reached with the
community, and never turned into a task. The MCP checks
(accountability_validator, ocap_compliance_checker, wilson_paradigm_checker,
mw_snapshot_transformation) answer next_tool: "turn_to_creative_orientation"
with next_tool_args ready to pass.
If you open an analysis without evidence for the baseline, you get the analysis and advice saying the routing rests on a feeling. You are not blocked. A package that refuses is a package you learn to route around, and sometimes the caller knows something the check does not.
addStep rejects a step with no verifiedBy. An elimination step you cannot
check is a wish; the fire is out only when something says so.
creative-orientation ......... the question asked first
├── gap-analysis ......... a prior state is being restored: looks for what is missing
│ └── turnToCreativeOrientation ... findings become current reality
└── structural-tension ... desired outcome, current reality stated as fact, action steps
Gap analysis is a technique the creative orientation does not include. The orientation question comes first, and after an analysis the turn brings the work back to a structural tension chart.
Small on purpose. turnToCreativeOrientation arrived in 0.26.3, and took a
check’s findings in 0.26.4.
MIT