@medicine-wheel/community-review
Version:
Community-based ceremonial review protocol for Medicine Wheel — implements Wilson's validation through Elder review circles, consensus, and relational accountability
77 lines • 2.73 kB
JavaScript
;
/**
* @medicine-wheel/community-review — Elder Validation
*
* Wilson describes research validation not through peer review
* but through community review — Elders validate whether research
* honors relational accountability.
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.requestElderValidation = requestElderValidation;
exports.elderGuidance = elderGuidance;
exports.elderBlessing = elderBlessing;
/**
* Request Elder validation for a review circle.
* Sets the elderValidator field and transitions to 'deliberating'.
*/
function requestElderValidation(circle, elderId) {
if (circle.status !== 'reviewing') {
throw new Error(`Cannot request Elder validation — circle is '${circle.status}', must be 'reviewing'`);
}
return {
...circle,
elderValidator: elderId,
status: 'deliberating',
};
}
/**
* Get Elder's guidance for the circle based on voices heard so far.
* Returns a summary of what the Elder should consider.
*/
function elderGuidance(circle) {
const directions = new Set(circle.talkingCircleLog
.filter((e) => e.direction !== undefined)
.map((e) => e.direction));
const allDirections = ['east', 'south', 'west', 'north'];
const missing = allDirections.filter((d) => !directions.has(d));
const suggestions = [];
if (missing.length > 0) {
suggestions.push(`Voices from ${missing.join(', ')} have not yet been heard`);
}
if (circle.wilsonAlignment < 0.5) {
suggestions.push('Wilson alignment is below threshold — consider deeper reflection');
}
if (!circle.ocapCompliant) {
suggestions.push('OCAP® compliance has not been confirmed');
}
if (circle.reviewers.length < 3) {
suggestions.push('Small circle — consider whether all perspectives are represented');
}
return {
artifactType: circle.artifactType,
voicesHeard: circle.talkingCircleLog.length,
directionsRepresented: [...directions],
wilsonAlignment: circle.wilsonAlignment,
suggestions,
};
}
/**
* Record an Elder's blessing on the review circle.
* The blessing is added to the talking circle log and stored as Elder validation.
*/
function elderBlessing(circle, elderId, blessing) {
if (circle.elderValidator !== elderId) {
throw new Error(`Elder '${elderId}' is not the assigned validator for this circle`);
}
const entry = {
speakerId: elderId,
role: 'elder',
voice: blessing,
timestamp: new Date().toISOString(),
};
return {
...circle,
talkingCircleLog: [...circle.talkingCircleLog, entry],
};
}
//# sourceMappingURL=elder.js.map