Weighted Decision Matrix (MCDA) discussion method (#25)#41
Merged
Conversation
…#25) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…e-size rule) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- record_scores drops unknown option/criterion labels: a mislabelled free-text matrix no longer counts its author as a scorer with every cell defaulted to the midpoint, which inflated divergence - build_decision_artifact appends an explicit caveat when zero participants scored — the ranking is contentless and the artifact now says so on both the structured and free-text paths - record_criteria no longer reports the same criterion twice when one submission merges two similar names into it - format_score_table rounds float cells to the artifact's 2-dp precision instead of printing raw :g output Order-dependent word-overlap merging (first-name-wins) is shared by all merge-by-similarity phases, not MCDA-specific — lodged as #42. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #25.
Summary
Adds the Weighted Decision Matrix (
decision_matrix) — multi-criteria decision analysis with a structured, machine-readable final artifact. This fills the gap named in the issue: every existing method ends in one big prose synthesis; this one ends inmethod_state["decision_artifact"], consumable by the storyboard, the MCP server, or a follow-up discussion. It is also now the primary fit for the recommender's "Make a decision between options" answer type (previously served only by Voting).Phases (five new
PhaseHandlers over two shared helper modules, split to respect the ~500-line rule):enumerate_options.py) — participants enumerate the alternatives (submit_options); zero options afterMAX_OPTIONS_ROUNDSaborts the method (thegenerate_ideaspattern).weight_criteria.py) — generalises adversarial-collab'sdefine_criteriaper the issue: criteria carry integer weights 1–5, merged across participants by name similarity; each participant's latest vote counts and the effective weight is the mean. Zero criteria afterMAX_CRITERIA_ROUNDSaborts.score_options.py) — generalises ACH'sevaluate_matrix: every participant scores every option × criterion 1–5 viasubmit_scores(two-leveladditionalPropertiesschema, O/C labels); partial coverage defaults missing cells to the scale midpoint.analyse_sensitivity.py) — moderator-only presentational phase. Weighted totals, per-participant divergence (spread of own-score totals), and one-at-a-time sensitivity (each criterion excluded and doubled; winner flips ⇒ pivotal; close-call margin flag) are all computed deterministically in_mcda_analysis.py— the moderator interprets numbers, never produces them.decide.py) — moderator records the decision viasubmit_decision; both the structured and free-text paths assemble the decision artifact (the fallback defaults the recommendation to the top-ranked option with an explanatory caveat), so the artifact always exists.Four phases force structured output per the #23 pattern (validators with actionable errors,
process_responsekept as the human/fallback path, degenerateget_output_tool -> Noneguards), so the existing setup gate automatically requires tool-capable models.Also: recommender
_TAXONOMYline for MCDA, method registered, dev + user-manual docs, CLAUDE.md counts refreshed, HANDOVER updated.Test plan
test_mcda_helpers.py(validators, recording/merge semantics, aggregation math, sensitivity, artifact JSON round-trip),test_phases_mcda.py(prompts, free-text fallbacks, give-up caps, aborts, method assembly),test_mcda_structured.py(Use native function calling for structured method outputs instead of regex-scraping free text #23 convention: flags, tool specs, prompts name the tool, structured ≡ free-text state).Plan:
docs/superpowers/plans/2026-07-14-weighted-decision-matrix.md🤖 Generated with Claude Code