Developer guide Preview

Rank Yapture tasks with MAUT

Turn task evidence and user-authored tradeoffs into deterministic, inspectable recommendations.

Developer preview. The audited MAGYC SDK uses @magycfit/maut-core@0.1.0. Verify package publication and registry access before publishing an install command to end users.

Why MAUT

Multi-attribute utility theory is useful when “what next?” depends on several competing considerations. Yapture uses it as a deterministic decision kernel, not as a replacement for user judgment.

task fields + history → observations → user policy → maut/1 case → rank + explanation

Package

The current SDK repository defines:

import {
  scoreCase,
  reconcileCase,
  qualityReport,
  type MautCase,
} from '@magycfit/maut-core';

Use an exact version during preview. The existing Yapture spike still imports the obsolete @metflaw/maut-core namespace and must be migrated before product release.

1. Extract evidence

Useful sources already exist on a Yapture task:

AttributeEvidenceMissing behavior
Goal impactlinked goal and accepted metadatanull
Deadline pressuredue date relative to an explicit reference timenull without due date
Effort remainingaccepted estimatenull
Dependency unlockexplicit dependency graphnull when graph is unknown
Momentumcompletion/update events in a declared windownull without history
Calendar fitduration and permitted free windownull without calendar evidence

Every value should retain origin and date. AI-extracted values are proposals until accepted.

2. Build a maut/1 case

const decisionCase: MautCase = {
  protocolVersion: 'maut/1',
  id: 'today-open-tasks',
  title: 'What should I work on next?',
  domain: 'Tasks',
  goal: 'Choose work that advances my 5K plan within today’s capacity.',
  status: 'live',
  updatedAt: '2026-07-16',
  notes: '',
  attributes,
  alternatives: tasks.map((task) => ({ id: task.id, label: task.text })),
  series: observations,
};

Pass an explicit reference date through every date-sensitive adapter. Tests must never depend on the wall clock.

3. Preserve missing values

MAUT can reconcile time-series evidence and surface quality/confidence. A missing value is not zero and should not be replaced by a value chosen to make a demo look complete.

const reconciled = reconcileCase(decisionCase, { referenceDate: '2026-07-16' });
const quality = qualityReport(reconciled);
const ranked = scoreCase(reconciled);

Use the exact options supported by your pinned SDK version; the example describes the intended boundary and must be contract-tested before release.

4. Resolve weights over time

Keep base preferences and time phases separate:

effective raw weight = base weight × active phase multiplier
effective weight = effective raw weight / sum(all effective raw weights)

For a training plan, recovery risk may become more important during a taper phase. The user approves the phase schedule, and every decision run records the effective weights.

5. Apply hard constraints first

Weights answer “which eligible task fits best?” Constraints answer “may this task be selected?”

Examples:

  • Exclude high-energy work after 19:00.
  • Keep an unresolved hard blocker suggestion-only.
  • Prevent an agent from deleting or reassigning tasks.

A high MAUT score never bypasses a capability or product permission.

6. Explain the result

Show:

  • the score as a relative utility result,
  • confidence or evidence coverage,
  • top positive contribution,
  • limiting contribution,
  • evidence source,
  • and any excluded constraints.

Prefer “Tempo intervals ranks first under your current weights” over “AI knows this is optimal.”

7. Learn only from explicit corrections

The SDK includes preference-model helpers. Train only from confirmed reorder, explicit pairwise choice, or explicit rating. Ask before using a correction, keep base weights visible, and provide a reset.

Next: design a governed autopilot.