Application flows and service contracts

Design contracts. Bound stubs are not implemented business behavior. JSON Schema cannot express all cross-field or stored-state obligations.

56 approved services · 52 product API operations · 22 product MCP tools

Surface → API / MCP → service → event

Page API references declare intended usage; actual page calls are not enforced here. Widget sources declare intended connections, not payload compatibility; planned projection gaps are explicit and no product artifacts are published. Event relationships declare possible emission; transaction, replay and external-producer behavior remain implementation obligations. Event-specific gaps are listed explicitly.

Feature filters include both the surface owner and referenced service requirements. Cross-feature dependencies stay visible. Bound means a declared mapping, not implemented business behavior. Widgets display results; prompts name required capabilities, not execution sequences.

186 declared paths

Review entryAPI / MCP operationServicesPossible eventsResult displays / gaps
/termspage · scaffoldTermsScaffold legal-route continuity — No service mapping No emissions declared No API dependencies declared; local/framework behavior is outside this service map.
/privacypage · scaffoldPrivacyScaffold legal-route continuity — No service mapping No emissions declared No API dependencies declared; local/framework behavior is outside this service map.
/cookiespage · scaffoldCookiesScaffold legal-route continuity — No service mapping No emissions declared No API dependencies declared; local/framework behavior is outside this service map.
/examplepage · scaffoldExampleTemporary scaffold reference API → example.list No service mapping No emissions declared Retained scaffold API has no product service descriptor.
/examplepage · scaffoldExampleTemporary scaffold reference API → example.create No service mapping No emissions declared Retained scaffold API has no product service descriptor.
/examplepage · scaffoldExampleTemporary scaffold reference API → example.delete No service mapping No emissions declared Retained scaffold API has no product service descriptor.
/page · pendingObjectivesF3 ObjectivesCross-feature API → record.queryMapping: bound record.queryF7 Sessions · contract-only No emissions declared
/page · pendingObjectivesF3 Objectives API → objectives.createMapping: bound objectives.createF3 Objectives · contract-only objective_createdAfter durable creation; no replay duplicate.
/page · pendingObjectivesF3 ObjectivesCross-feature API → results.getVia overlay: result-update-dialMapping: bound results.getF4 Results · contract-only No emissions declared
/page · pendingObjectivesF3 ObjectivesCross-feature API → result_logs.createVia overlay: result-update-dialMapping: bound result_logs.createF4 Results · contract-only result_update_recordedWhen numeric/performance evidence or a milestone flip is saved; not comment-only rows.
/page · pendingObjectivesF3 ObjectivesCross-feature API → habit_logs.setVia overlay: result-update-dialMapping: bound habit_logs.setF4 Results · contract-only result_update_recordedWhen a habit mark/unmark changes recorded progress; not comment-only changes or replay.
/page · pendingObjectivesF3 ObjectivesCross-feature API → notes.getVia overlay: note-editorMapping: bound notes.getF6 Notes · contract-only No emissions declared
/page · pendingObjectivesF3 ObjectivesCross-feature API → notes.createVia overlay: note-editorMapping: bound notes.createF6 Notes · contract-only note_createdAfter durable creation; not autosave updates or receipt replay.
/page · pendingObjectivesF3 ObjectivesCross-feature API → notes.updateVia overlay: note-editorMapping: bound notes.updateF6 Notes · contract-only No emissions declared
/page · pendingObjectivesF3 ObjectivesCross-feature API → notes.deleteVia overlay: note-editorMapping: bound notes.deleteF6 Notes · contract-only No emissions declared
/objectives/:idpage · pendingObjectiveF3 Objectives API → objectives.getMapping: bound objectives.getF3 Objectives · contract-only No emissions declared
/objectives/:idpage · pendingObjectiveF3 Objectives API → objectives.createMapping: bound objectives.createF3 Objectives · contract-only objective_createdAfter durable creation; no replay duplicate.
/objectives/:idpage · pendingObjectiveF3 Objectives API → objectives.updateMapping: bound objectives.updateF3 Objectives · contract-only No emissions declared
/objectives/:idpage · pendingObjectiveF3 Objectives API → objectives.deleteMapping: bound objectives.deleteF3 Objectives · contract-only No emissions declared
/objectives/:idpage · pendingObjectiveF3 ObjectivesCross-feature API → results.createMapping: bound results.createF4 Results · contract-only No emissions declared
/objectives/:idpage · pendingObjectiveF3 ObjectivesCross-feature API → actions.createMapping: bound actions.createF5 Actions · contract-only action_createdAfter durable creation; no replay duplicate.
/objectives/:idpage · pendingObjectiveF3 ObjectivesCross-feature API → action_logs.createMapping: bound action_logs.createF5 Actions · contract-only action_status_changedFor each persisted log, including repeat status with comment; not receipt replay.
/objectives/:idpage · pendingObjectiveF3 ObjectivesCross-feature API → results.getVia overlay: result-update-dialMapping: bound results.getF4 Results · contract-only No emissions declared
/objectives/:idpage · pendingObjectiveF3 ObjectivesCross-feature API → result_logs.createVia overlay: result-update-dialMapping: bound result_logs.createF4 Results · contract-only result_update_recordedWhen numeric/performance evidence or a milestone flip is saved; not comment-only rows.
/objectives/:idpage · pendingObjectiveF3 ObjectivesCross-feature API → habit_logs.setVia overlay: result-update-dialMapping: bound habit_logs.setF4 Results · contract-only result_update_recordedWhen a habit mark/unmark changes recorded progress; not comment-only changes or replay.
/results/:idpage · pendingResultF4 Results API → results.getMapping: bound results.getF4 Results · contract-only No emissions declared
/results/:idpage · pendingResultF4 Results API → result_logs.listMapping: bound result_logs.listF4 Results · contract-only No emissions declared
/results/:idpage · pendingResultF4 Results API → habit_logs.listMapping: bound habit_logs.listF4 Results · contract-only No emissions declared
/results/:idpage · pendingResultF4 Results API → results.createMapping: bound results.createF4 Results · contract-only No emissions declared
/results/:idpage · pendingResultF4 Results API → results.updateMapping: bound results.updateF4 Results · contract-only No emissions declared
/results/:idpage · pendingResultF4 Results API → results.deleteMapping: bound results.deleteF4 Results · contract-only No emissions declared
/results/:idpage · pendingResultF4 Results API → result_logs.createMapping: bound result_logs.createF4 Results · contract-only result_update_recordedWhen numeric/performance evidence or a milestone flip is saved; not comment-only rows.
/results/:idpage · pendingResultF4 Results API → result_logs.clear_commentMapping: bound result_logs.clear_commentF4 Results · contract-only No emissions declared
/results/:idpage · pendingResultF4 Results API → result_logs.deleteMapping: bound result_logs.deleteF4 Results · contract-only No emissions declared
/results/:idpage · pendingResultF4 Results API → habit_logs.setMapping: bound habit_logs.setF4 Results · contract-only result_update_recordedWhen a habit mark/unmark changes recorded progress; not comment-only changes or replay.
/results/:idpage · pendingResultF4 Results API → results.getVia overlay: result-update-dialMapping: bound results.getF4 Results · contract-only No emissions declared
/results/:idpage · pendingResultF4 Results API → result_logs.createVia overlay: result-update-dialMapping: bound result_logs.createF4 Results · contract-only result_update_recordedWhen numeric/performance evidence or a milestone flip is saved; not comment-only rows.
/results/:idpage · pendingResultF4 Results API → habit_logs.setVia overlay: result-update-dialMapping: bound habit_logs.setF4 Results · contract-only result_update_recordedWhen a habit mark/unmark changes recorded progress; not comment-only changes or replay.
/actionspage · pendingActionsF5 Actions API → actions.listMapping: bound actions.listF5 Actions · contract-only No emissions declared
/actionspage · pendingActionsF5 Actions API → actions.createMapping: bound actions.createF5 Actions · contract-only action_createdAfter durable creation; no replay duplicate.
/actionspage · pendingActionsF5 Actions API → actions.reorderMapping: bound actions.reorderF5 Actions · contract-only No emissions declared
/actionspage · pendingActionsF5 Actions API → action_logs.createMapping: bound action_logs.createF5 Actions · contract-only action_status_changedFor each persisted log, including repeat status with comment; not receipt replay.
/actions/:idpage · pendingActionF5 Actions API → actions.getMapping: bound actions.getF5 Actions · contract-only No emissions declared
/actions/:idpage · pendingActionF5 Actions API → action_logs.listMapping: bound action_logs.listF5 Actions · contract-only No emissions declared
/actions/:idpage · pendingActionF5 Actions API → actions.createMapping: bound actions.createF5 Actions · contract-only action_createdAfter durable creation; no replay duplicate.
/actions/:idpage · pendingActionF5 Actions API → actions.updateMapping: bound actions.updateF5 Actions · contract-only No emissions declared
/actions/:idpage · pendingActionF5 Actions API → actions.deleteMapping: bound actions.deleteF5 Actions · contract-only No emissions declared
/actions/:idpage · pendingActionF5 Actions API → action_logs.createMapping: bound action_logs.createF5 Actions · contract-only action_status_changedFor each persisted log, including repeat status with comment; not receipt replay.
/actions/:idpage · pendingActionF5 Actions API → action_logs.clear_commentMapping: bound action_logs.clear_commentF5 Actions · contract-only No emissions declared
/notespage · pendingNotesF6 Notes API → notes.listMapping: bound notes.listF6 Notes · contract-only No emissions declared
/notespage · pendingNotesF6 Notes API → notes.deleteMapping: bound notes.deleteF6 Notes · contract-only No emissions declared
/notespage · pendingNotesF6 Notes API → notes.getVia overlay: note-editorMapping: bound notes.getF6 Notes · contract-only No emissions declared
/notespage · pendingNotesF6 Notes API → notes.createVia overlay: note-editorMapping: bound notes.createF6 Notes · contract-only note_createdAfter durable creation; not autosave updates or receipt replay.
/notespage · pendingNotesF6 Notes API → notes.updateVia overlay: note-editorMapping: bound notes.updateF6 Notes · contract-only No emissions declared
/notespage · pendingNotesF6 Notes API → notes.deleteVia overlay: note-editorMapping: bound notes.deleteF6 Notes · contract-only No emissions declared
/notes/:idpage · pendingNoteF6 Notes API → notes.getMapping: bound notes.getF6 Notes · contract-only No emissions declared
/notes/:idpage · pendingNoteF6 Notes API → notes.updateMapping: bound notes.updateF6 Notes · contract-only No emissions declared
/notes/:idpage · pendingNoteF6 Notes API → notes.deleteMapping: bound notes.deleteF6 Notes · contract-only No emissions declared
/sessionspage · pendingSessionsF7 Sessions API → sessions.listMapping: bound sessions.listF7 Sessions · contract-only No emissions declared
/sessions/:idpage · pendingSessionF7 Sessions API → sessions.getMapping: bound sessions.getF7 Sessions · contract-only No emissions declared
/sessions/:idpage · pendingSessionF7 SessionsCross-feature API → action_logs.createMapping: bound action_logs.createF5 Actions · contract-only action_status_changedFor each persisted log, including repeat status with comment; not receipt replay.
/sessions/:id/briefingpage · pendingBriefingF7 Sessions API → sessions.getMapping: bound sessions.getF7 Sessions · contract-only No emissions declared
/sessions/:id/summarypage · pendingSession summaryF7 Sessions API → sessions.getMapping: bound sessions.getF7 Sessions · contract-only No emissions declared
/cyclespage · pendingCyclesF2 Cycles API → cycles.listMapping: bound cycles.listF2 Cycles · contract-only No emissions declared
/cycles/newpage · pendingSet up a cycleF2 Cycles API → cycles.createMapping: bound cycles.createF2 Cycles · contract-only cycle_createdAfter durable creation; no replay duplicate.
cycle_archivedWhen creation replaces an incumbent active cycle; reason replaced.
/cycles/:idpage · pendingCycleF2 Cycles API → cycles.getMapping: bound cycles.getF2 Cycles · contract-only No emissions declared
/cycles/:idpage · pendingCycleF2 Cycles API → cycles.updateMapping: bound cycles.updateF2 Cycles · contract-only cycle_archivedWhen status changes to archived (manual), or activation replaces the incumbent (replaced); never for date/field edits or no-op status.
/cycles/:idpage · pendingCycleF2 Cycles API → cycles.deleteMapping: bound cycles.deleteF2 Cycles · contract-only No emissions declared
/settingspage · pendingSettingsF1 Identity and billing API → user.getMapping: bound user.getF1 Identity and billing · contract-only No emissions declared
/settingspage · pendingSettingsF1 Identity and billingCross-feature API → cycles.resolve_activeMapping: bound cycles.resolve_activeF2 Cycles · contract-only cycle_archivedWhen lazy expiry actually archives the active cycle; reason expired.
/settingspage · pendingSettingsF1 Identity and billing API → billing.get_detailsMapping: bound billing.get_detailsF1 Identity and billing · contract-only No emissions declared
/settingspage · pendingSettingsF1 Identity and billing API → user.updateMapping: bound user.updateF1 Identity and billing · contract-only profile_updatedWhen at least one editable profile field changes; payload lists changed names only.
/settingspage · pendingSettingsF1 Identity and billing API → user.deleteMapping: bound user.deleteF1 Identity and billing · contract-only account_deletedIn the successful deletion transaction, before user removal; ON DELETE SET NULL retains the event. Never on failed provider cancellation or replay.
/settingspage · pendingSettingsF1 Identity and billing API → billing.create_portal_sessionMapping: bound billing.create_portal_sessionF1 Identity and billing · contract-only No emissions declared
/settingspage · pendingSettingsF1 Identity and billing API → billing.create_checkout_sessionMapping: bound billing.create_checkout_sessionF1 Identity and billing · contract-only No emissions declared
/onboardingpage · pendingSet up your coachingF1 Identity and billing API → user.getMapping: bound user.getF1 Identity and billing · contract-only No emissions declared
/onboardingpage · pendingSet up your coachingF1 Identity and billing API → billing.create_checkout_sessionMapping: bound billing.create_checkout_sessionF1 Identity and billing · contract-only No emissions declared
/sign-inpage · liveSign inF1 Identity and billing — No service mapping No emissions declared No API dependencies declared; local/framework behavior is outside this service map.
/sign-uppage · liveSign upF1 Identity and billing — No service mapping No emissions declared No API dependencies declared; local/framework behavior is outside this service map.
/oauth/consentpage · liveAuthorizeF1 Identity and billing — No service mapping No emissions declared No API dependencies declared; local/framework behavior is outside this service map.
result-update-dialoverlay · declaredUpdate Result valueF4 Results API → results.getMapping: bound results.getF4 Results · contract-only No emissions declared
result-update-dialoverlay · declaredUpdate Result valueF4 Results API → result_logs.createMapping: bound result_logs.createF4 Results · contract-only result_update_recordedWhen numeric/performance evidence or a milestone flip is saved; not comment-only rows.
result-update-dialoverlay · declaredUpdate Result valueF4 Results API → habit_logs.setMapping: bound habit_logs.setF4 Results · contract-only result_update_recordedWhen a habit mark/unmark changes recorded progress; not comment-only changes or replay.
note-editoroverlay · declaredCapture or edit a noteF6 Notes API → notes.getMapping: bound notes.getF6 Notes · contract-only No emissions declared
note-editoroverlay · declaredCapture or edit a noteF6 Notes API → notes.createMapping: bound notes.createF6 Notes · contract-only note_createdAfter durable creation; not autosave updates or receipt replay.
note-editoroverlay · declaredCapture or edit a noteF6 Notes API → notes.updateMapping: bound notes.updateF6 Notes · contract-only No emissions declared
note-editoroverlay · declaredCapture or edit a noteF6 Notes API → notes.deleteMapping: bound notes.deleteF6 Notes · contract-only No emissions declared
cycle_readtool · contract-onlycyclesF2 Cycles MCP → cycle_read [list]Mapping: bound cycles.listF2 Cycles · contract-only No emissions declared Tool result → cycle widgetlist or get; skip a missing active cycle.planned · contract-only
1 unresolved obligation
  • Bind list/detail variants and include bounded objectives for a cycle detail; never render a deleted cycle.
cyclewidget · contract-onlyCycleF2 Cycles MCP → cycle_read [list]Mapping: bound cycles.listF2 Cycles · contract-only No emissions declared Tool result → cycle widgetlist or get; skip a missing active cycle.planned · contract-onlyWidget receives the tool result; it does not call the service.
1 unresolved obligation
  • Bind list/detail variants and include bounded objectives for a cycle detail; never render a deleted cycle.
cycle_readtool · contract-onlycyclesF2 Cycles MCP → cycle_read [get]Mapping: bound cycles.getF2 Cycles · contract-only
cycles.get_stored_activeF2 Cycles · contract-only
No emissions declared Tool result → cycle widgetlist or get; skip a missing active cycle.planned · contract-only
1 unresolved obligation
  • Bind list/detail variants and include bounded objectives for a cycle detail; never render a deleted cycle.
cyclewidget · contract-onlyCycleF2 Cycles MCP → cycle_read [get]Mapping: bound cycles.getF2 Cycles · contract-only
cycles.get_stored_activeF2 Cycles · contract-only
No emissions declared Tool result → cycle widgetlist or get; skip a missing active cycle.planned · contract-onlyWidget receives the tool result; it does not call the service.
1 unresolved obligation
  • Bind list/detail variants and include bounded objectives for a cycle detail; never render a deleted cycle.
cycle_updatetool · contract-onlycyclesF2 Cycles MCP → cycle_update [call]Mapping: bound cycles.updateF2 Cycles · contract-only cycle_archivedWhen status changes to archived (manual), or activation replaces the incumbent (replaced); never for date/field edits or no-op status. Tool result → cycle widgetSuccessful date/intention update.planned · contract-only
1 unresolved obligation
  • Bind list/detail variants and include bounded objectives for a cycle detail; never render a deleted cycle.
cyclewidget · contract-onlyCycleF2 Cycles MCP → cycle_update [call]Mapping: bound cycles.updateF2 Cycles · contract-only cycle_archivedWhen status changes to archived (manual), or activation replaces the incumbent (replaced); never for date/field edits or no-op status. Tool result → cycle widgetSuccessful date/intention update.planned · contract-onlyWidget receives the tool result; it does not call the service.
1 unresolved obligation
  • Bind list/detail variants and include bounded objectives for a cycle detail; never render a deleted cycle.
cycle_lifecycletool · contract-onlycyclesF2 Cycles MCP → cycle_lifecycle [create]Mapping: bound cycles.createF2 Cycles · contract-only cycle_createdAfter durable creation; no replay duplicate.
cycle_archivedWhen creation replaces an incumbent active cycle; reason replaced.
Tool result → cycle widgetSuccessful create/archive/activate.planned · contract-only
1 unresolved obligation
  • Bind list/detail variants and include bounded objectives for a cycle detail; never render a deleted cycle.
cyclewidget · contract-onlyCycleF2 Cycles MCP → cycle_lifecycle [create]Mapping: bound cycles.createF2 Cycles · contract-only cycle_createdAfter durable creation; no replay duplicate.
cycle_archivedWhen creation replaces an incumbent active cycle; reason replaced.
Tool result → cycle widgetSuccessful create/archive/activate.planned · contract-onlyWidget receives the tool result; it does not call the service.
1 unresolved obligation
  • Bind list/detail variants and include bounded objectives for a cycle detail; never render a deleted cycle.
cycle_lifecycletool · contract-onlycyclesF2 Cycles MCP → cycle_lifecycle [archive]Mapping: bound cycles.updateF2 Cycles · contract-only cycle_archivedWhen status changes to archived (manual), or activation replaces the incumbent (replaced); never for date/field edits or no-op status. Tool result → cycle widgetSuccessful create/archive/activate.planned · contract-only
1 unresolved obligation
  • Bind list/detail variants and include bounded objectives for a cycle detail; never render a deleted cycle.
cyclewidget · contract-onlyCycleF2 Cycles MCP → cycle_lifecycle [archive]Mapping: bound cycles.updateF2 Cycles · contract-only cycle_archivedWhen status changes to archived (manual), or activation replaces the incumbent (replaced); never for date/field edits or no-op status. Tool result → cycle widgetSuccessful create/archive/activate.planned · contract-onlyWidget receives the tool result; it does not call the service.
1 unresolved obligation
  • Bind list/detail variants and include bounded objectives for a cycle detail; never render a deleted cycle.
cycle_lifecycletool · contract-onlycyclesF2 Cycles MCP → cycle_lifecycle [activate]Mapping: bound cycles.updateF2 Cycles · contract-only cycle_archivedWhen status changes to archived (manual), or activation replaces the incumbent (replaced); never for date/field edits or no-op status. Tool result → cycle widgetSuccessful create/archive/activate.planned · contract-only
1 unresolved obligation
  • Bind list/detail variants and include bounded objectives for a cycle detail; never render a deleted cycle.
cyclewidget · contract-onlyCycleF2 Cycles MCP → cycle_lifecycle [activate]Mapping: bound cycles.updateF2 Cycles · contract-only cycle_archivedWhen status changes to archived (manual), or activation replaces the incumbent (replaced); never for date/field edits or no-op status. Tool result → cycle widgetSuccessful create/archive/activate.planned · contract-onlyWidget receives the tool result; it does not call the service.
1 unresolved obligation
  • Bind list/detail variants and include bounded objectives for a cycle detail; never render a deleted cycle.
cycle_deletetool · contract-onlycyclesF2 Cycles MCP → cycle_delete [preview]Mapping: bound cycles.preview_deletionF2 Cycles · contract-only No emissions declared
cycle_deletetool · contract-onlycyclesF2 Cycles MCP → cycle_delete [commit]Mapping: bound cycles.deleteF2 Cycles · contract-only No emissions declared
objective_readtool · contract-onlyobjectivesF3 Objectives MCP → objective_read [list]Mapping: planned objectives.listF3 Objectives · contract-only No emissions declared
objective_readtool · contract-onlyobjectivesF3 Objectives MCP → objective_read [get]Mapping: planned objectives.getF3 Objectives · contract-only No emissions declared Tool result → objective widgetget for an existing objective.planned · contract-only
1 unresolved obligation
  • Compact MCP records omit cycle, results and actions required by the page-mirroring payload.
objectivewidget · contract-onlyObjectiveF3 Objectives MCP → objective_read [get]Mapping: planned objectives.getF3 Objectives · contract-only No emissions declared Tool result → objective widgetget for an existing objective.planned · contract-onlyWidget receives the tool result; it does not call the service.
1 unresolved obligation
  • Compact MCP records omit cycle, results and actions required by the page-mirroring payload.
objective_writetool · contract-onlyobjectivesF3 Objectives MCP → objective_write [create]Mapping: planned objectives.createF3 Objectives · contract-only objective_createdAfter durable creation; no replay duplicate. Tool result → objective widgetSuccessful create/update.planned · contract-only
1 unresolved obligation
  • Compact MCP records omit cycle, results and actions required by the page-mirroring payload.
objectivewidget · contract-onlyObjectiveF3 Objectives MCP → objective_write [create]Mapping: planned objectives.createF3 Objectives · contract-only objective_createdAfter durable creation; no replay duplicate. Tool result → objective widgetSuccessful create/update.planned · contract-onlyWidget receives the tool result; it does not call the service.
1 unresolved obligation
  • Compact MCP records omit cycle, results and actions required by the page-mirroring payload.
objective_writetool · contract-onlyobjectivesF3 Objectives MCP → objective_write [update]Mapping: planned objectives.updateF3 Objectives · contract-only No emissions declared Tool result → objective widgetSuccessful create/update.planned · contract-only
1 unresolved obligation
  • Compact MCP records omit cycle, results and actions required by the page-mirroring payload.
objectivewidget · contract-onlyObjectiveF3 Objectives MCP → objective_write [update]Mapping: planned objectives.updateF3 Objectives · contract-only No emissions declared Tool result → objective widgetSuccessful create/update.planned · contract-onlyWidget receives the tool result; it does not call the service.
1 unresolved obligation
  • Compact MCP records omit cycle, results and actions required by the page-mirroring payload.
objective_deletetool · contract-onlyobjectivesF3 Objectives MCP → objective_delete [preview]Mapping: planned objectives.preview_deletionF3 Objectives · contract-only No emissions declared
objective_deletetool · contract-onlyobjectivesF3 Objectives MCP → objective_delete [commit]Mapping: planned objectives.deleteF3 Objectives · contract-only No emissions declared
result_readtool · contract-onlyresultsF4 Results MCP → result_read [list]Mapping: planned results.listF4 Results · contract-only No emissions declared
result_readtool · contract-onlyresultsF4 Results MCP → result_read [get]Mapping: planned results.getF4 Results · contract-only No emissions declared Tool result → result widgetget for an existing result.planned · contract-only
1 unresolved obligation
  • Supply bounded parent figures, trend and evidence alongside the compact MCP result.
resultwidget · contract-onlyResultF4 Results MCP → result_read [get]Mapping: planned results.getF4 Results · contract-only No emissions declared Tool result → result widgetget for an existing result.planned · contract-onlyWidget receives the tool result; it does not call the service.
1 unresolved obligation
  • Supply bounded parent figures, trend and evidence alongside the compact MCP result.
result_readtool · contract-onlyresultsF4 Results MCP → result_read [history]Mapping: planned results.historyF4 Results · contract-only No emissions declared
result_writetool · contract-onlyresultsF4 Results MCP → result_write [create]Mapping: planned results.createF4 Results · contract-only No emissions declared Tool result → result widgetSuccessful create/update.planned · contract-only
1 unresolved obligation
  • Supply bounded parent figures, trend and evidence alongside the compact MCP result.
resultwidget · contract-onlyResultF4 Results MCP → result_write [create]Mapping: planned results.createF4 Results · contract-only No emissions declared Tool result → result widgetSuccessful create/update.planned · contract-onlyWidget receives the tool result; it does not call the service.
1 unresolved obligation
  • Supply bounded parent figures, trend and evidence alongside the compact MCP result.
result_writetool · contract-onlyresultsF4 Results MCP → result_write [update]Mapping: planned results.updateF4 Results · contract-only No emissions declared Tool result → result widgetSuccessful create/update.planned · contract-only
1 unresolved obligation
  • Supply bounded parent figures, trend and evidence alongside the compact MCP result.
resultwidget · contract-onlyResultF4 Results MCP → result_write [update]Mapping: planned results.updateF4 Results · contract-only No emissions declared Tool result → result widgetSuccessful create/update.planned · contract-onlyWidget receives the tool result; it does not call the service.
1 unresolved obligation
  • Supply bounded parent figures, trend and evidence alongside the compact MCP result.
result_deletetool · contract-onlyresultsF4 Results MCP → result_delete [preview]Mapping: planned results.preview_deletionF4 Results · contract-only No emissions declared
result_deletetool · contract-onlyresultsF4 Results MCP → result_delete [commit]Mapping: planned results.deleteF4 Results · contract-only No emissions declared
action_readtool · contract-onlyactionsF5 Actions MCP → action_read [list]Mapping: planned actions.listF5 Actions · contract-only No emissions declared Tool result → due_actions widgetlist; open actions grouped by objective in stored order.planned · contract-only
1 unresolved obligation
  • Compose the cycle, objective grouping and remaining open actions server-side; a mutation receipt alone is insufficient.
due_actionswidget · contract-onlyDue actionsF5 Actions MCP → action_read [list]Mapping: planned actions.listF5 Actions · contract-only No emissions declared Tool result → due_actions widgetlist; open actions grouped by objective in stored order.planned · contract-onlyWidget receives the tool result; it does not call the service.
1 unresolved obligation
  • Compose the cycle, objective grouping and remaining open actions server-side; a mutation receipt alone is insufficient.
action_readtool · contract-onlyactionsF5 Actions MCP → action_read [get]Mapping: planned actions.getF5 Actions · contract-only No emissions declared Tool result → action widgetget for an existing action.planned · contract-only
1 unresolved obligation
  • Supply parent labels and bounded action history alongside the compact MCP action.
actionwidget · contract-onlyActionF5 Actions MCP → action_read [get]Mapping: planned actions.getF5 Actions · contract-only No emissions declared Tool result → action widgetget for an existing action.planned · contract-onlyWidget receives the tool result; it does not call the service.
1 unresolved obligation
  • Supply parent labels and bounded action history alongside the compact MCP action.
action_readtool · contract-onlyactionsF5 Actions MCP → action_read [history]Mapping: planned actions.historyF5 Actions · contract-only No emissions declared
action_writetool · contract-onlyactionsF5 Actions MCP → action_write [create]Mapping: planned actions.createF5 Actions · contract-only action_createdAfter durable creation; no replay duplicate. Tool result → due_actions widgetSuccessful create/update; refreshed open-action snapshot.planned · contract-only
Tool result → action widgetSuccessful create/update.planned · contract-only
2 unresolved obligations
  • Compose the cycle, objective grouping and remaining open actions server-side; a mutation receipt alone is insufficient.
  • Supply parent labels and bounded action history alongside the compact MCP action.
due_actionswidget · contract-onlyDue actionsF5 Actions MCP → action_write [create]Mapping: planned actions.createF5 Actions · contract-only action_createdAfter durable creation; no replay duplicate. Tool result → due_actions widgetSuccessful create/update; refreshed open-action snapshot.planned · contract-onlyWidget receives the tool result; it does not call the service.
1 unresolved obligation
  • Compose the cycle, objective grouping and remaining open actions server-side; a mutation receipt alone is insufficient.
actionwidget · contract-onlyActionF5 Actions MCP → action_write [create]Mapping: planned actions.createF5 Actions · contract-only action_createdAfter durable creation; no replay duplicate. Tool result → action widgetSuccessful create/update.planned · contract-onlyWidget receives the tool result; it does not call the service.
1 unresolved obligation
  • Supply parent labels and bounded action history alongside the compact MCP action.
action_writetool · contract-onlyactionsF5 Actions MCP → action_write [update]Mapping: planned actions.updateF5 Actions · contract-only No emissions declared Tool result → due_actions widgetSuccessful create/update; refreshed open-action snapshot.planned · contract-only
Tool result → action widgetSuccessful create/update.planned · contract-only
2 unresolved obligations
  • Compose the cycle, objective grouping and remaining open actions server-side; a mutation receipt alone is insufficient.
  • Supply parent labels and bounded action history alongside the compact MCP action.
due_actionswidget · contract-onlyDue actionsF5 Actions MCP → action_write [update]Mapping: planned actions.updateF5 Actions · contract-only No emissions declared Tool result → due_actions widgetSuccessful create/update; refreshed open-action snapshot.planned · contract-onlyWidget receives the tool result; it does not call the service.
1 unresolved obligation
  • Compose the cycle, objective grouping and remaining open actions server-side; a mutation receipt alone is insufficient.
actionwidget · contract-onlyActionF5 Actions MCP → action_write [update]Mapping: planned actions.updateF5 Actions · contract-only No emissions declared Tool result → action widgetSuccessful create/update.planned · contract-onlyWidget receives the tool result; it does not call the service.
1 unresolved obligation
  • Supply parent labels and bounded action history alongside the compact MCP action.
action_deletetool · contract-onlyactionsF5 Actions MCP → action_delete [preview]Mapping: planned actions.preview_deletionF5 Actions · contract-only No emissions declared
action_deletetool · contract-onlyactionsF5 Actions MCP → action_delete [commit]Mapping: planned actions.deleteF5 Actions · contract-only No emissions declared Tool result → due_actions widgetSuccessful commit; remaining open actions only, never the deleted record.planned · contract-only
1 unresolved obligation
  • Compose the cycle, objective grouping and remaining open actions server-side; a mutation receipt alone is insufficient.
due_actionswidget · contract-onlyDue actionsF5 Actions MCP → action_delete [commit]Mapping: planned actions.deleteF5 Actions · contract-only No emissions declared Tool result → due_actions widgetSuccessful commit; remaining open actions only, never the deleted record.planned · contract-onlyWidget receives the tool result; it does not call the service.
1 unresolved obligation
  • Compose the cycle, objective grouping and remaining open actions server-side; a mutation receipt alone is insufficient.
note_readtool · contract-onlynotesF6 Notes MCP → note_read [list]Mapping: planned notes.listF6 Notes · contract-only No emissions declared Tool result → notes widgetlist; bounded recent notes with the resolved window.planned · contract-only
1 unresolved obligation
  • Project list responses and obtain the bounded refreshed list after a mutation; never repeat writes for pagination.
noteswidget · contract-onlyNotesF6 Notes MCP → note_read [list]Mapping: planned notes.listF6 Notes · contract-only No emissions declared Tool result → notes widgetlist; bounded recent notes with the resolved window.planned · contract-onlyWidget receives the tool result; it does not call the service.
1 unresolved obligation
  • Project list responses and obtain the bounded refreshed list after a mutation; never repeat writes for pagination.
note_readtool · contract-onlynotesF6 Notes MCP → note_read [get]Mapping: planned notes.getF6 Notes · contract-only No emissions declared Tool result → note widgetget for an existing note.planned · contract-only
1 unresolved obligation
  • Bind the note field from structuredContent to the declared payload; stored text stays untrusted.
notewidget · contract-onlyNoteF6 Notes MCP → note_read [get]Mapping: planned notes.getF6 Notes · contract-only No emissions declared Tool result → note widgetget for an existing note.planned · contract-onlyWidget receives the tool result; it does not call the service.
1 unresolved obligation
  • Bind the note field from structuredContent to the declared payload; stored text stays untrusted.
note_writetool · contract-onlynotesF6 Notes MCP → note_write [create]Mapping: planned notes.createF6 Notes · contract-only note_createdAfter durable creation; not autosave updates or receipt replay. Tool result → notes widgetSuccessful create/update; refreshed list.planned · contract-only
Tool result → note widgetSuccessful create/update.planned · contract-only
2 unresolved obligations
  • Project list responses and obtain the bounded refreshed list after a mutation; never repeat writes for pagination.
  • Bind the note field from structuredContent to the declared payload; stored text stays untrusted.
noteswidget · contract-onlyNotesF6 Notes MCP → note_write [create]Mapping: planned notes.createF6 Notes · contract-only note_createdAfter durable creation; not autosave updates or receipt replay. Tool result → notes widgetSuccessful create/update; refreshed list.planned · contract-onlyWidget receives the tool result; it does not call the service.
1 unresolved obligation
  • Project list responses and obtain the bounded refreshed list after a mutation; never repeat writes for pagination.
notewidget · contract-onlyNoteF6 Notes MCP → note_write [create]Mapping: planned notes.createF6 Notes · contract-only note_createdAfter durable creation; not autosave updates or receipt replay. Tool result → note widgetSuccessful create/update.planned · contract-onlyWidget receives the tool result; it does not call the service.
1 unresolved obligation
  • Bind the note field from structuredContent to the declared payload; stored text stays untrusted.
note_writetool · contract-onlynotesF6 Notes MCP → note_write [update]Mapping: planned notes.updateF6 Notes · contract-only No emissions declared Tool result → notes widgetSuccessful create/update; refreshed list.planned · contract-only
Tool result → note widgetSuccessful create/update.planned · contract-only
2 unresolved obligations
  • Project list responses and obtain the bounded refreshed list after a mutation; never repeat writes for pagination.
  • Bind the note field from structuredContent to the declared payload; stored text stays untrusted.
noteswidget · contract-onlyNotesF6 Notes MCP → note_write [update]Mapping: planned notes.updateF6 Notes · contract-only No emissions declared Tool result → notes widgetSuccessful create/update; refreshed list.planned · contract-onlyWidget receives the tool result; it does not call the service.
1 unresolved obligation
  • Project list responses and obtain the bounded refreshed list after a mutation; never repeat writes for pagination.
notewidget · contract-onlyNoteF6 Notes MCP → note_write [update]Mapping: planned notes.updateF6 Notes · contract-only No emissions declared Tool result → note widgetSuccessful create/update.planned · contract-onlyWidget receives the tool result; it does not call the service.
1 unresolved obligation
  • Bind the note field from structuredContent to the declared payload; stored text stays untrusted.
note_deletetool · contract-onlynotesF6 Notes MCP → note_delete [preview]Mapping: planned notes.preview_deletionF6 Notes · contract-only No emissions declared
note_deletetool · contract-onlynotesF6 Notes MCP → note_delete [commit]Mapping: planned notes.deleteF6 Notes · contract-only No emissions declared Tool result → notes widgetSuccessful commit; remaining notes only.planned · contract-only
1 unresolved obligation
  • Project list responses and obtain the bounded refreshed list after a mutation; never repeat writes for pagination.
noteswidget · contract-onlyNotesF6 Notes MCP → note_delete [commit]Mapping: planned notes.deleteF6 Notes · contract-only No emissions declared Tool result → notes widgetSuccessful commit; remaining notes only.planned · contract-onlyWidget receives the tool result; it does not call the service.
1 unresolved obligation
  • Project list responses and obtain the bounded refreshed list after a mutation; never repeat writes for pagination.
user_readtool · contract-onlyuserF1 Identity and billing MCP → user_read [call]Mapping: planned user.getF1 Identity and billing · contract-only No emissions declared
user_updatetool · contract-onlyuserF1 Identity and billing MCP → user_update [call]Mapping: planned user.updateF1 Identity and billing · contract-only profile_updatedWhen at least one editable profile field changes; payload lists changed names only.
session_readtool · contract-onlysessionsF7 Sessions MCP → session_read [list]Mapping: planned sessions.listF7 Sessions · contract-only No emissions declared Tool result → session widgetlist or get for a stored session; skip missing-session results.planned · contract-only
1 unresolved obligation
  • Supply the detail/list variant and bounded session actions; compact session results do not satisfy detail payloads.
sessionwidget · contract-onlySessionF7 Sessions MCP → session_read [list]Mapping: planned sessions.listF7 Sessions · contract-only No emissions declared Tool result → session widgetlist or get for a stored session; skip missing-session results.planned · contract-onlyWidget receives the tool result; it does not call the service.
1 unresolved obligation
  • Supply the detail/list variant and bounded session actions; compact session results do not satisfy detail payloads.
session_readtool · contract-onlysessionsF7 Sessions MCP → session_read [get]Mapping: planned sessions.get_storedF7 Sessions · contract-only No emissions declared Tool result → session widgetlist or get for a stored session; skip missing-session results.planned · contract-only
Tool result → session_document widgetget with a selected stored briefing or summary document.planned · contract-only
2 unresolved obligations
  • Supply the detail/list variant and bounded session actions; compact session results do not satisfy detail payloads.
  • Provide the complete session record and selected canonical document text; render stored text as data, never instructions.
sessionwidget · contract-onlySessionF7 Sessions MCP → session_read [get]Mapping: planned sessions.get_storedF7 Sessions · contract-only No emissions declared Tool result → session widgetlist or get for a stored session; skip missing-session results.planned · contract-onlyWidget receives the tool result; it does not call the service.
1 unresolved obligation
  • Supply the detail/list variant and bounded session actions; compact session results do not satisfy detail payloads.
session_documentwidget · contract-onlySession documentF7 Sessions MCP → session_read [get]Mapping: planned sessions.get_storedF7 Sessions · contract-only No emissions declared Tool result → session_document widgetget with a selected stored briefing or summary document.planned · contract-onlyWidget receives the tool result; it does not call the service.
1 unresolved obligation
  • Provide the complete session record and selected canonical document text; render stored text as data, never instructions.
session_starttool · contract-onlysessionsF7 SessionsCross-feature MCP → session_start [call]Mapping: planned sessions.startF7 Sessions · contract-only session_startedOnly when a new session is persisted; not existing-session reuse. Tool result → progress widgetActive access only; render the current cycle and objectives/results snapshot.planned · contract-only
Tool result → session_document widgetActive access only; saved briefing document.planned · contract-only
2 unresolved obligations
  • Project the active briefing into the dashboard payload; no coaching card for unpaid access.
  • Provide the complete session record and selected canonical document text; render stored text as data, never instructions.
coaching_sessionprompt · unavailableCoaching sessionCross-feature MCP → session_start [call]Mapping: planned sessions.startF7 Sessions · contract-only session_startedOnly when a new session is persisted; not existing-session reuse. Tool result → progress widgetActive access only; render the current cycle and objectives/results snapshot.planned · contract-only
Tool result → session_document widgetActive access only; saved briefing document.planned · contract-onlyRequired capability; declaration does not prescribe execution order.
2 unresolved obligations
  • Project the active briefing into the dashboard payload; no coaching card for unpaid access.
  • Provide the complete session record and selected canonical document text; render stored text as data, never instructions.
progresswidget · contract-onlyProgressF3 ObjectivesCross-feature MCP → session_start [call]Mapping: planned sessions.startF7 Sessions · contract-only session_startedOnly when a new session is persisted; not existing-session reuse. Tool result → progress widgetActive access only; render the current cycle and objectives/results snapshot.planned · contract-onlyWidget receives the tool result; it does not call the service.
1 unresolved obligation
  • Project the active briefing into the dashboard payload; no coaching card for unpaid access.
session_documentwidget · contract-onlySession documentF7 Sessions MCP → session_start [call]Mapping: planned sessions.startF7 Sessions · contract-only session_startedOnly when a new session is persisted; not existing-session reuse. Tool result → session_document widgetActive access only; saved briefing document.planned · contract-onlyWidget receives the tool result; it does not call the service.
1 unresolved obligation
  • Provide the complete session record and selected canonical document text; render stored text as data, never instructions.
session_closetool · contract-onlysessionsF7 Sessions MCP → session_close [call]Mapping: planned sessions.closeF7 Sessions · contract-only session_summary_writtenOn the first successful close with summary; not replay or forced stale close. Tool result → session widgetSuccessful explicit closure; show the saved summary and session actions.planned · contract-only
1 unresolved obligation
  • Supply the detail/list variant and bounded session actions; compact session results do not satisfy detail payloads.
coaching_sessionprompt · unavailableCoaching session MCP → session_close [call]Mapping: planned sessions.closeF7 Sessions · contract-only session_summary_writtenOn the first successful close with summary; not replay or forced stale close. Tool result → session widgetSuccessful explicit closure; show the saved summary and session actions.planned · contract-onlyRequired capability; declaration does not prescribe execution order.
1 unresolved obligation
  • Supply the detail/list variant and bounded session actions; compact session results do not satisfy detail payloads.
sessionwidget · contract-onlySessionF7 Sessions MCP → session_close [call]Mapping: planned sessions.closeF7 Sessions · contract-only session_summary_writtenOn the first successful close with summary; not replay or forced stale close. Tool result → session widgetSuccessful explicit closure; show the saved summary and session actions.planned · contract-onlyWidget receives the tool result; it does not call the service.
1 unresolved obligation
  • Supply the detail/list variant and bounded session actions; compact session results do not satisfy detail payloads.
progress_recordtool · contract-onlyprogressF4 Results MCP → progress_record [result]Mapping: planned result_logs.createF4 Results · contract-only result_update_recordedWhen numeric/performance evidence or a milestone flip is saved; not comment-only rows. Tool result → result widgetSuccessful result or habit evidence entry.planned · contract-only
1 unresolved obligation
  • Supply bounded parent figures, trend and evidence alongside the compact MCP result.
resultwidget · contract-onlyResultF4 Results MCP → progress_record [result]Mapping: planned result_logs.createF4 Results · contract-only result_update_recordedWhen numeric/performance evidence or a milestone flip is saved; not comment-only rows. Tool result → result widgetSuccessful result or habit evidence entry.planned · contract-onlyWidget receives the tool result; it does not call the service.
1 unresolved obligation
  • Supply bounded parent figures, trend and evidence alongside the compact MCP result.
progress_recordtool · contract-onlyprogressF4 Results MCP → progress_record [habit]Mapping: planned habit_logs.setF4 Results · contract-only result_update_recordedWhen a habit mark/unmark changes recorded progress; not comment-only changes or replay. Tool result → result widgetSuccessful result or habit evidence entry.planned · contract-only
1 unresolved obligation
  • Supply bounded parent figures, trend and evidence alongside the compact MCP result.
resultwidget · contract-onlyResultF4 Results MCP → progress_record [habit]Mapping: planned habit_logs.setF4 Results · contract-only result_update_recordedWhen a habit mark/unmark changes recorded progress; not comment-only changes or replay. Tool result → result widgetSuccessful result or habit evidence entry.planned · contract-onlyWidget receives the tool result; it does not call the service.
1 unresolved obligation
  • Supply bounded parent figures, trend and evidence alongside the compact MCP result.
progress_recordtool · contract-onlyprogressF4 ResultsCross-feature MCP → progress_record [action]Mapping: planned action_logs.createF5 Actions · contract-only action_status_changedFor each persisted log, including repeat status with comment; not receipt replay. Tool result → due_actions widgetSuccessful action evidence entry; refreshed open-action snapshot.planned · contract-only
1 unresolved obligation
  • Compose the cycle, objective grouping and remaining open actions server-side; a mutation receipt alone is insufficient.
due_actionswidget · contract-onlyDue actionsF5 Actions MCP → progress_record [action]Mapping: planned action_logs.createF5 Actions · contract-only action_status_changedFor each persisted log, including repeat status with comment; not receipt replay. Tool result → due_actions widgetSuccessful action evidence entry; refreshed open-action snapshot.planned · contract-onlyWidget receives the tool result; it does not call the service.
1 unresolved obligation
  • Compose the cycle, objective grouping and remaining open actions server-side; a mutation receipt alone is insufficient.
example_listtool · implementedRetained scaffoldTemporary scaffold reference MCP → example_list [call] No service mapping No emissions declared Retained scaffold; no product service descriptor is declared.
examplewidget · implementedExampleTemporary scaffold reference MCP → example_list [call] No service mapping No emissions declared Tool result → example widgetSuccessful list.bound · implementedRetained scaffold; no product service descriptor is declared.
example_createtool · implementedRetained scaffoldTemporary scaffold reference MCP → example_create [call] No service mapping No emissions declared Retained scaffold; no product service descriptor is declared.
cycles.preview_deletionapi · declaredNo declared page or overlay consumer API → cycles.preview_deletionMapping: bound cycles.preview_deletionF2 Cycles · contract-only No emissions declared
objectives.preview_deletionapi · declaredNo declared page or overlay consumer API → objectives.preview_deletionMapping: bound objectives.preview_deletionF3 Objectives · contract-only No emissions declared
objectives.listapi · declaredNo declared page or overlay consumer API → objectives.listMapping: bound objectives.listF3 Objectives · contract-only No emissions declared
results.preview_deletionapi · declaredNo declared page or overlay consumer API → results.preview_deletionMapping: bound results.preview_deletionF4 Results · contract-only No emissions declared
results.listapi · declaredNo declared page or overlay consumer API → results.listMapping: bound results.listF4 Results · contract-only No emissions declared
actions.preview_deletionapi · declaredNo declared page or overlay consumer API → actions.preview_deletionMapping: bound actions.preview_deletionF5 Actions · contract-only No emissions declared
notes.preview_deletionapi · declaredNo declared page or overlay consumer API → notes.preview_deletionMapping: bound notes.preview_deletionF6 Notes · contract-only No emissions declared
sessions.startapi · declaredNo declared page or overlay consumer API → sessions.startMapping: bound sessions.startF7 Sessions · contract-only session_startedOnly when a new session is persisted; not existing-session reuse.
sessions.closeapi · declaredNo declared page or overlay consumer API → sessions.closeMapping: bound sessions.closeF7 Sessions · contract-only session_summary_writtenOn the first successful close with summary; not replay or forced stale close.
chat_tool_usedexternal-event · declaredMCP tool call outcome; no stored coaching content.F7 Sessions — No service mapping chat_tool_used External producers: mcp-boundary — packages/core/src/shared/mcp/index.ts: For a tool call with an authenticated actor; both success and failure outcomes.
1 unresolved obligation
  • Specify treatment of calls without authenticated identity; tenant event storage requires an actor.
account_createdexternal-event · declaredDurable account creation; user_id matches the canonical user UUID.F1 Identity and billing — No service mapping account_created External producers: auth-hook — packages/core/src/shared/auth/server.ts: After a newly persisted account.
subscription_startedexternal-event · declaredFirst transition to active paid access.F1 Identity and billing — No service mapping subscription_started External producers: billing-webhook — packages/core/src/features/identity-billing/handler.ts: On the first verified transition to active; not checkout URL creation.
subscription_cancelledexternal-event · declaredOnce per scheduled or immediate cancellation; no duplicate webhook delivery.F1 Identity and billing — No service mapping subscription_cancelled External producers: billing-webhook — packages/core/src/features/identity-billing/handler.ts: On a newly applied scheduled or immediate cancellation, not a duplicate delivery.
connector_authorisedexternal-event · declaredNew durable connector consent; not a replay.F1 Identity and billing — No service mapping connector_authorised External producers: auth-hook — packages/core/src/shared/auth/server.ts: After new connector consent is persisted.
onboarding_step_completedexternal-event · declaredVerified onboarding step completion; never inferred from a redirect alone.F1 Identity and billing — No service mapping onboarding_step_completed External producers: page — packages/core/src/features/identity-billing/onboarding.page.tsx: After verified step completion; no new public event API is authorized.
1 unresolved obligation
  • Specify trusted server recording and repeat-visit deduplication; the page alone is not an authorized event writer.
example_createdexternal-event · declaredRetained scaffold: one event per fresh example write in the same transaction.packages/core/src/features/example/docs.md — No service mapping example_created No service or external producer declared.
Underlying inventories and model reference

Data model reference

{
  "source": "packages/core/src/contracts/schema.ts",
  "ontology": "docs/ONTOLOGY.md",
  "relationship": "Each service declares the tables it touches (`tables`); names are checked against this schema by a contract test. Declarations are design obligations, not enforced access."
}

Starter prompts

[
  {
    "name": "coaching_session",
    "title": "Coaching session",
    "description": "Open a flexible coaching session: adapt to goal setup, check-in, review or open coaching within one session.",
    "requiredTools": [
      "session_start",
      "session_close"
    ],
    "available": false
  }
]

Pages

[
  {
    "path": "/terms",
    "title": "Terms",
    "owner": "Scaffold legal-route continuity",
    "implementation": "scaffold",
    "overlays": [],
    "reads": [],
    "writes": [],
    "services": []
  },
  {
    "path": "/privacy",
    "title": "Privacy",
    "owner": "Scaffold legal-route continuity",
    "implementation": "scaffold",
    "overlays": [],
    "reads": [],
    "writes": [],
    "services": []
  },
  {
    "path": "/cookies",
    "title": "Cookies",
    "owner": "Scaffold legal-route continuity",
    "implementation": "scaffold",
    "overlays": [],
    "reads": [],
    "writes": [],
    "services": []
  },
  {
    "path": "/example",
    "title": "Example",
    "owner": "Temporary scaffold reference",
    "implementation": "scaffold",
    "overlays": [],
    "reads": [
      "example.list"
    ],
    "writes": [
      "example.create",
      "example.delete"
    ],
    "services": []
  },
  {
    "path": "/",
    "title": "Objectives",
    "owner": "F3 Objectives",
    "implementation": "pending",
    "overlays": [
      "result-update-dial",
      "note-editor"
    ],
    "reads": [
      "record.query"
    ],
    "writes": [
      "objectives.create"
    ],
    "services": [
      "record.query",
      "objectives.create"
    ]
  },
  {
    "path": "/objectives/:id",
    "title": "Objective",
    "owner": "F3 Objectives",
    "implementation": "pending",
    "overlays": [
      "result-update-dial"
    ],
    "reads": [
      "objectives.get"
    ],
    "writes": [
      "objectives.create",
      "objectives.update",
      "objectives.delete",
      "results.create",
      "actions.create",
      "action_logs.create"
    ],
    "services": [
      "objectives.get",
      "objectives.create",
      "objectives.update",
      "objectives.delete",
      "results.create",
      "actions.create",
      "action_logs.create"
    ]
  },
  {
    "path": "/results/:id",
    "title": "Result",
    "owner": "F4 Results",
    "implementation": "pending",
    "overlays": [
      "result-update-dial"
    ],
    "reads": [
      "results.get",
      "result_logs.list",
      "habit_logs.list"
    ],
    "writes": [
      "results.create",
      "results.update",
      "results.delete",
      "result_logs.create",
      "result_logs.clear_comment",
      "result_logs.delete",
      "habit_logs.set"
    ],
    "services": [
      "results.get",
      "result_logs.list",
      "habit_logs.list",
      "results.create",
      "results.update",
      "results.delete",
      "result_logs.create",
      "result_logs.clear_comment",
      "result_logs.delete",
      "habit_logs.set"
    ]
  },
  {
    "path": "/actions",
    "title": "Actions",
    "owner": "F5 Actions",
    "implementation": "pending",
    "overlays": [],
    "reads": [
      "actions.list"
    ],
    "writes": [
      "actions.create",
      "actions.reorder",
      "action_logs.create"
    ],
    "services": [
      "actions.list",
      "actions.create",
      "actions.reorder",
      "action_logs.create"
    ]
  },
  {
    "path": "/actions/:id",
    "title": "Action",
    "owner": "F5 Actions",
    "implementation": "pending",
    "overlays": [],
    "reads": [
      "actions.get",
      "action_logs.list"
    ],
    "writes": [
      "actions.create",
      "actions.update",
      "actions.delete",
      "action_logs.create",
      "action_logs.clear_comment"
    ],
    "services": [
      "actions.get",
      "action_logs.list",
      "actions.create",
      "actions.update",
      "actions.delete",
      "action_logs.create",
      "action_logs.clear_comment"
    ]
  },
  {
    "path": "/notes",
    "title": "Notes",
    "owner": "F6 Notes",
    "implementation": "pending",
    "overlays": [
      "note-editor"
    ],
    "reads": [
      "notes.list"
    ],
    "writes": [
      "notes.delete"
    ],
    "services": [
      "notes.list",
      "notes.delete"
    ]
  },
  {
    "path": "/notes/:id",
    "title": "Note",
    "owner": "F6 Notes",
    "implementation": "pending",
    "overlays": [],
    "reads": [
      "notes.get"
    ],
    "writes": [
      "notes.update",
      "notes.delete"
    ],
    "services": [
      "notes.get",
      "notes.update",
      "notes.delete"
    ]
  },
  {
    "path": "/sessions",
    "title": "Sessions",
    "owner": "F7 Sessions",
    "implementation": "pending",
    "overlays": [],
    "reads": [
      "sessions.list"
    ],
    "writes": [],
    "services": [
      "sessions.list"
    ]
  },
  {
    "path": "/sessions/:id",
    "title": "Session",
    "owner": "F7 Sessions",
    "implementation": "pending",
    "overlays": [],
    "reads": [
      "sessions.get"
    ],
    "writes": [
      "action_logs.create"
    ],
    "services": [
      "sessions.get",
      "action_logs.create"
    ]
  },
  {
    "path": "/sessions/:id/briefing",
    "title": "Briefing",
    "owner": "F7 Sessions",
    "implementation": "pending",
    "overlays": [],
    "reads": [
      "sessions.get"
    ],
    "writes": [],
    "services": [
      "sessions.get"
    ]
  },
  {
    "path": "/sessions/:id/summary",
    "title": "Session summary",
    "owner": "F7 Sessions",
    "implementation": "pending",
    "overlays": [],
    "reads": [
      "sessions.get"
    ],
    "writes": [],
    "services": [
      "sessions.get"
    ]
  },
  {
    "path": "/cycles",
    "title": "Cycles",
    "owner": "F2 Cycles",
    "implementation": "pending",
    "overlays": [],
    "reads": [
      "cycles.list"
    ],
    "writes": [],
    "services": [
      "cycles.list"
    ]
  },
  {
    "path": "/cycles/new",
    "title": "Set up a cycle",
    "owner": "F2 Cycles",
    "implementation": "pending",
    "overlays": [],
    "reads": [],
    "writes": [
      "cycles.create"
    ],
    "services": [
      "cycles.create"
    ]
  },
  {
    "path": "/cycles/:id",
    "title": "Cycle",
    "owner": "F2 Cycles",
    "implementation": "pending",
    "overlays": [],
    "reads": [
      "cycles.get"
    ],
    "writes": [
      "cycles.update",
      "cycles.delete"
    ],
    "services": [
      "cycles.get",
      "cycles.update",
      "cycles.delete"
    ]
  },
  {
    "path": "/settings",
    "title": "Settings",
    "owner": "F1 Identity and billing",
    "implementation": "pending",
    "overlays": [],
    "reads": [
      "user.get",
      "cycles.resolve_active",
      "billing.get_details"
    ],
    "writes": [
      "user.update",
      "user.delete",
      "billing.create_portal_session",
      "billing.create_checkout_session"
    ],
    "services": [
      "user.get",
      "cycles.resolve_active",
      "billing.get_details",
      "user.update",
      "user.delete",
      "billing.create_portal_session",
      "billing.create_checkout_session"
    ]
  },
  {
    "path": "/onboarding",
    "title": "Set up your coaching",
    "owner": "F1 Identity and billing",
    "implementation": "pending",
    "overlays": [],
    "reads": [
      "user.get"
    ],
    "writes": [
      "billing.create_checkout_session"
    ],
    "services": [
      "user.get",
      "billing.create_checkout_session"
    ]
  },
  {
    "path": "/sign-in",
    "title": "Sign in",
    "owner": "F1 Identity and billing",
    "implementation": "live",
    "overlays": [],
    "reads": [],
    "writes": [],
    "services": []
  },
  {
    "path": "/sign-up",
    "title": "Sign up",
    "owner": "F1 Identity and billing",
    "implementation": "live",
    "overlays": [],
    "reads": [],
    "writes": [],
    "services": []
  },
  {
    "path": "/oauth/consent",
    "title": "Authorize",
    "owner": "F1 Identity and billing",
    "implementation": "live",
    "overlays": [],
    "reads": [],
    "writes": [],
    "services": []
  }
]

Overlays

[
  {
    "name": "result-update-dial",
    "title": "Update Result value",
    "owner": "F4 Results",
    "input": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "result_id": {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
        }
      },
      "required": [
        "result_id"
      ],
      "additionalProperties": false
    },
    "procedures": [
      "results.get",
      "result_logs.create",
      "habit_logs.set"
    ],
    "services": [
      "results.get",
      "result_logs.create",
      "habit_logs.set"
    ],
    "opened_by": [
      "/",
      "/objectives/:id",
      "/results/:id"
    ]
  },
  {
    "name": "note-editor",
    "title": "Capture or edit a note",
    "owner": "F6 Notes",
    "input": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "oneOf": [
        {
          "type": "object",
          "properties": {
            "mode": {
              "type": "string",
              "const": "create"
            }
          },
          "required": [
            "mode"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "mode": {
              "type": "string",
              "const": "edit"
            },
            "note_id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
            }
          },
          "required": [
            "mode",
            "note_id"
          ],
          "additionalProperties": false
        }
      ]
    },
    "procedures": [
      "notes.get",
      "notes.create",
      "notes.update",
      "notes.delete"
    ],
    "services": [
      "notes.get",
      "notes.create",
      "notes.update",
      "notes.delete"
    ],
    "opened_by": [
      "/",
      "/notes"
    ]
  }
]

Widget payloads and sources

[
  {
    "id": "progress",
    "title": "Progress",
    "owner": "F3 Objectives",
    "kind": "product",
    "pages": [
      "/"
    ],
    "resource_uri": "ui://widget/progress.v1.html",
    "payload": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "as_of": {
          "type": "string",
          "format": "date-time",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
          "description": "Server snapshot time for the stale-snapshot footer."
        },
        "data": {
          "anyOf": [
            {
              "type": "object",
              "properties": {
                "as_of": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "boundary": {
                  "type": "object",
                  "properties": {
                    "at": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "date-time",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "session_id": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "source": {
                      "type": "string",
                      "enum": [
                        "session",
                        "cycle_start",
                        "none"
                      ]
                    }
                  },
                  "required": [
                    "at",
                    "session_id",
                    "source"
                  ],
                  "additionalProperties": false
                },
                "cycle": {
                  "anyOf": [
                    {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                        },
                        "intention": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "UI label: Intention. Optional guiding focus; the cycle is identified by its date range, not a name."
                        },
                        "start_at": {
                          "type": "string",
                          "format": "date",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                          "description": "UI label: Starts."
                        },
                        "end_at": {
                          "type": "string",
                          "format": "date",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                          "description": "UI label: Ends."
                        },
                        "status": {
                          "type": "string",
                          "enum": [
                            "active",
                            "archived"
                          ]
                        },
                        "created_at": {
                          "type": "string",
                          "format": "date-time",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                        },
                        "url": {
                          "type": "string",
                          "format": "uri"
                        },
                        "achievement_pct": {
                          "anyOf": [
                            {
                              "type": "number"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "UI label: Achievement. Derived from objective progress; unavailable when nothing is measurable."
                        },
                        "time_gone_pct": {
                          "type": "number",
                          "minimum": 0,
                          "maximum": 100,
                          "description": "UI label: Time gone. Derived percentage of the cycle elapsed."
                        },
                        "length_weeks": {
                          "type": "integer",
                          "minimum": -9007199254740991,
                          "maximum": 9007199254740991,
                          "description": "UI label: Length, in weeks; derived from Starts and Ends."
                        }
                      },
                      "required": [
                        "id",
                        "intention",
                        "start_at",
                        "end_at",
                        "status",
                        "created_at",
                        "url",
                        "achievement_pct",
                        "time_gone_pct",
                        "length_weeks"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "cycle_line": {
                  "anyOf": [
                    {
                      "type": "object",
                      "properties": {
                        "range": {
                          "type": "string"
                        },
                        "time_gone_pct": {
                          "type": "number",
                          "minimum": 0,
                          "maximum": 100
                        }
                      },
                      "required": [
                        "range",
                        "time_gone_pct"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "objectives": {
                  "type": "object",
                  "properties": {
                    "items": {
                      "maxItems": 50,
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "id": {
                            "type": "string",
                            "format": "uuid",
                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                            "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                          },
                          "cycle_id": {
                            "type": "string",
                            "format": "uuid",
                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                            "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                          },
                          "title": {
                            "type": "string"
                          },
                          "description": {
                            "type": "string"
                          },
                          "deadline_at": {
                            "anyOf": [
                              {
                                "type": "string",
                                "format": "date",
                                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                                "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                              },
                              {
                                "type": "null"
                              }
                            ],
                            "description": "UI label: Deadline; null when no deadline has been set."
                          },
                          "status": {
                            "type": "string",
                            "enum": [
                              "on_track",
                              "off_track",
                              "completed"
                            ],
                            "description": "Objective status: On track, Off track or Completed. Coaching judgment, independent of the derived Progress percentage."
                          },
                          "created_at": {
                            "type": "string",
                            "format": "date-time",
                            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                          },
                          "short_code": {
                            "type": "string",
                            "minLength": 1
                          },
                          "url": {
                            "type": "string",
                            "format": "uri"
                          },
                          "progress_pct": {
                            "anyOf": [
                              {
                                "type": "number"
                              },
                              {
                                "type": "null"
                              }
                            ],
                            "description": "UI label: Progress. Derived from measurable results, independently of Status."
                          },
                          "boundary_progress_pct": {
                            "anyOf": [
                              {
                                "type": "number"
                              },
                              {
                                "type": "null"
                              }
                            ],
                            "description": "Historical progress at the resolved last-session boundary; not current Progress."
                          },
                          "movement_pp": {
                            "anyOf": [
                              {
                                "type": "number"
                              },
                              {
                                "type": "null"
                              }
                            ]
                          }
                        },
                        "required": [
                          "id",
                          "cycle_id",
                          "title",
                          "description",
                          "deadline_at",
                          "status",
                          "created_at",
                          "short_code",
                          "url",
                          "progress_pct",
                          "boundary_progress_pct",
                          "movement_pp"
                        ],
                        "additionalProperties": false
                      }
                    },
                    "next_cursor": {
                      "anyOf": [
                        {
                          "type": "string",
                          "minLength": 1
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "items",
                    "next_cursor"
                  ],
                  "additionalProperties": false
                },
                "results": {
                  "type": "object",
                  "properties": {
                    "items": {
                      "maxItems": 50,
                      "type": "array",
                      "items": {
                        "oneOf": [
                          {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                              },
                              "objective_id": {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                              },
                              "title": {
                                "type": "string"
                              },
                              "description": {
                                "anyOf": [
                                  {
                                    "type": "string"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "metric_type": {
                                "type": "string",
                                "const": "number"
                              },
                              "start_value": {
                                "type": "number"
                              },
                              "target_value": {
                                "type": "number"
                              },
                              "unit": {
                                "anyOf": [
                                  {
                                    "type": "string"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ],
                                "description": "UI label: Unit. Used by Number and Performance results."
                              },
                              "cadence": {
                                "type": "null"
                              },
                              "per": {
                                "type": "null"
                              },
                              "since": {
                                "type": "null"
                              },
                              "status": {
                                "type": "string",
                                "enum": [
                                  "in_progress",
                                  "completed"
                                ],
                                "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                              },
                              "created_at": {
                                "type": "string",
                                "format": "date-time",
                                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                              },
                              "short_code": {
                                "type": "string",
                                "minLength": 1
                              },
                              "url": {
                                "type": "string",
                                "format": "uri"
                              },
                              "current_value": {
                                "type": "number",
                                "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                              },
                              "boundary_value": {
                                "type": "number"
                              },
                              "progress_pct": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "boundary_progress_pct": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "movement": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "movement_pp": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "evidence_count": {
                                "type": "integer",
                                "minimum": 0,
                                "maximum": 9007199254740991
                              },
                              "last_recorded_at": {
                                "anyOf": [
                                  {
                                    "type": "string",
                                    "format": "date-time",
                                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "habit_expected_since_boundary": {
                                "anyOf": [
                                  {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "habit_logs_since_boundary": {
                                "anyOf": [
                                  {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "performance_share": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              }
                            },
                            "required": [
                              "id",
                              "objective_id",
                              "title",
                              "description",
                              "metric_type",
                              "start_value",
                              "target_value",
                              "unit",
                              "cadence",
                              "per",
                              "since",
                              "status",
                              "created_at",
                              "short_code",
                              "url",
                              "current_value",
                              "boundary_value",
                              "progress_pct",
                              "boundary_progress_pct",
                              "movement",
                              "movement_pp",
                              "evidence_count",
                              "last_recorded_at",
                              "habit_expected_since_boundary",
                              "habit_logs_since_boundary",
                              "performance_share"
                            ],
                            "additionalProperties": false
                          },
                          {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                              },
                              "objective_id": {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                              },
                              "title": {
                                "type": "string"
                              },
                              "description": {
                                "anyOf": [
                                  {
                                    "type": "string"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "metric_type": {
                                "type": "string",
                                "const": "percentage"
                              },
                              "start_value": {
                                "type": "number",
                                "minimum": 0,
                                "maximum": 100
                              },
                              "target_value": {
                                "type": "number",
                                "minimum": 0,
                                "maximum": 100
                              },
                              "unit": {
                                "type": "null"
                              },
                              "cadence": {
                                "type": "null"
                              },
                              "per": {
                                "type": "null"
                              },
                              "since": {
                                "type": "null"
                              },
                              "status": {
                                "type": "string",
                                "enum": [
                                  "in_progress",
                                  "completed"
                                ],
                                "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                              },
                              "created_at": {
                                "type": "string",
                                "format": "date-time",
                                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                              },
                              "short_code": {
                                "type": "string",
                                "minLength": 1
                              },
                              "url": {
                                "type": "string",
                                "format": "uri"
                              },
                              "current_value": {
                                "type": "number",
                                "minimum": 0,
                                "maximum": 100
                              },
                              "boundary_value": {
                                "type": "number",
                                "minimum": 0,
                                "maximum": 100
                              },
                              "progress_pct": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "boundary_progress_pct": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "movement": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "movement_pp": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "evidence_count": {
                                "type": "integer",
                                "minimum": 0,
                                "maximum": 9007199254740991
                              },
                              "last_recorded_at": {
                                "anyOf": [
                                  {
                                    "type": "string",
                                    "format": "date-time",
                                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "habit_expected_since_boundary": {
                                "anyOf": [
                                  {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "habit_logs_since_boundary": {
                                "anyOf": [
                                  {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "performance_share": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              }
                            },
                            "required": [
                              "id",
                              "objective_id",
                              "title",
                              "description",
                              "metric_type",
                              "start_value",
                              "target_value",
                              "unit",
                              "cadence",
                              "per",
                              "since",
                              "status",
                              "created_at",
                              "short_code",
                              "url",
                              "current_value",
                              "boundary_value",
                              "progress_pct",
                              "boundary_progress_pct",
                              "movement",
                              "movement_pp",
                              "evidence_count",
                              "last_recorded_at",
                              "habit_expected_since_boundary",
                              "habit_logs_since_boundary",
                              "performance_share"
                            ],
                            "additionalProperties": false
                          },
                          {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                              },
                              "objective_id": {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                              },
                              "title": {
                                "type": "string"
                              },
                              "description": {
                                "anyOf": [
                                  {
                                    "type": "string"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "metric_type": {
                                "type": "string",
                                "const": "milestone"
                              },
                              "start_value": {
                                "type": "number",
                                "const": 0
                              },
                              "target_value": {
                                "type": "number",
                                "const": 1
                              },
                              "unit": {
                                "type": "null"
                              },
                              "cadence": {
                                "type": "null"
                              },
                              "per": {
                                "type": "null"
                              },
                              "since": {
                                "type": "null"
                              },
                              "status": {
                                "type": "string",
                                "enum": [
                                  "in_progress",
                                  "completed"
                                ],
                                "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                              },
                              "created_at": {
                                "type": "string",
                                "format": "date-time",
                                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                              },
                              "short_code": {
                                "type": "string",
                                "minLength": 1
                              },
                              "url": {
                                "type": "string",
                                "format": "uri"
                              },
                              "current_value": {
                                "anyOf": [
                                  {
                                    "type": "number",
                                    "const": 0
                                  },
                                  {
                                    "type": "number",
                                    "const": 1
                                  }
                                ]
                              },
                              "boundary_value": {
                                "anyOf": [
                                  {
                                    "type": "number",
                                    "const": 0
                                  },
                                  {
                                    "type": "number",
                                    "const": 1
                                  }
                                ]
                              },
                              "progress_pct": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "boundary_progress_pct": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "movement": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "movement_pp": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "evidence_count": {
                                "type": "integer",
                                "minimum": 0,
                                "maximum": 9007199254740991
                              },
                              "last_recorded_at": {
                                "anyOf": [
                                  {
                                    "type": "string",
                                    "format": "date-time",
                                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "habit_expected_since_boundary": {
                                "anyOf": [
                                  {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "habit_logs_since_boundary": {
                                "anyOf": [
                                  {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "performance_share": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              }
                            },
                            "required": [
                              "id",
                              "objective_id",
                              "title",
                              "description",
                              "metric_type",
                              "start_value",
                              "target_value",
                              "unit",
                              "cadence",
                              "per",
                              "since",
                              "status",
                              "created_at",
                              "short_code",
                              "url",
                              "current_value",
                              "boundary_value",
                              "progress_pct",
                              "boundary_progress_pct",
                              "movement",
                              "movement_pp",
                              "evidence_count",
                              "last_recorded_at",
                              "habit_expected_since_boundary",
                              "habit_logs_since_boundary",
                              "performance_share"
                            ],
                            "additionalProperties": false
                          },
                          {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                              },
                              "objective_id": {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                              },
                              "title": {
                                "type": "string"
                              },
                              "description": {
                                "anyOf": [
                                  {
                                    "type": "string"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "metric_type": {
                                "type": "string",
                                "const": "habit"
                              },
                              "start_value": {
                                "type": "number",
                                "const": 0
                              },
                              "target_value": {
                                "type": "number",
                                "const": 100
                              },
                              "unit": {
                                "type": "null"
                              },
                              "cadence": {
                                "type": "string",
                                "enum": [
                                  "weekly",
                                  "monthly"
                                ],
                                "description": "UI label: Cadence. Weekly or Monthly; per supplies the Times value."
                              },
                              "per": {
                                "type": "integer",
                                "exclusiveMinimum": 0,
                                "maximum": 9007199254740991
                              },
                              "since": {
                                "type": "string",
                                "format": "date",
                                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                                "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                              },
                              "status": {
                                "type": "string",
                                "enum": [
                                  "in_progress",
                                  "completed"
                                ],
                                "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                              },
                              "created_at": {
                                "type": "string",
                                "format": "date-time",
                                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                              },
                              "short_code": {
                                "type": "string",
                                "minLength": 1
                              },
                              "url": {
                                "type": "string",
                                "format": "uri"
                              },
                              "current_value": {
                                "type": "number",
                                "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                              },
                              "boundary_value": {
                                "type": "number"
                              },
                              "progress_pct": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "boundary_progress_pct": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "movement": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "movement_pp": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "evidence_count": {
                                "type": "integer",
                                "minimum": 0,
                                "maximum": 9007199254740991
                              },
                              "last_recorded_at": {
                                "anyOf": [
                                  {
                                    "type": "string",
                                    "format": "date-time",
                                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "habit_expected_since_boundary": {
                                "anyOf": [
                                  {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "habit_logs_since_boundary": {
                                "anyOf": [
                                  {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "performance_share": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              }
                            },
                            "required": [
                              "id",
                              "objective_id",
                              "title",
                              "description",
                              "metric_type",
                              "start_value",
                              "target_value",
                              "unit",
                              "cadence",
                              "per",
                              "since",
                              "status",
                              "created_at",
                              "short_code",
                              "url",
                              "current_value",
                              "boundary_value",
                              "progress_pct",
                              "boundary_progress_pct",
                              "movement",
                              "movement_pp",
                              "evidence_count",
                              "last_recorded_at",
                              "habit_expected_since_boundary",
                              "habit_logs_since_boundary",
                              "performance_share"
                            ],
                            "additionalProperties": false
                          },
                          {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                              },
                              "objective_id": {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                              },
                              "title": {
                                "type": "string"
                              },
                              "description": {
                                "anyOf": [
                                  {
                                    "type": "string"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "metric_type": {
                                "type": "string",
                                "const": "performance"
                              },
                              "start_value": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ],
                                "description": "UI label: Start. Metric baseline; habit baselines are derived rather than stored."
                              },
                              "target_value": {
                                "type": "number"
                              },
                              "unit": {
                                "anyOf": [
                                  {
                                    "type": "string"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ],
                                "description": "UI label: Unit. Used by Number and Performance results."
                              },
                              "cadence": {
                                "type": "null"
                              },
                              "per": {
                                "type": "null"
                              },
                              "since": {
                                "type": "string",
                                "format": "date",
                                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                                "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                              },
                              "status": {
                                "type": "string",
                                "enum": [
                                  "in_progress",
                                  "completed"
                                ],
                                "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                              },
                              "created_at": {
                                "type": "string",
                                "format": "date-time",
                                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                              },
                              "short_code": {
                                "type": "string",
                                "minLength": 1
                              },
                              "url": {
                                "type": "string",
                                "format": "uri"
                              },
                              "current_value": {
                                "type": "number",
                                "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                              },
                              "boundary_value": {
                                "type": "number"
                              },
                              "progress_pct": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "boundary_progress_pct": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "movement": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "movement_pp": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "evidence_count": {
                                "type": "integer",
                                "minimum": 0,
                                "maximum": 9007199254740991
                              },
                              "last_recorded_at": {
                                "anyOf": [
                                  {
                                    "type": "string",
                                    "format": "date-time",
                                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "habit_expected_since_boundary": {
                                "anyOf": [
                                  {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "habit_logs_since_boundary": {
                                "anyOf": [
                                  {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "performance_share": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              }
                            },
                            "required": [
                              "id",
                              "objective_id",
                              "title",
                              "description",
                              "metric_type",
                              "start_value",
                              "target_value",
                              "unit",
                              "cadence",
                              "per",
                              "since",
                              "status",
                              "created_at",
                              "short_code",
                              "url",
                              "current_value",
                              "boundary_value",
                              "progress_pct",
                              "boundary_progress_pct",
                              "movement",
                              "movement_pp",
                              "evidence_count",
                              "last_recorded_at",
                              "habit_expected_since_boundary",
                              "habit_logs_since_boundary",
                              "performance_share"
                            ],
                            "additionalProperties": false
                          }
                        ]
                      }
                    },
                    "next_cursor": {
                      "anyOf": [
                        {
                          "type": "string",
                          "minLength": 1
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "items",
                    "next_cursor"
                  ],
                  "additionalProperties": false
                },
                "continuations": {
                  "type": "object",
                  "propertyNames": {
                    "type": "string",
                    "enum": [
                      "cycles",
                      "objectives",
                      "results",
                      "actions",
                      "notes",
                      "sessions",
                      "result_logs",
                      "habit_logs",
                      "action_logs",
                      "trend"
                    ]
                  },
                  "additionalProperties": {
                    "type": "string",
                    "minLength": 1
                  }
                }
              },
              "required": [
                "as_of",
                "boundary",
                "cycle",
                "cycle_line",
                "objectives",
                "results",
                "continuations"
              ],
              "additionalProperties": false
            },
            {
              "type": "null"
            }
          ]
        },
        "totals": {
          "type": "object",
          "properties": {
            "objectives": {
              "type": "integer",
              "minimum": 0,
              "maximum": 9007199254740991
            },
            "results": {
              "type": "integer",
              "minimum": 0,
              "maximum": 9007199254740991
            }
          },
          "required": [
            "objectives",
            "results"
          ],
          "additionalProperties": false
        }
      },
      "required": [
        "as_of",
        "data",
        "totals"
      ],
      "additionalProperties": false
    },
    "readiness": "contract-only",
    "binding": "planned",
    "gap": "Project the active briefing into the dashboard payload; no coaching card for unpaid access.",
    "sources": [
      {
        "tool": "session_start",
        "operations": [
          "call"
        ],
        "when": "Active access only; render the current cycle and objectives/results snapshot.",
        "services": [
          "sessions.start"
        ]
      }
    ]
  },
  {
    "id": "objective",
    "title": "Objective",
    "owner": "F3 Objectives",
    "kind": "product",
    "pages": [
      "/objectives/:id"
    ],
    "resource_uri": "ui://widget/objective.v1.html",
    "payload": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "as_of": {
          "type": "string",
          "format": "date-time",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
          "description": "Server snapshot time for the stale-snapshot footer."
        },
        "data": {
          "anyOf": [
            {
              "type": "object",
              "properties": {
                "objective": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    "cycle_id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    "title": {
                      "type": "string"
                    },
                    "description": {
                      "type": "string"
                    },
                    "deadline_at": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "date",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                          "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                        },
                        {
                          "type": "null"
                        }
                      ],
                      "description": "UI label: Deadline; null when no deadline has been set."
                    },
                    "status": {
                      "type": "string",
                      "enum": [
                        "on_track",
                        "off_track",
                        "completed"
                      ],
                      "description": "Objective status: On track, Off track or Completed. Coaching judgment, independent of the derived Progress percentage."
                    },
                    "created_at": {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    "short_code": {
                      "type": "string",
                      "minLength": 1
                    },
                    "url": {
                      "type": "string",
                      "format": "uri"
                    },
                    "progress_pct": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ],
                      "description": "UI label: Progress. Derived from measurable results, independently of Status."
                    },
                    "boundary_progress_pct": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ],
                      "description": "Historical progress at the resolved last-session boundary; not current Progress."
                    },
                    "movement_pp": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "id",
                    "cycle_id",
                    "title",
                    "description",
                    "deadline_at",
                    "status",
                    "created_at",
                    "short_code",
                    "url",
                    "progress_pct",
                    "boundary_progress_pct",
                    "movement_pp"
                  ],
                  "additionalProperties": false
                },
                "cycle": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    "intention": {
                      "anyOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "null"
                        }
                      ],
                      "description": "UI label: Intention. Optional guiding focus; the cycle is identified by its date range, not a name."
                    },
                    "start_at": {
                      "type": "string",
                      "format": "date",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                      "description": "UI label: Starts."
                    },
                    "end_at": {
                      "type": "string",
                      "format": "date",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                      "description": "UI label: Ends."
                    },
                    "status": {
                      "type": "string",
                      "enum": [
                        "active",
                        "archived"
                      ]
                    },
                    "created_at": {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    "url": {
                      "type": "string",
                      "format": "uri"
                    },
                    "achievement_pct": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ],
                      "description": "UI label: Achievement. Derived from objective progress; unavailable when nothing is measurable."
                    },
                    "time_gone_pct": {
                      "type": "number",
                      "minimum": 0,
                      "maximum": 100,
                      "description": "UI label: Time gone. Derived percentage of the cycle elapsed."
                    },
                    "length_weeks": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991,
                      "description": "UI label: Length, in weeks; derived from Starts and Ends."
                    }
                  },
                  "required": [
                    "id",
                    "intention",
                    "start_at",
                    "end_at",
                    "status",
                    "created_at",
                    "url",
                    "achievement_pct",
                    "time_gone_pct",
                    "length_weeks"
                  ],
                  "additionalProperties": false
                },
                "results": {
                  "type": "object",
                  "properties": {
                    "items": {
                      "maxItems": 50,
                      "type": "array",
                      "items": {
                        "oneOf": [
                          {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                              },
                              "objective_id": {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                              },
                              "title": {
                                "type": "string"
                              },
                              "description": {
                                "anyOf": [
                                  {
                                    "type": "string"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "metric_type": {
                                "type": "string",
                                "const": "number"
                              },
                              "start_value": {
                                "type": "number"
                              },
                              "target_value": {
                                "type": "number"
                              },
                              "unit": {
                                "anyOf": [
                                  {
                                    "type": "string"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ],
                                "description": "UI label: Unit. Used by Number and Performance results."
                              },
                              "cadence": {
                                "type": "null"
                              },
                              "per": {
                                "type": "null"
                              },
                              "since": {
                                "type": "null"
                              },
                              "status": {
                                "type": "string",
                                "enum": [
                                  "in_progress",
                                  "completed"
                                ],
                                "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                              },
                              "created_at": {
                                "type": "string",
                                "format": "date-time",
                                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                              },
                              "short_code": {
                                "type": "string",
                                "minLength": 1
                              },
                              "url": {
                                "type": "string",
                                "format": "uri"
                              },
                              "current_value": {
                                "type": "number",
                                "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                              },
                              "boundary_value": {
                                "type": "number"
                              },
                              "progress_pct": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "boundary_progress_pct": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "movement": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "movement_pp": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "evidence_count": {
                                "type": "integer",
                                "minimum": 0,
                                "maximum": 9007199254740991
                              },
                              "last_recorded_at": {
                                "anyOf": [
                                  {
                                    "type": "string",
                                    "format": "date-time",
                                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "habit_expected_since_boundary": {
                                "anyOf": [
                                  {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "habit_logs_since_boundary": {
                                "anyOf": [
                                  {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "performance_share": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              }
                            },
                            "required": [
                              "id",
                              "objective_id",
                              "title",
                              "description",
                              "metric_type",
                              "start_value",
                              "target_value",
                              "unit",
                              "cadence",
                              "per",
                              "since",
                              "status",
                              "created_at",
                              "short_code",
                              "url",
                              "current_value",
                              "boundary_value",
                              "progress_pct",
                              "boundary_progress_pct",
                              "movement",
                              "movement_pp",
                              "evidence_count",
                              "last_recorded_at",
                              "habit_expected_since_boundary",
                              "habit_logs_since_boundary",
                              "performance_share"
                            ],
                            "additionalProperties": false
                          },
                          {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                              },
                              "objective_id": {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                              },
                              "title": {
                                "type": "string"
                              },
                              "description": {
                                "anyOf": [
                                  {
                                    "type": "string"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "metric_type": {
                                "type": "string",
                                "const": "percentage"
                              },
                              "start_value": {
                                "type": "number",
                                "minimum": 0,
                                "maximum": 100
                              },
                              "target_value": {
                                "type": "number",
                                "minimum": 0,
                                "maximum": 100
                              },
                              "unit": {
                                "type": "null"
                              },
                              "cadence": {
                                "type": "null"
                              },
                              "per": {
                                "type": "null"
                              },
                              "since": {
                                "type": "null"
                              },
                              "status": {
                                "type": "string",
                                "enum": [
                                  "in_progress",
                                  "completed"
                                ],
                                "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                              },
                              "created_at": {
                                "type": "string",
                                "format": "date-time",
                                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                              },
                              "short_code": {
                                "type": "string",
                                "minLength": 1
                              },
                              "url": {
                                "type": "string",
                                "format": "uri"
                              },
                              "current_value": {
                                "type": "number",
                                "minimum": 0,
                                "maximum": 100
                              },
                              "boundary_value": {
                                "type": "number",
                                "minimum": 0,
                                "maximum": 100
                              },
                              "progress_pct": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "boundary_progress_pct": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "movement": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "movement_pp": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "evidence_count": {
                                "type": "integer",
                                "minimum": 0,
                                "maximum": 9007199254740991
                              },
                              "last_recorded_at": {
                                "anyOf": [
                                  {
                                    "type": "string",
                                    "format": "date-time",
                                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "habit_expected_since_boundary": {
                                "anyOf": [
                                  {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "habit_logs_since_boundary": {
                                "anyOf": [
                                  {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "performance_share": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              }
                            },
                            "required": [
                              "id",
                              "objective_id",
                              "title",
                              "description",
                              "metric_type",
                              "start_value",
                              "target_value",
                              "unit",
                              "cadence",
                              "per",
                              "since",
                              "status",
                              "created_at",
                              "short_code",
                              "url",
                              "current_value",
                              "boundary_value",
                              "progress_pct",
                              "boundary_progress_pct",
                              "movement",
                              "movement_pp",
                              "evidence_count",
                              "last_recorded_at",
                              "habit_expected_since_boundary",
                              "habit_logs_since_boundary",
                              "performance_share"
                            ],
                            "additionalProperties": false
                          },
                          {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                              },
                              "objective_id": {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                              },
                              "title": {
                                "type": "string"
                              },
                              "description": {
                                "anyOf": [
                                  {
                                    "type": "string"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "metric_type": {
                                "type": "string",
                                "const": "milestone"
                              },
                              "start_value": {
                                "type": "number",
                                "const": 0
                              },
                              "target_value": {
                                "type": "number",
                                "const": 1
                              },
                              "unit": {
                                "type": "null"
                              },
                              "cadence": {
                                "type": "null"
                              },
                              "per": {
                                "type": "null"
                              },
                              "since": {
                                "type": "null"
                              },
                              "status": {
                                "type": "string",
                                "enum": [
                                  "in_progress",
                                  "completed"
                                ],
                                "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                              },
                              "created_at": {
                                "type": "string",
                                "format": "date-time",
                                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                              },
                              "short_code": {
                                "type": "string",
                                "minLength": 1
                              },
                              "url": {
                                "type": "string",
                                "format": "uri"
                              },
                              "current_value": {
                                "anyOf": [
                                  {
                                    "type": "number",
                                    "const": 0
                                  },
                                  {
                                    "type": "number",
                                    "const": 1
                                  }
                                ]
                              },
                              "boundary_value": {
                                "anyOf": [
                                  {
                                    "type": "number",
                                    "const": 0
                                  },
                                  {
                                    "type": "number",
                                    "const": 1
                                  }
                                ]
                              },
                              "progress_pct": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "boundary_progress_pct": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "movement": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "movement_pp": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "evidence_count": {
                                "type": "integer",
                                "minimum": 0,
                                "maximum": 9007199254740991
                              },
                              "last_recorded_at": {
                                "anyOf": [
                                  {
                                    "type": "string",
                                    "format": "date-time",
                                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "habit_expected_since_boundary": {
                                "anyOf": [
                                  {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "habit_logs_since_boundary": {
                                "anyOf": [
                                  {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "performance_share": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              }
                            },
                            "required": [
                              "id",
                              "objective_id",
                              "title",
                              "description",
                              "metric_type",
                              "start_value",
                              "target_value",
                              "unit",
                              "cadence",
                              "per",
                              "since",
                              "status",
                              "created_at",
                              "short_code",
                              "url",
                              "current_value",
                              "boundary_value",
                              "progress_pct",
                              "boundary_progress_pct",
                              "movement",
                              "movement_pp",
                              "evidence_count",
                              "last_recorded_at",
                              "habit_expected_since_boundary",
                              "habit_logs_since_boundary",
                              "performance_share"
                            ],
                            "additionalProperties": false
                          },
                          {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                              },
                              "objective_id": {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                              },
                              "title": {
                                "type": "string"
                              },
                              "description": {
                                "anyOf": [
                                  {
                                    "type": "string"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "metric_type": {
                                "type": "string",
                                "const": "habit"
                              },
                              "start_value": {
                                "type": "number",
                                "const": 0
                              },
                              "target_value": {
                                "type": "number",
                                "const": 100
                              },
                              "unit": {
                                "type": "null"
                              },
                              "cadence": {
                                "type": "string",
                                "enum": [
                                  "weekly",
                                  "monthly"
                                ],
                                "description": "UI label: Cadence. Weekly or Monthly; per supplies the Times value."
                              },
                              "per": {
                                "type": "integer",
                                "exclusiveMinimum": 0,
                                "maximum": 9007199254740991
                              },
                              "since": {
                                "type": "string",
                                "format": "date",
                                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                                "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                              },
                              "status": {
                                "type": "string",
                                "enum": [
                                  "in_progress",
                                  "completed"
                                ],
                                "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                              },
                              "created_at": {
                                "type": "string",
                                "format": "date-time",
                                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                              },
                              "short_code": {
                                "type": "string",
                                "minLength": 1
                              },
                              "url": {
                                "type": "string",
                                "format": "uri"
                              },
                              "current_value": {
                                "type": "number",
                                "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                              },
                              "boundary_value": {
                                "type": "number"
                              },
                              "progress_pct": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "boundary_progress_pct": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "movement": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "movement_pp": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "evidence_count": {
                                "type": "integer",
                                "minimum": 0,
                                "maximum": 9007199254740991
                              },
                              "last_recorded_at": {
                                "anyOf": [
                                  {
                                    "type": "string",
                                    "format": "date-time",
                                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "habit_expected_since_boundary": {
                                "anyOf": [
                                  {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "habit_logs_since_boundary": {
                                "anyOf": [
                                  {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "performance_share": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              }
                            },
                            "required": [
                              "id",
                              "objective_id",
                              "title",
                              "description",
                              "metric_type",
                              "start_value",
                              "target_value",
                              "unit",
                              "cadence",
                              "per",
                              "since",
                              "status",
                              "created_at",
                              "short_code",
                              "url",
                              "current_value",
                              "boundary_value",
                              "progress_pct",
                              "boundary_progress_pct",
                              "movement",
                              "movement_pp",
                              "evidence_count",
                              "last_recorded_at",
                              "habit_expected_since_boundary",
                              "habit_logs_since_boundary",
                              "performance_share"
                            ],
                            "additionalProperties": false
                          },
                          {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                              },
                              "objective_id": {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                              },
                              "title": {
                                "type": "string"
                              },
                              "description": {
                                "anyOf": [
                                  {
                                    "type": "string"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "metric_type": {
                                "type": "string",
                                "const": "performance"
                              },
                              "start_value": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ],
                                "description": "UI label: Start. Metric baseline; habit baselines are derived rather than stored."
                              },
                              "target_value": {
                                "type": "number"
                              },
                              "unit": {
                                "anyOf": [
                                  {
                                    "type": "string"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ],
                                "description": "UI label: Unit. Used by Number and Performance results."
                              },
                              "cadence": {
                                "type": "null"
                              },
                              "per": {
                                "type": "null"
                              },
                              "since": {
                                "type": "string",
                                "format": "date",
                                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                                "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                              },
                              "status": {
                                "type": "string",
                                "enum": [
                                  "in_progress",
                                  "completed"
                                ],
                                "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                              },
                              "created_at": {
                                "type": "string",
                                "format": "date-time",
                                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                              },
                              "short_code": {
                                "type": "string",
                                "minLength": 1
                              },
                              "url": {
                                "type": "string",
                                "format": "uri"
                              },
                              "current_value": {
                                "type": "number",
                                "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                              },
                              "boundary_value": {
                                "type": "number"
                              },
                              "progress_pct": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "boundary_progress_pct": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "movement": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "movement_pp": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "evidence_count": {
                                "type": "integer",
                                "minimum": 0,
                                "maximum": 9007199254740991
                              },
                              "last_recorded_at": {
                                "anyOf": [
                                  {
                                    "type": "string",
                                    "format": "date-time",
                                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "habit_expected_since_boundary": {
                                "anyOf": [
                                  {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "habit_logs_since_boundary": {
                                "anyOf": [
                                  {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "performance_share": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              }
                            },
                            "required": [
                              "id",
                              "objective_id",
                              "title",
                              "description",
                              "metric_type",
                              "start_value",
                              "target_value",
                              "unit",
                              "cadence",
                              "per",
                              "since",
                              "status",
                              "created_at",
                              "short_code",
                              "url",
                              "current_value",
                              "boundary_value",
                              "progress_pct",
                              "boundary_progress_pct",
                              "movement",
                              "movement_pp",
                              "evidence_count",
                              "last_recorded_at",
                              "habit_expected_since_boundary",
                              "habit_logs_since_boundary",
                              "performance_share"
                            ],
                            "additionalProperties": false
                          }
                        ]
                      }
                    },
                    "next_cursor": {
                      "anyOf": [
                        {
                          "type": "string",
                          "minLength": 1
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "items",
                    "next_cursor"
                  ],
                  "additionalProperties": false
                },
                "actions": {
                  "type": "object",
                  "properties": {
                    "items": {
                      "maxItems": 50,
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "id": {
                            "type": "string",
                            "format": "uuid",
                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                            "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                          },
                          "cycle_id": {
                            "type": "string",
                            "format": "uuid",
                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                            "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                          },
                          "objective_id": {
                            "anyOf": [
                              {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "title": {
                            "type": "string"
                          },
                          "description": {
                            "anyOf": [
                              {
                                "type": "string"
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "due_at": {
                            "anyOf": [
                              {
                                "type": "string",
                                "format": "date",
                                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                                "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                              },
                              {
                                "type": "null"
                              }
                            ],
                            "description": "UI label: Due. May be unset on a web draft; a set date cannot be cleared."
                          },
                          "status": {
                            "type": "string",
                            "enum": [
                              "open",
                              "in_progress",
                              "done"
                            ],
                            "description": "Action status: Open, In progress or Done. The To do UI group includes Open and In progress; Overdue is derived, not a status."
                          },
                          "sort_order": {
                            "anyOf": [
                              {
                                "type": "number"
                              },
                              {
                                "type": "null"
                              }
                            ],
                            "description": "Drag order within an action group; not a progress status."
                          },
                          "session_id": {
                            "anyOf": [
                              {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "created_at": {
                            "type": "string",
                            "format": "date-time",
                            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                          },
                          "url": {
                            "type": "string",
                            "format": "uri"
                          },
                          "overdue": {
                            "type": "boolean"
                          },
                          "done_since_boundary": {
                            "type": "boolean"
                          }
                        },
                        "required": [
                          "id",
                          "cycle_id",
                          "objective_id",
                          "title",
                          "description",
                          "due_at",
                          "status",
                          "sort_order",
                          "session_id",
                          "created_at",
                          "url",
                          "overdue",
                          "done_since_boundary"
                        ],
                        "additionalProperties": false
                      }
                    },
                    "next_cursor": {
                      "anyOf": [
                        {
                          "type": "string",
                          "minLength": 1
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "items",
                    "next_cursor"
                  ],
                  "additionalProperties": false
                },
                "continuations": {
                  "type": "object",
                  "propertyNames": {
                    "type": "string",
                    "enum": [
                      "cycles",
                      "objectives",
                      "results",
                      "actions",
                      "notes",
                      "sessions",
                      "result_logs",
                      "habit_logs",
                      "action_logs",
                      "trend"
                    ]
                  },
                  "additionalProperties": {
                    "type": "string",
                    "minLength": 1
                  }
                }
              },
              "required": [
                "objective",
                "cycle",
                "results",
                "actions",
                "continuations"
              ],
              "additionalProperties": false
            },
            {
              "type": "null"
            }
          ]
        },
        "totals": {
          "type": "object",
          "properties": {
            "results": {
              "type": "integer",
              "minimum": 0,
              "maximum": 9007199254740991
            },
            "actions": {
              "type": "integer",
              "minimum": 0,
              "maximum": 9007199254740991
            }
          },
          "required": [
            "results",
            "actions"
          ],
          "additionalProperties": false
        }
      },
      "required": [
        "as_of",
        "data",
        "totals"
      ],
      "additionalProperties": false
    },
    "readiness": "contract-only",
    "binding": "planned",
    "gap": "Compact MCP records omit cycle, results and actions required by the page-mirroring payload.",
    "sources": [
      {
        "tool": "objective_read",
        "operations": [
          "get"
        ],
        "when": "get for an existing objective.",
        "services": [
          "objectives.get"
        ]
      },
      {
        "tool": "objective_write",
        "operations": [
          "create",
          "update"
        ],
        "when": "Successful create/update.",
        "services": [
          "objectives.create",
          "objectives.update"
        ]
      }
    ]
  },
  {
    "id": "result",
    "title": "Result",
    "owner": "F4 Results",
    "kind": "product",
    "pages": [
      "/results/:id"
    ],
    "resource_uri": "ui://widget/result.v1.html",
    "payload": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "as_of": {
          "type": "string",
          "format": "date-time",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
          "description": "Server snapshot time for the stale-snapshot footer."
        },
        "data": {
          "anyOf": [
            {
              "type": "object",
              "properties": {
                "result": {
                  "oneOf": [
                    {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                        },
                        "objective_id": {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                        },
                        "title": {
                          "type": "string"
                        },
                        "description": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "metric_type": {
                          "type": "string",
                          "const": "number"
                        },
                        "start_value": {
                          "type": "number"
                        },
                        "target_value": {
                          "type": "number"
                        },
                        "unit": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "UI label: Unit. Used by Number and Performance results."
                        },
                        "cadence": {
                          "type": "null"
                        },
                        "per": {
                          "type": "null"
                        },
                        "since": {
                          "type": "null"
                        },
                        "status": {
                          "type": "string",
                          "enum": [
                            "in_progress",
                            "completed"
                          ],
                          "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                        },
                        "created_at": {
                          "type": "string",
                          "format": "date-time",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                        },
                        "short_code": {
                          "type": "string",
                          "minLength": 1
                        },
                        "url": {
                          "type": "string",
                          "format": "uri"
                        },
                        "current_value": {
                          "type": "number",
                          "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                        },
                        "boundary_value": {
                          "type": "number"
                        },
                        "progress_pct": {
                          "anyOf": [
                            {
                              "type": "number"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "boundary_progress_pct": {
                          "anyOf": [
                            {
                              "type": "number"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "movement": {
                          "anyOf": [
                            {
                              "type": "number"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "movement_pp": {
                          "anyOf": [
                            {
                              "type": "number"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "evidence_count": {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        "last_recorded_at": {
                          "anyOf": [
                            {
                              "type": "string",
                              "format": "date-time",
                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "habit_expected_since_boundary": {
                          "anyOf": [
                            {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "habit_logs_since_boundary": {
                          "anyOf": [
                            {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "performance_share": {
                          "anyOf": [
                            {
                              "type": "number"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        }
                      },
                      "required": [
                        "id",
                        "objective_id",
                        "title",
                        "description",
                        "metric_type",
                        "start_value",
                        "target_value",
                        "unit",
                        "cadence",
                        "per",
                        "since",
                        "status",
                        "created_at",
                        "short_code",
                        "url",
                        "current_value",
                        "boundary_value",
                        "progress_pct",
                        "boundary_progress_pct",
                        "movement",
                        "movement_pp",
                        "evidence_count",
                        "last_recorded_at",
                        "habit_expected_since_boundary",
                        "habit_logs_since_boundary",
                        "performance_share"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                        },
                        "objective_id": {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                        },
                        "title": {
                          "type": "string"
                        },
                        "description": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "metric_type": {
                          "type": "string",
                          "const": "percentage"
                        },
                        "start_value": {
                          "type": "number",
                          "minimum": 0,
                          "maximum": 100
                        },
                        "target_value": {
                          "type": "number",
                          "minimum": 0,
                          "maximum": 100
                        },
                        "unit": {
                          "type": "null"
                        },
                        "cadence": {
                          "type": "null"
                        },
                        "per": {
                          "type": "null"
                        },
                        "since": {
                          "type": "null"
                        },
                        "status": {
                          "type": "string",
                          "enum": [
                            "in_progress",
                            "completed"
                          ],
                          "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                        },
                        "created_at": {
                          "type": "string",
                          "format": "date-time",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                        },
                        "short_code": {
                          "type": "string",
                          "minLength": 1
                        },
                        "url": {
                          "type": "string",
                          "format": "uri"
                        },
                        "current_value": {
                          "type": "number",
                          "minimum": 0,
                          "maximum": 100
                        },
                        "boundary_value": {
                          "type": "number",
                          "minimum": 0,
                          "maximum": 100
                        },
                        "progress_pct": {
                          "anyOf": [
                            {
                              "type": "number"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "boundary_progress_pct": {
                          "anyOf": [
                            {
                              "type": "number"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "movement": {
                          "anyOf": [
                            {
                              "type": "number"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "movement_pp": {
                          "anyOf": [
                            {
                              "type": "number"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "evidence_count": {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        "last_recorded_at": {
                          "anyOf": [
                            {
                              "type": "string",
                              "format": "date-time",
                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "habit_expected_since_boundary": {
                          "anyOf": [
                            {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "habit_logs_since_boundary": {
                          "anyOf": [
                            {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "performance_share": {
                          "anyOf": [
                            {
                              "type": "number"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        }
                      },
                      "required": [
                        "id",
                        "objective_id",
                        "title",
                        "description",
                        "metric_type",
                        "start_value",
                        "target_value",
                        "unit",
                        "cadence",
                        "per",
                        "since",
                        "status",
                        "created_at",
                        "short_code",
                        "url",
                        "current_value",
                        "boundary_value",
                        "progress_pct",
                        "boundary_progress_pct",
                        "movement",
                        "movement_pp",
                        "evidence_count",
                        "last_recorded_at",
                        "habit_expected_since_boundary",
                        "habit_logs_since_boundary",
                        "performance_share"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                        },
                        "objective_id": {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                        },
                        "title": {
                          "type": "string"
                        },
                        "description": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "metric_type": {
                          "type": "string",
                          "const": "milestone"
                        },
                        "start_value": {
                          "type": "number",
                          "const": 0
                        },
                        "target_value": {
                          "type": "number",
                          "const": 1
                        },
                        "unit": {
                          "type": "null"
                        },
                        "cadence": {
                          "type": "null"
                        },
                        "per": {
                          "type": "null"
                        },
                        "since": {
                          "type": "null"
                        },
                        "status": {
                          "type": "string",
                          "enum": [
                            "in_progress",
                            "completed"
                          ],
                          "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                        },
                        "created_at": {
                          "type": "string",
                          "format": "date-time",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                        },
                        "short_code": {
                          "type": "string",
                          "minLength": 1
                        },
                        "url": {
                          "type": "string",
                          "format": "uri"
                        },
                        "current_value": {
                          "anyOf": [
                            {
                              "type": "number",
                              "const": 0
                            },
                            {
                              "type": "number",
                              "const": 1
                            }
                          ]
                        },
                        "boundary_value": {
                          "anyOf": [
                            {
                              "type": "number",
                              "const": 0
                            },
                            {
                              "type": "number",
                              "const": 1
                            }
                          ]
                        },
                        "progress_pct": {
                          "anyOf": [
                            {
                              "type": "number"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "boundary_progress_pct": {
                          "anyOf": [
                            {
                              "type": "number"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "movement": {
                          "anyOf": [
                            {
                              "type": "number"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "movement_pp": {
                          "anyOf": [
                            {
                              "type": "number"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "evidence_count": {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        "last_recorded_at": {
                          "anyOf": [
                            {
                              "type": "string",
                              "format": "date-time",
                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "habit_expected_since_boundary": {
                          "anyOf": [
                            {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "habit_logs_since_boundary": {
                          "anyOf": [
                            {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "performance_share": {
                          "anyOf": [
                            {
                              "type": "number"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        }
                      },
                      "required": [
                        "id",
                        "objective_id",
                        "title",
                        "description",
                        "metric_type",
                        "start_value",
                        "target_value",
                        "unit",
                        "cadence",
                        "per",
                        "since",
                        "status",
                        "created_at",
                        "short_code",
                        "url",
                        "current_value",
                        "boundary_value",
                        "progress_pct",
                        "boundary_progress_pct",
                        "movement",
                        "movement_pp",
                        "evidence_count",
                        "last_recorded_at",
                        "habit_expected_since_boundary",
                        "habit_logs_since_boundary",
                        "performance_share"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                        },
                        "objective_id": {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                        },
                        "title": {
                          "type": "string"
                        },
                        "description": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "metric_type": {
                          "type": "string",
                          "const": "habit"
                        },
                        "start_value": {
                          "type": "number",
                          "const": 0
                        },
                        "target_value": {
                          "type": "number",
                          "const": 100
                        },
                        "unit": {
                          "type": "null"
                        },
                        "cadence": {
                          "type": "string",
                          "enum": [
                            "weekly",
                            "monthly"
                          ],
                          "description": "UI label: Cadence. Weekly or Monthly; per supplies the Times value."
                        },
                        "per": {
                          "type": "integer",
                          "exclusiveMinimum": 0,
                          "maximum": 9007199254740991
                        },
                        "since": {
                          "type": "string",
                          "format": "date",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                          "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                        },
                        "status": {
                          "type": "string",
                          "enum": [
                            "in_progress",
                            "completed"
                          ],
                          "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                        },
                        "created_at": {
                          "type": "string",
                          "format": "date-time",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                        },
                        "short_code": {
                          "type": "string",
                          "minLength": 1
                        },
                        "url": {
                          "type": "string",
                          "format": "uri"
                        },
                        "current_value": {
                          "type": "number",
                          "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                        },
                        "boundary_value": {
                          "type": "number"
                        },
                        "progress_pct": {
                          "anyOf": [
                            {
                              "type": "number"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "boundary_progress_pct": {
                          "anyOf": [
                            {
                              "type": "number"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "movement": {
                          "anyOf": [
                            {
                              "type": "number"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "movement_pp": {
                          "anyOf": [
                            {
                              "type": "number"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "evidence_count": {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        "last_recorded_at": {
                          "anyOf": [
                            {
                              "type": "string",
                              "format": "date-time",
                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "habit_expected_since_boundary": {
                          "anyOf": [
                            {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "habit_logs_since_boundary": {
                          "anyOf": [
                            {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "performance_share": {
                          "anyOf": [
                            {
                              "type": "number"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        }
                      },
                      "required": [
                        "id",
                        "objective_id",
                        "title",
                        "description",
                        "metric_type",
                        "start_value",
                        "target_value",
                        "unit",
                        "cadence",
                        "per",
                        "since",
                        "status",
                        "created_at",
                        "short_code",
                        "url",
                        "current_value",
                        "boundary_value",
                        "progress_pct",
                        "boundary_progress_pct",
                        "movement",
                        "movement_pp",
                        "evidence_count",
                        "last_recorded_at",
                        "habit_expected_since_boundary",
                        "habit_logs_since_boundary",
                        "performance_share"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                        },
                        "objective_id": {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                        },
                        "title": {
                          "type": "string"
                        },
                        "description": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "metric_type": {
                          "type": "string",
                          "const": "performance"
                        },
                        "start_value": {
                          "anyOf": [
                            {
                              "type": "number"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "UI label: Start. Metric baseline; habit baselines are derived rather than stored."
                        },
                        "target_value": {
                          "type": "number"
                        },
                        "unit": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "UI label: Unit. Used by Number and Performance results."
                        },
                        "cadence": {
                          "type": "null"
                        },
                        "per": {
                          "type": "null"
                        },
                        "since": {
                          "type": "string",
                          "format": "date",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                          "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                        },
                        "status": {
                          "type": "string",
                          "enum": [
                            "in_progress",
                            "completed"
                          ],
                          "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                        },
                        "created_at": {
                          "type": "string",
                          "format": "date-time",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                        },
                        "short_code": {
                          "type": "string",
                          "minLength": 1
                        },
                        "url": {
                          "type": "string",
                          "format": "uri"
                        },
                        "current_value": {
                          "type": "number",
                          "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                        },
                        "boundary_value": {
                          "type": "number"
                        },
                        "progress_pct": {
                          "anyOf": [
                            {
                              "type": "number"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "boundary_progress_pct": {
                          "anyOf": [
                            {
                              "type": "number"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "movement": {
                          "anyOf": [
                            {
                              "type": "number"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "movement_pp": {
                          "anyOf": [
                            {
                              "type": "number"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "evidence_count": {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        "last_recorded_at": {
                          "anyOf": [
                            {
                              "type": "string",
                              "format": "date-time",
                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "habit_expected_since_boundary": {
                          "anyOf": [
                            {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "habit_logs_since_boundary": {
                          "anyOf": [
                            {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "performance_share": {
                          "anyOf": [
                            {
                              "type": "number"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        }
                      },
                      "required": [
                        "id",
                        "objective_id",
                        "title",
                        "description",
                        "metric_type",
                        "start_value",
                        "target_value",
                        "unit",
                        "cadence",
                        "per",
                        "since",
                        "status",
                        "created_at",
                        "short_code",
                        "url",
                        "current_value",
                        "boundary_value",
                        "progress_pct",
                        "boundary_progress_pct",
                        "movement",
                        "movement_pp",
                        "evidence_count",
                        "last_recorded_at",
                        "habit_expected_since_boundary",
                        "habit_logs_since_boundary",
                        "performance_share"
                      ],
                      "additionalProperties": false
                    }
                  ]
                },
                "parents": {
                  "type": "object",
                  "properties": {
                    "cycle": {
                      "anyOf": [
                        {
                          "type": "object",
                          "properties": {
                            "id": {
                              "type": "string",
                              "format": "uuid",
                              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                            },
                            "intention": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "null"
                                }
                              ],
                              "description": "UI label: Intention. Optional guiding focus; the cycle is identified by its date range, not a name."
                            },
                            "start_at": {
                              "type": "string",
                              "format": "date",
                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                              "description": "UI label: Starts."
                            },
                            "end_at": {
                              "type": "string",
                              "format": "date",
                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                              "description": "UI label: Ends."
                            },
                            "status": {
                              "type": "string",
                              "enum": [
                                "active",
                                "archived"
                              ]
                            },
                            "created_at": {
                              "type": "string",
                              "format": "date-time",
                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                            },
                            "url": {
                              "type": "string",
                              "format": "uri"
                            },
                            "achievement_pct": {
                              "anyOf": [
                                {
                                  "type": "number"
                                },
                                {
                                  "type": "null"
                                }
                              ],
                              "description": "UI label: Achievement. Derived from objective progress; unavailable when nothing is measurable."
                            },
                            "time_gone_pct": {
                              "type": "number",
                              "minimum": 0,
                              "maximum": 100,
                              "description": "UI label: Time gone. Derived percentage of the cycle elapsed."
                            },
                            "length_weeks": {
                              "type": "integer",
                              "minimum": -9007199254740991,
                              "maximum": 9007199254740991,
                              "description": "UI label: Length, in weeks; derived from Starts and Ends."
                            }
                          },
                          "required": [
                            "id",
                            "intention",
                            "start_at",
                            "end_at",
                            "status",
                            "created_at",
                            "url",
                            "achievement_pct",
                            "time_gone_pct",
                            "length_weeks"
                          ],
                          "additionalProperties": false
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "objectives": {
                      "type": "object",
                      "properties": {
                        "items": {
                          "maxItems": 50,
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                              },
                              "cycle_id": {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                              },
                              "title": {
                                "type": "string"
                              },
                              "description": {
                                "type": "string"
                              },
                              "deadline_at": {
                                "anyOf": [
                                  {
                                    "type": "string",
                                    "format": "date",
                                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                                    "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                                  },
                                  {
                                    "type": "null"
                                  }
                                ],
                                "description": "UI label: Deadline; null when no deadline has been set."
                              },
                              "status": {
                                "type": "string",
                                "enum": [
                                  "on_track",
                                  "off_track",
                                  "completed"
                                ],
                                "description": "Objective status: On track, Off track or Completed. Coaching judgment, independent of the derived Progress percentage."
                              },
                              "created_at": {
                                "type": "string",
                                "format": "date-time",
                                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                              },
                              "short_code": {
                                "type": "string",
                                "minLength": 1
                              },
                              "url": {
                                "type": "string",
                                "format": "uri"
                              },
                              "progress_pct": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ],
                                "description": "UI label: Progress. Derived from measurable results, independently of Status."
                              },
                              "boundary_progress_pct": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ],
                                "description": "Historical progress at the resolved last-session boundary; not current Progress."
                              },
                              "movement_pp": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              }
                            },
                            "required": [
                              "id",
                              "cycle_id",
                              "title",
                              "description",
                              "deadline_at",
                              "status",
                              "created_at",
                              "short_code",
                              "url",
                              "progress_pct",
                              "boundary_progress_pct",
                              "movement_pp"
                            ],
                            "additionalProperties": false
                          }
                        },
                        "next_cursor": {
                          "anyOf": [
                            {
                              "type": "string",
                              "minLength": 1
                            },
                            {
                              "type": "null"
                            }
                          ]
                        }
                      },
                      "required": [
                        "items",
                        "next_cursor"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "required": [
                    "cycle",
                    "objectives"
                  ],
                  "additionalProperties": false
                },
                "result_logs": {
                  "type": "object",
                  "properties": {
                    "items": {
                      "maxItems": 100,
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "id": {
                            "type": "string",
                            "format": "uuid",
                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                            "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                          },
                          "result_id": {
                            "type": "string",
                            "format": "uuid",
                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                            "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                          },
                          "value": {
                            "anyOf": [
                              {
                                "type": "number"
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "comment": {
                            "anyOf": [
                              {
                                "type": "string"
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "session_id": {
                            "anyOf": [
                              {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "recorded_at": {
                            "type": "string",
                            "format": "date-time",
                            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                          }
                        },
                        "required": [
                          "id",
                          "result_id",
                          "value",
                          "comment",
                          "session_id",
                          "recorded_at"
                        ],
                        "additionalProperties": false,
                        "description": "Result log stored in result_logs. The UI shows value entries under Updates and their non-empty comments under Comments. Value may be null for a comment-only habit entry; evidence and timestamps are immutable."
                      }
                    },
                    "next_cursor": {
                      "anyOf": [
                        {
                          "type": "string",
                          "minLength": 1
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "items",
                    "next_cursor"
                  ],
                  "additionalProperties": false
                },
                "habit_logs": {
                  "type": "object",
                  "properties": {
                    "items": {
                      "maxItems": 100,
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "id": {
                            "type": "string",
                            "format": "uuid",
                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                            "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                          },
                          "result_id": {
                            "type": "string",
                            "format": "uuid",
                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                            "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                          },
                          "day": {
                            "type": "string",
                            "format": "date",
                            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                            "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                          },
                          "session_id": {
                            "anyOf": [
                              {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "created_at": {
                            "type": "string",
                            "format": "date-time",
                            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                          }
                        },
                        "required": [
                          "id",
                          "result_id",
                          "day",
                          "session_id",
                          "created_at"
                        ],
                        "additionalProperties": false,
                        "description": "Habit log stored in habit_logs. The UI marks calendar days and lists them under Updates with the Marked column. One row per result/day; unmarking deletes the row. This is not append-only history."
                      }
                    },
                    "next_cursor": {
                      "anyOf": [
                        {
                          "type": "string",
                          "minLength": 1
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "items",
                    "next_cursor"
                  ],
                  "additionalProperties": false
                },
                "trend": {
                  "type": "object",
                  "properties": {
                    "items": {
                      "maxItems": 100,
                      "type": "array",
                      "items": {
                        "oneOf": [
                          {
                            "type": "object",
                            "properties": {
                              "kind": {
                                "type": "string",
                                "const": "value"
                              },
                              "at": {
                                "type": "string",
                                "format": "date-time",
                                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                              },
                              "value": {
                                "type": "number"
                              },
                              "pace": {
                                "type": "number"
                              }
                            },
                            "required": [
                              "kind",
                              "at",
                              "value",
                              "pace"
                            ],
                            "additionalProperties": false
                          },
                          {
                            "type": "object",
                            "properties": {
                              "kind": {
                                "type": "string",
                                "const": "habit"
                              },
                              "from": {
                                "type": "string",
                                "format": "date",
                                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                                "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                              },
                              "to": {
                                "type": "string",
                                "format": "date",
                                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                                "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                              },
                              "actual": {
                                "type": "integer",
                                "minimum": -9007199254740991,
                                "maximum": 9007199254740991
                              },
                              "expected": {
                                "type": "number"
                              },
                              "expected_full": {
                                "type": "number"
                              }
                            },
                            "required": [
                              "kind",
                              "from",
                              "to",
                              "actual",
                              "expected",
                              "expected_full"
                            ],
                            "additionalProperties": false
                          },
                          {
                            "type": "object",
                            "properties": {
                              "kind": {
                                "type": "string",
                                "const": "performance"
                              },
                              "id": {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                              },
                              "at": {
                                "type": "string",
                                "format": "date-time",
                                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                              },
                              "value": {
                                "type": "number"
                              },
                              "target": {
                                "type": "number"
                              },
                              "gap": {
                                "type": "number"
                              },
                              "share": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              }
                            },
                            "required": [
                              "kind",
                              "id",
                              "at",
                              "value",
                              "target",
                              "gap",
                              "share"
                            ],
                            "additionalProperties": false
                          }
                        ]
                      }
                    },
                    "next_cursor": {
                      "anyOf": [
                        {
                          "type": "string",
                          "minLength": 1
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "items",
                    "next_cursor"
                  ],
                  "additionalProperties": false
                },
                "continuations": {
                  "type": "object",
                  "propertyNames": {
                    "type": "string",
                    "enum": [
                      "cycles",
                      "objectives",
                      "results",
                      "actions",
                      "notes",
                      "sessions",
                      "result_logs",
                      "habit_logs",
                      "action_logs",
                      "trend"
                    ]
                  },
                  "additionalProperties": {
                    "type": "string",
                    "minLength": 1
                  }
                }
              },
              "required": [
                "result",
                "parents",
                "result_logs",
                "habit_logs",
                "trend",
                "continuations"
              ],
              "additionalProperties": false
            },
            {
              "type": "null"
            }
          ]
        },
        "totals": {
          "type": "object",
          "properties": {
            "objectives": {
              "type": "integer",
              "minimum": 0,
              "maximum": 9007199254740991
            },
            "result_logs": {
              "type": "integer",
              "minimum": 0,
              "maximum": 9007199254740991
            },
            "habit_logs": {
              "type": "integer",
              "minimum": 0,
              "maximum": 9007199254740991
            },
            "trend": {
              "type": "integer",
              "minimum": 0,
              "maximum": 9007199254740991
            }
          },
          "required": [
            "objectives",
            "result_logs",
            "habit_logs",
            "trend"
          ],
          "additionalProperties": false
        }
      },
      "required": [
        "as_of",
        "data",
        "totals"
      ],
      "additionalProperties": false
    },
    "readiness": "contract-only",
    "binding": "planned",
    "gap": "Supply bounded parent figures, trend and evidence alongside the compact MCP result.",
    "sources": [
      {
        "tool": "result_read",
        "operations": [
          "get"
        ],
        "when": "get for an existing result.",
        "services": [
          "results.get"
        ]
      },
      {
        "tool": "result_write",
        "operations": [
          "create",
          "update"
        ],
        "when": "Successful create/update.",
        "services": [
          "results.create",
          "results.update"
        ]
      },
      {
        "tool": "progress_record",
        "operations": [
          "result",
          "habit"
        ],
        "when": "Successful result or habit evidence entry.",
        "services": [
          "result_logs.create",
          "habit_logs.set"
        ]
      }
    ]
  },
  {
    "id": "due_actions",
    "title": "Due actions",
    "owner": "F5 Actions",
    "kind": "product",
    "pages": [
      "/actions"
    ],
    "resource_uri": "ui://widget/due-actions.v1.html",
    "payload": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "as_of": {
          "type": "string",
          "format": "date-time",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
          "description": "Server snapshot time for the stale-snapshot footer."
        },
        "data": {
          "anyOf": [
            {
              "type": "object",
              "properties": {
                "cycle": {
                  "anyOf": [
                    {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                        },
                        "intention": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "UI label: Intention. Optional guiding focus; the cycle is identified by its date range, not a name."
                        },
                        "start_at": {
                          "type": "string",
                          "format": "date",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                          "description": "UI label: Starts."
                        },
                        "end_at": {
                          "type": "string",
                          "format": "date",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                          "description": "UI label: Ends."
                        },
                        "status": {
                          "type": "string",
                          "enum": [
                            "active",
                            "archived"
                          ]
                        },
                        "created_at": {
                          "type": "string",
                          "format": "date-time",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                        },
                        "url": {
                          "type": "string",
                          "format": "uri"
                        },
                        "achievement_pct": {
                          "anyOf": [
                            {
                              "type": "number"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "UI label: Achievement. Derived from objective progress; unavailable when nothing is measurable."
                        },
                        "time_gone_pct": {
                          "type": "number",
                          "minimum": 0,
                          "maximum": 100,
                          "description": "UI label: Time gone. Derived percentage of the cycle elapsed."
                        },
                        "length_weeks": {
                          "type": "integer",
                          "minimum": -9007199254740991,
                          "maximum": 9007199254740991,
                          "description": "UI label: Length, in weeks; derived from Starts and Ends."
                        }
                      },
                      "required": [
                        "id",
                        "intention",
                        "start_at",
                        "end_at",
                        "status",
                        "created_at",
                        "url",
                        "achievement_pct",
                        "time_gone_pct",
                        "length_weeks"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "cycle_line": {
                  "anyOf": [
                    {
                      "type": "object",
                      "properties": {
                        "range": {
                          "type": "string"
                        },
                        "time_gone_pct": {
                          "type": "number",
                          "minimum": 0,
                          "maximum": 100
                        }
                      },
                      "required": [
                        "range",
                        "time_gone_pct"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "objectives": {
                  "type": "object",
                  "properties": {
                    "items": {
                      "maxItems": 50,
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "id": {
                            "type": "string",
                            "format": "uuid",
                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                            "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                          },
                          "cycle_id": {
                            "type": "string",
                            "format": "uuid",
                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                            "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                          },
                          "title": {
                            "type": "string"
                          },
                          "description": {
                            "type": "string"
                          },
                          "deadline_at": {
                            "anyOf": [
                              {
                                "type": "string",
                                "format": "date",
                                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                                "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                              },
                              {
                                "type": "null"
                              }
                            ],
                            "description": "UI label: Deadline; null when no deadline has been set."
                          },
                          "status": {
                            "type": "string",
                            "enum": [
                              "on_track",
                              "off_track",
                              "completed"
                            ],
                            "description": "Objective status: On track, Off track or Completed. Coaching judgment, independent of the derived Progress percentage."
                          },
                          "created_at": {
                            "type": "string",
                            "format": "date-time",
                            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                          },
                          "short_code": {
                            "type": "string",
                            "minLength": 1
                          },
                          "url": {
                            "type": "string",
                            "format": "uri"
                          },
                          "progress_pct": {
                            "anyOf": [
                              {
                                "type": "number"
                              },
                              {
                                "type": "null"
                              }
                            ],
                            "description": "UI label: Progress. Derived from measurable results, independently of Status."
                          },
                          "boundary_progress_pct": {
                            "anyOf": [
                              {
                                "type": "number"
                              },
                              {
                                "type": "null"
                              }
                            ],
                            "description": "Historical progress at the resolved last-session boundary; not current Progress."
                          },
                          "movement_pp": {
                            "anyOf": [
                              {
                                "type": "number"
                              },
                              {
                                "type": "null"
                              }
                            ]
                          }
                        },
                        "required": [
                          "id",
                          "cycle_id",
                          "title",
                          "description",
                          "deadline_at",
                          "status",
                          "created_at",
                          "short_code",
                          "url",
                          "progress_pct",
                          "boundary_progress_pct",
                          "movement_pp"
                        ],
                        "additionalProperties": false
                      }
                    },
                    "next_cursor": {
                      "anyOf": [
                        {
                          "type": "string",
                          "minLength": 1
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "items",
                    "next_cursor"
                  ],
                  "additionalProperties": false
                },
                "actions": {
                  "type": "object",
                  "properties": {
                    "items": {
                      "maxItems": 50,
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "id": {
                            "type": "string",
                            "format": "uuid",
                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                            "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                          },
                          "cycle_id": {
                            "type": "string",
                            "format": "uuid",
                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                            "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                          },
                          "objective_id": {
                            "anyOf": [
                              {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "title": {
                            "type": "string"
                          },
                          "description": {
                            "anyOf": [
                              {
                                "type": "string"
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "due_at": {
                            "anyOf": [
                              {
                                "type": "string",
                                "format": "date",
                                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                                "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                              },
                              {
                                "type": "null"
                              }
                            ],
                            "description": "UI label: Due. May be unset on a web draft; a set date cannot be cleared."
                          },
                          "status": {
                            "type": "string",
                            "enum": [
                              "open",
                              "in_progress",
                              "done"
                            ],
                            "description": "Action status: Open, In progress or Done. The To do UI group includes Open and In progress; Overdue is derived, not a status."
                          },
                          "sort_order": {
                            "anyOf": [
                              {
                                "type": "number"
                              },
                              {
                                "type": "null"
                              }
                            ],
                            "description": "Drag order within an action group; not a progress status."
                          },
                          "session_id": {
                            "anyOf": [
                              {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "created_at": {
                            "type": "string",
                            "format": "date-time",
                            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                          },
                          "url": {
                            "type": "string",
                            "format": "uri"
                          },
                          "overdue": {
                            "type": "boolean"
                          },
                          "done_since_boundary": {
                            "type": "boolean"
                          }
                        },
                        "required": [
                          "id",
                          "cycle_id",
                          "objective_id",
                          "title",
                          "description",
                          "due_at",
                          "status",
                          "sort_order",
                          "session_id",
                          "created_at",
                          "url",
                          "overdue",
                          "done_since_boundary"
                        ],
                        "additionalProperties": false
                      }
                    },
                    "next_cursor": {
                      "anyOf": [
                        {
                          "type": "string",
                          "minLength": 1
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "items",
                    "next_cursor"
                  ],
                  "additionalProperties": false
                },
                "continuations": {
                  "type": "object",
                  "propertyNames": {
                    "type": "string",
                    "enum": [
                      "cycles",
                      "objectives",
                      "results",
                      "actions",
                      "notes",
                      "sessions",
                      "result_logs",
                      "habit_logs",
                      "action_logs",
                      "trend"
                    ]
                  },
                  "additionalProperties": {
                    "type": "string",
                    "minLength": 1
                  }
                }
              },
              "required": [
                "cycle",
                "cycle_line",
                "objectives",
                "actions",
                "continuations"
              ],
              "additionalProperties": false
            },
            {
              "type": "null"
            }
          ]
        },
        "totals": {
          "type": "object",
          "properties": {
            "objectives": {
              "type": "integer",
              "minimum": 0,
              "maximum": 9007199254740991
            },
            "actions": {
              "type": "integer",
              "minimum": 0,
              "maximum": 9007199254740991
            }
          },
          "required": [
            "objectives",
            "actions"
          ],
          "additionalProperties": false
        }
      },
      "required": [
        "as_of",
        "data",
        "totals"
      ],
      "additionalProperties": false
    },
    "readiness": "contract-only",
    "binding": "planned",
    "gap": "Compose the cycle, objective grouping and remaining open actions server-side; a mutation receipt alone is insufficient.",
    "sources": [
      {
        "tool": "action_read",
        "operations": [
          "list"
        ],
        "when": "list; open actions grouped by objective in stored order.",
        "services": [
          "actions.list"
        ]
      },
      {
        "tool": "action_write",
        "operations": [
          "create",
          "update"
        ],
        "when": "Successful create/update; refreshed open-action snapshot.",
        "services": [
          "actions.create",
          "actions.update"
        ]
      },
      {
        "tool": "action_delete",
        "operations": [
          "commit"
        ],
        "when": "Successful commit; remaining open actions only, never the deleted record.",
        "services": [
          "actions.delete"
        ]
      },
      {
        "tool": "progress_record",
        "operations": [
          "action"
        ],
        "when": "Successful action evidence entry; refreshed open-action snapshot.",
        "services": [
          "action_logs.create"
        ]
      }
    ]
  },
  {
    "id": "action",
    "title": "Action",
    "owner": "F5 Actions",
    "kind": "product",
    "pages": [
      "/actions/:id"
    ],
    "resource_uri": "ui://widget/action.v1.html",
    "payload": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "as_of": {
          "type": "string",
          "format": "date-time",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
          "description": "Server snapshot time for the stale-snapshot footer."
        },
        "data": {
          "anyOf": [
            {
              "type": "object",
              "properties": {
                "action": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    "cycle_id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    "objective_id": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "title": {
                      "type": "string"
                    },
                    "description": {
                      "anyOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "due_at": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "date",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                          "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                        },
                        {
                          "type": "null"
                        }
                      ],
                      "description": "UI label: Due. May be unset on a web draft; a set date cannot be cleared."
                    },
                    "status": {
                      "type": "string",
                      "enum": [
                        "open",
                        "in_progress",
                        "done"
                      ],
                      "description": "Action status: Open, In progress or Done. The To do UI group includes Open and In progress; Overdue is derived, not a status."
                    },
                    "sort_order": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ],
                      "description": "Drag order within an action group; not a progress status."
                    },
                    "session_id": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "created_at": {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    "url": {
                      "type": "string",
                      "format": "uri"
                    },
                    "overdue": {
                      "type": "boolean"
                    },
                    "done_since_boundary": {
                      "type": "boolean"
                    }
                  },
                  "required": [
                    "id",
                    "cycle_id",
                    "objective_id",
                    "title",
                    "description",
                    "due_at",
                    "status",
                    "sort_order",
                    "session_id",
                    "created_at",
                    "url",
                    "overdue",
                    "done_since_boundary"
                  ],
                  "additionalProperties": false
                },
                "cycle": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    "intention": {
                      "anyOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "null"
                        }
                      ],
                      "description": "UI label: Intention. Optional guiding focus; the cycle is identified by its date range, not a name."
                    },
                    "start_at": {
                      "type": "string",
                      "format": "date",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                      "description": "UI label: Starts."
                    },
                    "end_at": {
                      "type": "string",
                      "format": "date",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                      "description": "UI label: Ends."
                    },
                    "status": {
                      "type": "string",
                      "enum": [
                        "active",
                        "archived"
                      ]
                    },
                    "created_at": {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    "url": {
                      "type": "string",
                      "format": "uri"
                    },
                    "achievement_pct": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ],
                      "description": "UI label: Achievement. Derived from objective progress; unavailable when nothing is measurable."
                    },
                    "time_gone_pct": {
                      "type": "number",
                      "minimum": 0,
                      "maximum": 100,
                      "description": "UI label: Time gone. Derived percentage of the cycle elapsed."
                    },
                    "length_weeks": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991,
                      "description": "UI label: Length, in weeks; derived from Starts and Ends."
                    }
                  },
                  "required": [
                    "id",
                    "intention",
                    "start_at",
                    "end_at",
                    "status",
                    "created_at",
                    "url",
                    "achievement_pct",
                    "time_gone_pct",
                    "length_weeks"
                  ],
                  "additionalProperties": false
                },
                "objective": {
                  "anyOf": [
                    {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                        },
                        "cycle_id": {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                        },
                        "title": {
                          "type": "string"
                        },
                        "description": {
                          "type": "string"
                        },
                        "deadline_at": {
                          "anyOf": [
                            {
                              "type": "string",
                              "format": "date",
                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                              "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "UI label: Deadline; null when no deadline has been set."
                        },
                        "status": {
                          "type": "string",
                          "enum": [
                            "on_track",
                            "off_track",
                            "completed"
                          ],
                          "description": "Objective status: On track, Off track or Completed. Coaching judgment, independent of the derived Progress percentage."
                        },
                        "created_at": {
                          "type": "string",
                          "format": "date-time",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                        },
                        "short_code": {
                          "type": "string",
                          "minLength": 1
                        },
                        "url": {
                          "type": "string",
                          "format": "uri"
                        },
                        "progress_pct": {
                          "anyOf": [
                            {
                              "type": "number"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "UI label: Progress. Derived from measurable results, independently of Status."
                        },
                        "boundary_progress_pct": {
                          "anyOf": [
                            {
                              "type": "number"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Historical progress at the resolved last-session boundary; not current Progress."
                        },
                        "movement_pp": {
                          "anyOf": [
                            {
                              "type": "number"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        }
                      },
                      "required": [
                        "id",
                        "cycle_id",
                        "title",
                        "description",
                        "deadline_at",
                        "status",
                        "created_at",
                        "short_code",
                        "url",
                        "progress_pct",
                        "boundary_progress_pct",
                        "movement_pp"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "source_session": {
                  "anyOf": [
                    {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                        },
                        "vendor": {
                          "type": "string",
                          "enum": [
                            "claude",
                            "openai"
                          ],
                          "description": "Conversation host: claude is shown as Claude; openai is shown as ChatGPT."
                        },
                        "source_url": {
                          "anyOf": [
                            {
                              "type": "string",
                              "format": "uri"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "External conversation link used by Open the conversation. Not the app detail URL."
                        },
                        "type": {
                          "anyOf": [
                            {
                              "type": "string",
                              "enum": [
                                "goal_setup",
                                "check_in",
                                "review",
                                "open_coaching"
                              ],
                              "description": "Coaching session type: Goal setup, Check-in, Review or Open coaching. Separate from whether the session is still open."
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "briefing_notes": {
                          "type": "string",
                          "description": "UI document: Briefing. Server-prepared coaching context."
                        },
                        "headline": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "One-line coaching-session summary used in session lists."
                        },
                        "summary_notes": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "UI document: Summary. Saved when the coaching session closes."
                        },
                        "started_at": {
                          "type": "string",
                          "format": "date-time",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                        },
                        "ended_at": {
                          "anyOf": [
                            {
                              "type": "string",
                              "format": "date-time",
                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Closed when set; In progress when null. This is derived session state, not a stored status enum."
                        },
                        "url": {
                          "type": "string",
                          "format": "uri",
                          "description": "Internal app link to coaching session details; distinct from source_url."
                        },
                        "duration_minutes": {
                          "anyOf": [
                            {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "actions_created": {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        "actions_reviewed": {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        }
                      },
                      "required": [
                        "id",
                        "vendor",
                        "source_url",
                        "type",
                        "briefing_notes",
                        "headline",
                        "summary_notes",
                        "started_at",
                        "ended_at",
                        "url",
                        "duration_minutes",
                        "actions_created",
                        "actions_reviewed"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "action_logs": {
                  "type": "object",
                  "properties": {
                    "items": {
                      "maxItems": 100,
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "id": {
                            "type": "string",
                            "format": "uuid",
                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                            "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                          },
                          "action_id": {
                            "type": "string",
                            "format": "uuid",
                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                            "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                          },
                          "status": {
                            "type": "string",
                            "enum": [
                              "open",
                              "in_progress",
                              "done"
                            ],
                            "description": "Action status: Open, In progress or Done. The To do UI group includes Open and In progress; Overdue is derived, not a status."
                          },
                          "comment": {
                            "anyOf": [
                              {
                                "type": "string"
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "session_id": {
                            "anyOf": [
                              {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "recorded_at": {
                            "type": "string",
                            "format": "date-time",
                            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                          }
                        },
                        "required": [
                          "id",
                          "action_id",
                          "status",
                          "comment",
                          "session_id",
                          "recorded_at"
                        ],
                        "additionalProperties": false,
                        "description": "Action log stored in action_logs. Records a status observation and optional comment. Action detail shows Comments, a filtered view rather than the complete status history; status and timestamps are immutable, and only the comment may be cleared."
                      }
                    },
                    "next_cursor": {
                      "anyOf": [
                        {
                          "type": "string",
                          "minLength": 1
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "items",
                    "next_cursor"
                  ],
                  "additionalProperties": false
                },
                "continuations": {
                  "type": "object",
                  "propertyNames": {
                    "type": "string",
                    "enum": [
                      "cycles",
                      "objectives",
                      "results",
                      "actions",
                      "notes",
                      "sessions",
                      "result_logs",
                      "habit_logs",
                      "action_logs",
                      "trend"
                    ]
                  },
                  "additionalProperties": {
                    "type": "string",
                    "minLength": 1
                  }
                }
              },
              "required": [
                "action",
                "cycle",
                "objective",
                "source_session",
                "action_logs",
                "continuations"
              ],
              "additionalProperties": false
            },
            {
              "type": "null"
            }
          ]
        },
        "totals": {
          "type": "object",
          "properties": {
            "action_logs": {
              "type": "integer",
              "minimum": 0,
              "maximum": 9007199254740991
            }
          },
          "required": [
            "action_logs"
          ],
          "additionalProperties": false
        }
      },
      "required": [
        "as_of",
        "data",
        "totals"
      ],
      "additionalProperties": false
    },
    "readiness": "contract-only",
    "binding": "planned",
    "gap": "Supply parent labels and bounded action history alongside the compact MCP action.",
    "sources": [
      {
        "tool": "action_read",
        "operations": [
          "get"
        ],
        "when": "get for an existing action.",
        "services": [
          "actions.get"
        ]
      },
      {
        "tool": "action_write",
        "operations": [
          "create",
          "update"
        ],
        "when": "Successful create/update.",
        "services": [
          "actions.create",
          "actions.update"
        ]
      }
    ]
  },
  {
    "id": "notes",
    "title": "Notes",
    "owner": "F6 Notes",
    "kind": "product",
    "pages": [
      "/notes"
    ],
    "resource_uri": "ui://widget/notes.v1.html",
    "payload": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "as_of": {
          "type": "string",
          "format": "date-time",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
          "description": "Server snapshot time for the stale-snapshot footer."
        },
        "data": {
          "anyOf": [
            {
              "type": "object",
              "properties": {
                "items": {
                  "maxItems": 3,
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      "text": {
                        "type": "string",
                        "minLength": 1
                      },
                      "recorded_at": {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      "url": {
                        "type": "string",
                        "format": "uri"
                      },
                      "since_boundary": {
                        "type": "boolean"
                      }
                    },
                    "required": [
                      "id",
                      "text",
                      "recorded_at",
                      "url",
                      "since_boundary"
                    ],
                    "additionalProperties": false
                  }
                },
                "next_cursor": {
                  "anyOf": [
                    {
                      "type": "string",
                      "minLength": 1
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "window": {
                  "anyOf": [
                    {
                      "type": "object",
                      "properties": {
                        "since": {
                          "type": "string",
                          "format": "date-time",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                        },
                        "until": {
                          "type": "string",
                          "format": "date-time",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                        }
                      },
                      "required": [
                        "since",
                        "until"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "items",
                "next_cursor",
                "window"
              ],
              "additionalProperties": false
            },
            {
              "type": "null"
            }
          ]
        },
        "totals": {
          "type": "object",
          "properties": {
            "notes": {
              "type": "integer",
              "minimum": 0,
              "maximum": 9007199254740991
            }
          },
          "required": [
            "notes"
          ],
          "additionalProperties": false
        }
      },
      "required": [
        "as_of",
        "data",
        "totals"
      ],
      "additionalProperties": false
    },
    "readiness": "contract-only",
    "binding": "planned",
    "gap": "Project list responses and obtain the bounded refreshed list after a mutation; never repeat writes for pagination.",
    "sources": [
      {
        "tool": "note_read",
        "operations": [
          "list"
        ],
        "when": "list; bounded recent notes with the resolved window.",
        "services": [
          "notes.list"
        ]
      },
      {
        "tool": "note_write",
        "operations": [
          "create",
          "update"
        ],
        "when": "Successful create/update; refreshed list.",
        "services": [
          "notes.create",
          "notes.update"
        ]
      },
      {
        "tool": "note_delete",
        "operations": [
          "commit"
        ],
        "when": "Successful commit; remaining notes only.",
        "services": [
          "notes.delete"
        ]
      }
    ]
  },
  {
    "id": "note",
    "title": "Note",
    "owner": "F6 Notes",
    "kind": "product",
    "pages": [
      "/notes/:id"
    ],
    "resource_uri": "ui://widget/note.v1.html",
    "payload": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "as_of": {
          "type": "string",
          "format": "date-time",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
          "description": "Server snapshot time for the stale-snapshot footer."
        },
        "data": {
          "anyOf": [
            {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "text": {
                  "type": "string",
                  "minLength": 1
                },
                "recorded_at": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                },
                "since_boundary": {
                  "type": "boolean"
                }
              },
              "required": [
                "id",
                "text",
                "recorded_at",
                "url",
                "since_boundary"
              ],
              "additionalProperties": false
            },
            {
              "type": "null"
            }
          ]
        },
        "totals": {
          "type": "object",
          "properties": {},
          "additionalProperties": false
        }
      },
      "required": [
        "as_of",
        "data",
        "totals"
      ],
      "additionalProperties": false
    },
    "readiness": "contract-only",
    "binding": "planned",
    "gap": "Bind the note field from structuredContent to the declared payload; stored text stays untrusted.",
    "sources": [
      {
        "tool": "note_read",
        "operations": [
          "get"
        ],
        "when": "get for an existing note.",
        "services": [
          "notes.get"
        ]
      },
      {
        "tool": "note_write",
        "operations": [
          "create",
          "update"
        ],
        "when": "Successful create/update.",
        "services": [
          "notes.create",
          "notes.update"
        ]
      }
    ]
  },
  {
    "id": "session",
    "title": "Session",
    "owner": "F7 Sessions",
    "kind": "product",
    "pages": [
      "/sessions",
      "/sessions/:id"
    ],
    "resource_uri": "ui://widget/session.v1.html",
    "payload": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "as_of": {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
              "description": "Server snapshot time for the stale-snapshot footer."
            },
            "data": {
              "anyOf": [
                {
                  "type": "object",
                  "properties": {
                    "session": {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                        },
                        "vendor": {
                          "type": "string",
                          "enum": [
                            "claude",
                            "openai"
                          ],
                          "description": "Conversation host: claude is shown as Claude; openai is shown as ChatGPT."
                        },
                        "source_url": {
                          "anyOf": [
                            {
                              "type": "string",
                              "format": "uri"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "External conversation link used by Open the conversation. Not the app detail URL."
                        },
                        "type": {
                          "anyOf": [
                            {
                              "type": "string",
                              "enum": [
                                "goal_setup",
                                "check_in",
                                "review",
                                "open_coaching"
                              ],
                              "description": "Coaching session type: Goal setup, Check-in, Review or Open coaching. Separate from whether the session is still open."
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "briefing_notes": {
                          "type": "string",
                          "description": "UI document: Briefing. Server-prepared coaching context."
                        },
                        "headline": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "One-line coaching-session summary used in session lists."
                        },
                        "summary_notes": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "UI document: Summary. Saved when the coaching session closes."
                        },
                        "started_at": {
                          "type": "string",
                          "format": "date-time",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                        },
                        "ended_at": {
                          "anyOf": [
                            {
                              "type": "string",
                              "format": "date-time",
                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Closed when set; In progress when null. This is derived session state, not a stored status enum."
                        },
                        "url": {
                          "type": "string",
                          "format": "uri",
                          "description": "Internal app link to coaching session details; distinct from source_url."
                        },
                        "duration_minutes": {
                          "anyOf": [
                            {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "actions_created": {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        "actions_reviewed": {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        }
                      },
                      "required": [
                        "id",
                        "vendor",
                        "source_url",
                        "type",
                        "briefing_notes",
                        "headline",
                        "summary_notes",
                        "started_at",
                        "ended_at",
                        "url",
                        "duration_minutes",
                        "actions_created",
                        "actions_reviewed"
                      ],
                      "additionalProperties": false
                    },
                    "actions": {
                      "type": "object",
                      "properties": {
                        "items": {
                          "maxItems": 100,
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                              },
                              "cycle_id": {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                              },
                              "objective_id": {
                                "anyOf": [
                                  {
                                    "type": "string",
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "title": {
                                "type": "string"
                              },
                              "description": {
                                "anyOf": [
                                  {
                                    "type": "string"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "due_at": {
                                "anyOf": [
                                  {
                                    "type": "string",
                                    "format": "date",
                                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                                    "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                                  },
                                  {
                                    "type": "null"
                                  }
                                ],
                                "description": "UI label: Due. May be unset on a web draft; a set date cannot be cleared."
                              },
                              "status": {
                                "type": "string",
                                "enum": [
                                  "open",
                                  "in_progress",
                                  "done"
                                ],
                                "description": "Action status: Open, In progress or Done. The To do UI group includes Open and In progress; Overdue is derived, not a status."
                              },
                              "sort_order": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ],
                                "description": "Drag order within an action group; not a progress status."
                              },
                              "session_id": {
                                "anyOf": [
                                  {
                                    "type": "string",
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "created_at": {
                                "type": "string",
                                "format": "date-time",
                                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                              },
                              "url": {
                                "type": "string",
                                "format": "uri"
                              },
                              "overdue": {
                                "type": "boolean"
                              },
                              "done_since_boundary": {
                                "type": "boolean"
                              }
                            },
                            "required": [
                              "id",
                              "cycle_id",
                              "objective_id",
                              "title",
                              "description",
                              "due_at",
                              "status",
                              "sort_order",
                              "session_id",
                              "created_at",
                              "url",
                              "overdue",
                              "done_since_boundary"
                            ],
                            "additionalProperties": false
                          }
                        },
                        "next_cursor": {
                          "anyOf": [
                            {
                              "type": "string",
                              "minLength": 1
                            },
                            {
                              "type": "null"
                            }
                          ]
                        }
                      },
                      "required": [
                        "items",
                        "next_cursor"
                      ],
                      "additionalProperties": false
                    },
                    "continuations": {
                      "type": "object",
                      "propertyNames": {
                        "type": "string",
                        "enum": [
                          "cycles",
                          "objectives",
                          "results",
                          "actions",
                          "notes",
                          "sessions",
                          "result_logs",
                          "habit_logs",
                          "action_logs",
                          "trend"
                        ]
                      },
                      "additionalProperties": {
                        "type": "string",
                        "minLength": 1
                      }
                    }
                  },
                  "required": [
                    "session",
                    "actions",
                    "continuations"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "null"
                }
              ]
            },
            "totals": {
              "type": "object",
              "properties": {
                "actions": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                }
              },
              "required": [
                "actions"
              ],
              "additionalProperties": false
            }
          },
          "required": [
            "as_of",
            "data",
            "totals"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "as_of": {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
              "description": "Server snapshot time for the stale-snapshot footer."
            },
            "data": {
              "anyOf": [
                {
                  "type": "object",
                  "properties": {
                    "items": {
                      "maxItems": 100,
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "id": {
                            "type": "string",
                            "format": "uuid",
                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                            "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                          },
                          "vendor": {
                            "type": "string",
                            "enum": [
                              "claude",
                              "openai"
                            ],
                            "description": "Conversation host: claude is shown as Claude; openai is shown as ChatGPT."
                          },
                          "source_url": {
                            "anyOf": [
                              {
                                "type": "string",
                                "format": "uri"
                              },
                              {
                                "type": "null"
                              }
                            ],
                            "description": "External conversation link used by Open the conversation. Not the app detail URL."
                          },
                          "type": {
                            "anyOf": [
                              {
                                "type": "string",
                                "enum": [
                                  "goal_setup",
                                  "check_in",
                                  "review",
                                  "open_coaching"
                                ],
                                "description": "Coaching session type: Goal setup, Check-in, Review or Open coaching. Separate from whether the session is still open."
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "briefing_notes": {
                            "type": "string",
                            "description": "UI document: Briefing. Server-prepared coaching context."
                          },
                          "headline": {
                            "anyOf": [
                              {
                                "type": "string"
                              },
                              {
                                "type": "null"
                              }
                            ],
                            "description": "One-line coaching-session summary used in session lists."
                          },
                          "summary_notes": {
                            "anyOf": [
                              {
                                "type": "string"
                              },
                              {
                                "type": "null"
                              }
                            ],
                            "description": "UI document: Summary. Saved when the coaching session closes."
                          },
                          "started_at": {
                            "type": "string",
                            "format": "date-time",
                            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                          },
                          "ended_at": {
                            "anyOf": [
                              {
                                "type": "string",
                                "format": "date-time",
                                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                              },
                              {
                                "type": "null"
                              }
                            ],
                            "description": "Closed when set; In progress when null. This is derived session state, not a stored status enum."
                          },
                          "url": {
                            "type": "string",
                            "format": "uri",
                            "description": "Internal app link to coaching session details; distinct from source_url."
                          },
                          "duration_minutes": {
                            "anyOf": [
                              {
                                "type": "integer",
                                "minimum": 0,
                                "maximum": 9007199254740991
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "actions_created": {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          "actions_reviewed": {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          }
                        },
                        "required": [
                          "id",
                          "vendor",
                          "source_url",
                          "type",
                          "briefing_notes",
                          "headline",
                          "summary_notes",
                          "started_at",
                          "ended_at",
                          "url",
                          "duration_minutes",
                          "actions_created",
                          "actions_reviewed"
                        ],
                        "additionalProperties": false
                      }
                    },
                    "next_cursor": {
                      "anyOf": [
                        {
                          "type": "string",
                          "minLength": 1
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "items",
                    "next_cursor"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "null"
                }
              ]
            },
            "totals": {
              "type": "object",
              "properties": {
                "sessions": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                }
              },
              "required": [
                "sessions"
              ],
              "additionalProperties": false
            }
          },
          "required": [
            "as_of",
            "data",
            "totals"
          ],
          "additionalProperties": false
        }
      ]
    },
    "readiness": "contract-only",
    "binding": "planned",
    "gap": "Supply the detail/list variant and bounded session actions; compact session results do not satisfy detail payloads.",
    "sources": [
      {
        "tool": "session_read",
        "operations": [
          "list",
          "get"
        ],
        "when": "list or get for a stored session; skip missing-session results.",
        "services": [
          "sessions.list",
          "sessions.get_stored"
        ]
      },
      {
        "tool": "session_close",
        "operations": [
          "call"
        ],
        "when": "Successful explicit closure; show the saved summary and session actions.",
        "services": [
          "sessions.close"
        ]
      }
    ]
  },
  {
    "id": "session_document",
    "title": "Session document",
    "owner": "F7 Sessions",
    "kind": "product",
    "pages": [
      "/sessions/:id/briefing",
      "/sessions/:id/summary"
    ],
    "resource_uri": "ui://widget/session-doc.v1.html",
    "payload": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "as_of": {
          "type": "string",
          "format": "date-time",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
          "description": "Server snapshot time for the stale-snapshot footer."
        },
        "data": {
          "anyOf": [
            {
              "type": "object",
              "properties": {
                "session": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    "vendor": {
                      "type": "string",
                      "enum": [
                        "claude",
                        "openai"
                      ],
                      "description": "Conversation host: claude is shown as Claude; openai is shown as ChatGPT."
                    },
                    "source_url": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "uri"
                        },
                        {
                          "type": "null"
                        }
                      ],
                      "description": "External conversation link used by Open the conversation. Not the app detail URL."
                    },
                    "type": {
                      "anyOf": [
                        {
                          "type": "string",
                          "enum": [
                            "goal_setup",
                            "check_in",
                            "review",
                            "open_coaching"
                          ],
                          "description": "Coaching session type: Goal setup, Check-in, Review or Open coaching. Separate from whether the session is still open."
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "briefing_notes": {
                      "type": "string",
                      "description": "UI document: Briefing. Server-prepared coaching context."
                    },
                    "headline": {
                      "anyOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "null"
                        }
                      ],
                      "description": "One-line coaching-session summary used in session lists."
                    },
                    "summary_notes": {
                      "anyOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "null"
                        }
                      ],
                      "description": "UI document: Summary. Saved when the coaching session closes."
                    },
                    "started_at": {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    "ended_at": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "date-time",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                        },
                        {
                          "type": "null"
                        }
                      ],
                      "description": "Closed when set; In progress when null. This is derived session state, not a stored status enum."
                    },
                    "url": {
                      "type": "string",
                      "format": "uri",
                      "description": "Internal app link to coaching session details; distinct from source_url."
                    },
                    "duration_minutes": {
                      "anyOf": [
                        {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "actions_created": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    "actions_reviewed": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    }
                  },
                  "required": [
                    "id",
                    "vendor",
                    "source_url",
                    "type",
                    "briefing_notes",
                    "headline",
                    "summary_notes",
                    "started_at",
                    "ended_at",
                    "url",
                    "duration_minutes",
                    "actions_created",
                    "actions_reviewed"
                  ],
                  "additionalProperties": false
                },
                "document": {
                  "type": "string",
                  "enum": [
                    "briefing",
                    "summary"
                  ]
                },
                "text": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "session",
                "document",
                "text"
              ],
              "additionalProperties": false
            },
            {
              "type": "null"
            }
          ]
        },
        "totals": {
          "type": "object",
          "properties": {},
          "additionalProperties": false
        }
      },
      "required": [
        "as_of",
        "data",
        "totals"
      ],
      "additionalProperties": false
    },
    "readiness": "contract-only",
    "binding": "planned",
    "gap": "Provide the complete session record and selected canonical document text; render stored text as data, never instructions.",
    "sources": [
      {
        "tool": "session_start",
        "operations": [
          "call"
        ],
        "when": "Active access only; saved briefing document.",
        "services": [
          "sessions.start"
        ]
      },
      {
        "tool": "session_read",
        "operations": [
          "get"
        ],
        "when": "get with a selected stored briefing or summary document.",
        "services": [
          "sessions.get_stored"
        ]
      }
    ]
  },
  {
    "id": "cycle",
    "title": "Cycle",
    "owner": "F2 Cycles",
    "kind": "product",
    "pages": [
      "/cycles",
      "/cycles/:id"
    ],
    "resource_uri": "ui://widget/cycle.v1.html",
    "payload": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "as_of": {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
              "description": "Server snapshot time for the stale-snapshot footer."
            },
            "data": {
              "anyOf": [
                {
                  "type": "object",
                  "properties": {
                    "cycle": {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                        },
                        "intention": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "UI label: Intention. Optional guiding focus; the cycle is identified by its date range, not a name."
                        },
                        "start_at": {
                          "type": "string",
                          "format": "date",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                          "description": "UI label: Starts."
                        },
                        "end_at": {
                          "type": "string",
                          "format": "date",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                          "description": "UI label: Ends."
                        },
                        "status": {
                          "type": "string",
                          "enum": [
                            "active",
                            "archived"
                          ]
                        },
                        "created_at": {
                          "type": "string",
                          "format": "date-time",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                        },
                        "url": {
                          "type": "string",
                          "format": "uri"
                        },
                        "achievement_pct": {
                          "anyOf": [
                            {
                              "type": "number"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "UI label: Achievement. Derived from objective progress; unavailable when nothing is measurable."
                        },
                        "time_gone_pct": {
                          "type": "number",
                          "minimum": 0,
                          "maximum": 100,
                          "description": "UI label: Time gone. Derived percentage of the cycle elapsed."
                        },
                        "length_weeks": {
                          "type": "integer",
                          "minimum": -9007199254740991,
                          "maximum": 9007199254740991,
                          "description": "UI label: Length, in weeks; derived from Starts and Ends."
                        }
                      },
                      "required": [
                        "id",
                        "intention",
                        "start_at",
                        "end_at",
                        "status",
                        "created_at",
                        "url",
                        "achievement_pct",
                        "time_gone_pct",
                        "length_weeks"
                      ],
                      "additionalProperties": false
                    },
                    "objectives": {
                      "type": "object",
                      "properties": {
                        "items": {
                          "maxItems": 50,
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                              },
                              "cycle_id": {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                              },
                              "title": {
                                "type": "string"
                              },
                              "description": {
                                "type": "string"
                              },
                              "deadline_at": {
                                "anyOf": [
                                  {
                                    "type": "string",
                                    "format": "date",
                                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                                    "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                                  },
                                  {
                                    "type": "null"
                                  }
                                ],
                                "description": "UI label: Deadline; null when no deadline has been set."
                              },
                              "status": {
                                "type": "string",
                                "enum": [
                                  "on_track",
                                  "off_track",
                                  "completed"
                                ],
                                "description": "Objective status: On track, Off track or Completed. Coaching judgment, independent of the derived Progress percentage."
                              },
                              "created_at": {
                                "type": "string",
                                "format": "date-time",
                                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                              },
                              "short_code": {
                                "type": "string",
                                "minLength": 1
                              },
                              "url": {
                                "type": "string",
                                "format": "uri"
                              },
                              "progress_pct": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ],
                                "description": "UI label: Progress. Derived from measurable results, independently of Status."
                              },
                              "boundary_progress_pct": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ],
                                "description": "Historical progress at the resolved last-session boundary; not current Progress."
                              },
                              "movement_pp": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              }
                            },
                            "required": [
                              "id",
                              "cycle_id",
                              "title",
                              "description",
                              "deadline_at",
                              "status",
                              "created_at",
                              "short_code",
                              "url",
                              "progress_pct",
                              "boundary_progress_pct",
                              "movement_pp"
                            ],
                            "additionalProperties": false
                          }
                        },
                        "next_cursor": {
                          "anyOf": [
                            {
                              "type": "string",
                              "minLength": 1
                            },
                            {
                              "type": "null"
                            }
                          ]
                        }
                      },
                      "required": [
                        "items",
                        "next_cursor"
                      ],
                      "additionalProperties": false
                    },
                    "continuations": {
                      "type": "object",
                      "propertyNames": {
                        "type": "string",
                        "enum": [
                          "cycles",
                          "objectives",
                          "results",
                          "actions",
                          "notes",
                          "sessions",
                          "result_logs",
                          "habit_logs",
                          "action_logs",
                          "trend"
                        ]
                      },
                      "additionalProperties": {
                        "type": "string",
                        "minLength": 1
                      }
                    }
                  },
                  "required": [
                    "cycle",
                    "objectives",
                    "continuations"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "null"
                }
              ]
            },
            "totals": {
              "type": "object",
              "properties": {
                "objectives": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                }
              },
              "required": [
                "objectives"
              ],
              "additionalProperties": false
            }
          },
          "required": [
            "as_of",
            "data",
            "totals"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "as_of": {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
              "description": "Server snapshot time for the stale-snapshot footer."
            },
            "data": {
              "anyOf": [
                {
                  "type": "object",
                  "properties": {
                    "items": {
                      "maxItems": 100,
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "id": {
                            "type": "string",
                            "format": "uuid",
                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                            "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                          },
                          "intention": {
                            "anyOf": [
                              {
                                "type": "string"
                              },
                              {
                                "type": "null"
                              }
                            ],
                            "description": "UI label: Intention. Optional guiding focus; the cycle is identified by its date range, not a name."
                          },
                          "start_at": {
                            "type": "string",
                            "format": "date",
                            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                            "description": "UI label: Starts."
                          },
                          "end_at": {
                            "type": "string",
                            "format": "date",
                            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                            "description": "UI label: Ends."
                          },
                          "status": {
                            "type": "string",
                            "enum": [
                              "active",
                              "archived"
                            ]
                          },
                          "created_at": {
                            "type": "string",
                            "format": "date-time",
                            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                          },
                          "url": {
                            "type": "string",
                            "format": "uri"
                          },
                          "achievement_pct": {
                            "anyOf": [
                              {
                                "type": "number"
                              },
                              {
                                "type": "null"
                              }
                            ],
                            "description": "UI label: Achievement. Derived from objective progress; unavailable when nothing is measurable."
                          },
                          "time_gone_pct": {
                            "type": "number",
                            "minimum": 0,
                            "maximum": 100,
                            "description": "UI label: Time gone. Derived percentage of the cycle elapsed."
                          },
                          "length_weeks": {
                            "type": "integer",
                            "minimum": -9007199254740991,
                            "maximum": 9007199254740991,
                            "description": "UI label: Length, in weeks; derived from Starts and Ends."
                          }
                        },
                        "required": [
                          "id",
                          "intention",
                          "start_at",
                          "end_at",
                          "status",
                          "created_at",
                          "url",
                          "achievement_pct",
                          "time_gone_pct",
                          "length_weeks"
                        ],
                        "additionalProperties": false
                      }
                    },
                    "next_cursor": {
                      "anyOf": [
                        {
                          "type": "string",
                          "minLength": 1
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "items",
                    "next_cursor"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "null"
                }
              ]
            },
            "totals": {
              "type": "object",
              "properties": {
                "cycles": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                }
              },
              "required": [
                "cycles"
              ],
              "additionalProperties": false
            }
          },
          "required": [
            "as_of",
            "data",
            "totals"
          ],
          "additionalProperties": false
        }
      ]
    },
    "readiness": "contract-only",
    "binding": "planned",
    "gap": "Bind list/detail variants and include bounded objectives for a cycle detail; never render a deleted cycle.",
    "sources": [
      {
        "tool": "cycle_read",
        "operations": [
          "list",
          "get"
        ],
        "when": "list or get; skip a missing active cycle.",
        "services": [
          "cycles.list",
          "cycles.get",
          "cycles.get_stored_active"
        ]
      },
      {
        "tool": "cycle_update",
        "operations": [
          "call"
        ],
        "when": "Successful date/intention update.",
        "services": [
          "cycles.update"
        ]
      },
      {
        "tool": "cycle_lifecycle",
        "operations": [
          "create",
          "archive",
          "activate"
        ],
        "when": "Successful create/archive/activate.",
        "services": [
          "cycles.create",
          "cycles.update"
        ]
      }
    ]
  },
  {
    "id": "example",
    "title": "Example",
    "owner": "Temporary scaffold reference",
    "kind": "scaffold",
    "pages": [
      "/example"
    ],
    "resource_uri": "ui://widget/example-card.v0.html",
    "payload": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "examples": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
              },
              "name": {
                "type": "string"
              },
              "created_at": {
                "type": "string",
                "format": "date-time",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              },
              "stale": {
                "type": "boolean"
              }
            },
            "required": [
              "id",
              "name",
              "created_at",
              "stale"
            ],
            "additionalProperties": false
          }
        }
      },
      "required": [
        "examples"
      ],
      "additionalProperties": false
    },
    "readiness": "implemented",
    "binding": "bound",
    "gap": null,
    "sources": [
      {
        "tool": "example_list",
        "operations": [
          "call"
        ],
        "when": "Successful list.",
        "services": []
      }
    ]
  }
]

Registered events

[
  {
    "group": "cycles",
    "name": "cycle_created",
    "payload": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "cycle_id": {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
        },
        "surface": {
          "type": "string",
          "enum": [
            "web",
            "chat"
          ]
        }
      },
      "required": [
        "cycle_id",
        "surface"
      ],
      "additionalProperties": false
    },
    "description": "Durable cycle creation.",
    "requirement": "docs/feature-specs/F2-cycles.md",
    "producers": [
      {
        "service": "cycles.create",
        "when": "After durable creation; no replay duplicate."
      }
    ],
    "external_producers": [],
    "gaps": []
  },
  {
    "group": "cycles",
    "name": "cycle_archived",
    "payload": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "cycle_id": {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
        },
        "reason": {
          "type": "string",
          "enum": [
            "expired",
            "manual",
            "replaced"
          ]
        }
      },
      "required": [
        "cycle_id",
        "reason"
      ],
      "additionalProperties": false
    },
    "description": "Actual transition to archived; never for a no-op.",
    "requirement": "docs/feature-specs/F2-cycles.md",
    "producers": [
      {
        "service": "cycles.create",
        "when": "When creation replaces an incumbent active cycle; reason replaced."
      },
      {
        "service": "cycles.resolve_active",
        "when": "When lazy expiry actually archives the active cycle; reason expired."
      },
      {
        "service": "cycles.update",
        "when": "When status changes to archived (manual), or activation replaces the incumbent (replaced); never for date/field edits or no-op status."
      }
    ],
    "external_producers": [],
    "gaps": []
  },
  {
    "group": "objectives",
    "name": "objective_created",
    "payload": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "objective_id": {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
        },
        "cycle_id": {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
        },
        "surface": {
          "type": "string",
          "enum": [
            "web",
            "chat"
          ]
        }
      },
      "required": [
        "objective_id",
        "cycle_id",
        "surface"
      ],
      "additionalProperties": false
    },
    "description": "Durable objective creation; no duplicate on original-outcome replay.",
    "requirement": "docs/feature-specs/F3-objectives.md",
    "producers": [
      {
        "service": "objectives.create",
        "when": "After durable creation; no replay duplicate."
      }
    ],
    "external_producers": [],
    "gaps": []
  },
  {
    "group": "results",
    "name": "result_update_recorded",
    "payload": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "result_id": {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
        },
        "metric_type": {
          "type": "string",
          "enum": [
            "number",
            "percentage",
            "milestone",
            "habit",
            "performance"
          ],
          "description": "UI label: Type. Number, Percentage, Milestone, Habit or Performance."
        },
        "surface": {
          "type": "string",
          "enum": [
            "web",
            "chat"
          ]
        }
      },
      "required": [
        "result_id",
        "metric_type",
        "surface"
      ],
      "additionalProperties": false
    },
    "description": "Saved value, reading, milestone flip, habit mark or unmark; not a comment-only update.",
    "requirement": "docs/feature-specs/F4-results.md",
    "producers": [
      {
        "service": "result_logs.create",
        "when": "When numeric/performance evidence or a milestone flip is saved; not comment-only rows."
      },
      {
        "service": "habit_logs.set",
        "when": "When a habit mark/unmark changes recorded progress; not comment-only changes or replay."
      }
    ],
    "external_producers": [],
    "gaps": []
  },
  {
    "group": "actions",
    "name": "action_created",
    "payload": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "action_id": {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
        },
        "cycle_id": {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
        },
        "objective_id": {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
        },
        "due_at": {
          "anyOf": [
            {
              "type": "string",
              "format": "date",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
              "description": "Calendar date as YYYY-MM-DD in the profile timezone."
            },
            {
              "type": "null"
            }
          ]
        },
        "surface": {
          "type": "string",
          "enum": [
            "web",
            "chat"
          ]
        }
      },
      "required": [
        "action_id",
        "cycle_id",
        "due_at",
        "surface"
      ],
      "additionalProperties": false
    },
    "description": "Durable action creation; due_at is null for an unset web draft.",
    "requirement": "docs/feature-specs/F5-actions.md",
    "producers": [
      {
        "service": "actions.create",
        "when": "After durable creation; no replay duplicate."
      }
    ],
    "external_producers": [],
    "gaps": []
  },
  {
    "group": "actions",
    "name": "action_status_changed",
    "payload": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "action_id": {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
        },
        "status": {
          "type": "string",
          "enum": [
            "open",
            "in_progress",
            "done"
          ],
          "description": "Action status: Open, In progress or Done. The To do UI group includes Open and In progress; Overdue is derived, not a status."
        },
        "surface": {
          "type": "string",
          "enum": [
            "web",
            "chat"
          ]
        }
      },
      "required": [
        "action_id",
        "status",
        "surface"
      ],
      "additionalProperties": false
    },
    "description": "Each persisted action log, including a repeated status with a comment.",
    "requirement": "docs/feature-specs/F5-actions.md",
    "producers": [
      {
        "service": "action_logs.create",
        "when": "For each persisted log, including repeat status with comment; not receipt replay."
      }
    ],
    "external_producers": [],
    "gaps": []
  },
  {
    "group": "notes",
    "name": "note_created",
    "payload": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "note_id": {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
        },
        "surface": {
          "type": "string",
          "enum": [
            "web",
            "chat"
          ]
        }
      },
      "required": [
        "note_id",
        "surface"
      ],
      "additionalProperties": false
    },
    "description": "Durable note creation; no duplicate on original-outcome replay.",
    "requirement": "docs/feature-specs/F6-notes.md",
    "producers": [
      {
        "service": "notes.create",
        "when": "After durable creation; not autosave updates or receipt replay."
      }
    ],
    "external_producers": [],
    "gaps": []
  },
  {
    "group": "sessions",
    "name": "session_started",
    "payload": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "session_id": {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
        },
        "vendor": {
          "type": "string",
          "enum": [
            "claude",
            "openai"
          ],
          "description": "Conversation host: claude is shown as Claude; openai is shown as ChatGPT."
        },
        "surface": {
          "type": "string",
          "enum": [
            "web",
            "chat"
          ]
        }
      },
      "required": [
        "session_id",
        "vendor",
        "surface"
      ],
      "additionalProperties": false
    },
    "description": "New persisted session, not reuse of an existing open session.",
    "requirement": "docs/feature-specs/F7-sessions.md",
    "producers": [
      {
        "service": "sessions.start",
        "when": "Only when a new session is persisted; not existing-session reuse."
      }
    ],
    "external_producers": [],
    "gaps": []
  },
  {
    "group": "sessions",
    "name": "session_summary_written",
    "payload": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "session_id": {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
        },
        "type": {
          "type": "string",
          "enum": [
            "goal_setup",
            "check_in",
            "review",
            "open_coaching"
          ],
          "description": "Coaching session type: Goal setup, Check-in, Review or Open coaching. Separate from whether the session is still open."
        }
      },
      "required": [
        "session_id",
        "type"
      ],
      "additionalProperties": false
    },
    "description": "First successful close with a summary, not replay or forced stale-session close.",
    "requirement": "docs/feature-specs/F7-sessions.md",
    "producers": [
      {
        "service": "sessions.close",
        "when": "On the first successful close with summary; not replay or forced stale close."
      }
    ],
    "external_producers": [],
    "gaps": []
  },
  {
    "group": "sessions",
    "name": "chat_tool_used",
    "payload": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "tool_name": {
          "type": "string",
          "minLength": 1
        },
        "success": {
          "type": "boolean"
        }
      },
      "required": [
        "tool_name",
        "success"
      ],
      "additionalProperties": false
    },
    "description": "MCP tool call outcome; no stored coaching content.",
    "requirement": "docs/feature-specs/F7-sessions.md",
    "producers": [],
    "external_producers": [
      {
        "kind": "mcp-boundary",
        "source": "packages/core/src/shared/mcp/index.ts",
        "when": "For a tool call with an authenticated actor; both success and failure outcomes."
      }
    ],
    "gaps": [
      "Specify treatment of calls without authenticated identity; tenant event storage requires an actor."
    ]
  },
  {
    "group": "identity_billing",
    "name": "account_created",
    "payload": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "user_id": {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
        }
      },
      "required": [
        "user_id"
      ],
      "additionalProperties": false
    },
    "description": "Durable account creation; user_id matches the canonical user UUID.",
    "requirement": "docs/feature-specs/F1-identity.md",
    "producers": [],
    "external_producers": [
      {
        "kind": "auth-hook",
        "source": "packages/core/src/shared/auth/server.ts",
        "when": "After a newly persisted account."
      }
    ],
    "gaps": []
  },
  {
    "group": "identity_billing",
    "name": "subscription_started",
    "payload": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "plan": {
          "type": "string",
          "minLength": 1,
          "description": "UI label: Plan. Provider-backed name of the selected plan."
        },
        "price": {
          "type": "integer",
          "minimum": 0,
          "maximum": 9007199254740991,
          "description": "Configured POC monthly price in GBP minor units; 500 means £5."
        }
      },
      "required": [
        "plan",
        "price"
      ],
      "additionalProperties": false
    },
    "description": "First transition to active paid access.",
    "requirement": "docs/feature-specs/F1-identity.md",
    "producers": [],
    "external_producers": [
      {
        "kind": "billing-webhook",
        "source": "packages/core/src/features/identity-billing/handler.ts",
        "when": "On the first verified transition to active; not checkout URL creation."
      }
    ],
    "gaps": []
  },
  {
    "group": "identity_billing",
    "name": "subscription_cancelled",
    "payload": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "tenure_days": {
          "type": "integer",
          "minimum": 0,
          "maximum": 9007199254740991
        },
        "reason_code": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ]
        },
        "reason_text": {
          "type": "string"
        }
      },
      "required": [
        "tenure_days",
        "reason_code"
      ],
      "additionalProperties": false
    },
    "description": "Once per scheduled or immediate cancellation; no duplicate webhook delivery.",
    "requirement": "docs/feature-specs/F1-identity.md",
    "producers": [],
    "external_producers": [
      {
        "kind": "billing-webhook",
        "source": "packages/core/src/features/identity-billing/handler.ts",
        "when": "On a newly applied scheduled or immediate cancellation, not a duplicate delivery."
      }
    ],
    "gaps": []
  },
  {
    "group": "identity_billing",
    "name": "connector_authorised",
    "payload": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {},
      "additionalProperties": false
    },
    "description": "New durable connector consent; not a replay.",
    "requirement": "docs/feature-specs/F1-identity.md",
    "producers": [],
    "external_producers": [
      {
        "kind": "auth-hook",
        "source": "packages/core/src/shared/auth/server.ts",
        "when": "After new connector consent is persisted."
      }
    ],
    "gaps": []
  },
  {
    "group": "identity_billing",
    "name": "onboarding_step_completed",
    "payload": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "step": {
          "anyOf": [
            {
              "type": "number",
              "const": 1
            },
            {
              "type": "number",
              "const": 2
            },
            {
              "type": "number",
              "const": 3
            }
          ]
        }
      },
      "required": [
        "step"
      ],
      "additionalProperties": false
    },
    "description": "Verified onboarding step completion; never inferred from a redirect alone.",
    "requirement": "docs/feature-specs/F1-identity.md",
    "producers": [],
    "external_producers": [
      {
        "kind": "page",
        "source": "packages/core/src/features/identity-billing/onboarding.page.tsx",
        "when": "After verified step completion; no new public event API is authorized."
      }
    ],
    "gaps": [
      "Specify trusted server recording and repeat-visit deduplication; the page alone is not an authorized event writer."
    ]
  },
  {
    "group": "identity_billing",
    "name": "profile_updated",
    "payload": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "fields": {
          "minItems": 1,
          "type": "array",
          "items": {
            "type": "string",
            "enum": [
              "name",
              "about_me",
              "timezone"
            ]
          }
        }
      },
      "required": [
        "fields"
      ],
      "additionalProperties": false
    },
    "description": "Changed profile field names only; never profile content.",
    "requirement": "docs/feature-specs/F1-identity.md",
    "producers": [
      {
        "service": "user.update",
        "when": "When at least one editable profile field changes; payload lists changed names only."
      }
    ],
    "external_producers": [],
    "gaps": []
  },
  {
    "group": "identity_billing",
    "name": "account_deleted",
    "payload": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {},
      "additionalProperties": false
    },
    "description": "Successful account deletion; record in the deletion transaction before removing the user so the existing ON DELETE SET NULL preserves the event.",
    "requirement": "docs/feature-specs/F1-identity.md",
    "producers": [
      {
        "service": "user.delete",
        "when": "In the successful deletion transaction, before user removal; ON DELETE SET NULL retains the event. Never on failed provider cancellation or replay."
      }
    ],
    "external_producers": [],
    "gaps": []
  },
  {
    "group": "example",
    "name": "example_created",
    "payload": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "exampleId": {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
        }
      },
      "required": [
        "exampleId"
      ],
      "additionalProperties": false
    },
    "description": "Retained scaffold: one event per fresh example write in the same transaction.",
    "requirement": "packages/core/src/features/example/docs.md",
    "producers": [],
    "external_producers": [],
    "gaps": []
  }
]
Recorded implementation obligations (12)

Service definitions

cycles.create · write · contract-only

Feature declaration: createCycle

Requirement: docs/feature-specs/F2-cycles.md · Access: entitled-write

Tables: cycles (write), objectives (read), idempotency_keys (write)

Trusted context: authenticated actor

Retry: Actor/operation/key-scoped original-outcome replay, including post-commit response failures.

Expected errors: UNAUTHORIZED, BAD_REQUEST, FORBIDDEN, NOT_FOUND, CONFLICT, NOT_IMPLEMENTED, INTERNAL_SERVER_ERROR

API consumers

[
  {
    "operation": "cycles.create",
    "service": "cycles.create",
    "binding": "bound"
  }
]

MCP consumers

[
  {
    "tool": "cycle_lifecycle",
    "collection": "cycles",
    "specification": "docs/feature-specs/F2-cycles.md#mcp-contract",
    "operation": "create",
    "binding": "bound",
    "mode": "adapted",
    "readiness": "contract-only",
    "services": [
      "cycles.create"
    ],
    "gap": null,
    "projection": "Dispatch lifecycle operations explicitly; read returns the cycle only; writes project record.cycle and changed; readers preserve continuations."
  }
]

Service input

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "start_at": {
      "type": "string",
      "format": "date",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      "description": "UI label: Starts. Calendar date, YYYY-MM-DD. Required on create; omit on update to preserve."
    },
    "end_at": {
      "type": "string",
      "format": "date",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      "description": "UI label: Ends. Calendar date, YYYY-MM-DD; must be after the resulting start date."
    },
    "intention": {
      "description": "Personal focus. Omit to preserve on update; null clears it.",
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ]
    },
    "idempotency_key": {
      "type": "string",
      "minLength": 1,
      "maxLength": 255,
      "description": "Unique key per logical create. Reuse the same key AND fields on every retry, including uncertain outcomes. A new create needs a new key."
    }
  },
  "required": [
    "start_at",
    "end_at",
    "idempotency_key"
  ],
  "additionalProperties": false
}

Service output

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "record": {
      "type": "object",
      "properties": {
        "cycle": {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "intention": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "UI label: Intention. Optional guiding focus; the cycle is identified by its date range, not a name."
            },
            "start_at": {
              "type": "string",
              "format": "date",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
              "description": "UI label: Starts."
            },
            "end_at": {
              "type": "string",
              "format": "date",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
              "description": "UI label: Ends."
            },
            "status": {
              "type": "string",
              "enum": [
                "active",
                "archived"
              ]
            },
            "created_at": {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
            },
            "url": {
              "type": "string",
              "format": "uri"
            },
            "achievement_pct": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "null"
                }
              ],
              "description": "UI label: Achievement. Derived from objective progress; unavailable when nothing is measurable."
            },
            "time_gone_pct": {
              "type": "number",
              "minimum": 0,
              "maximum": 100,
              "description": "UI label: Time gone. Derived percentage of the cycle elapsed."
            },
            "length_weeks": {
              "type": "integer",
              "minimum": -9007199254740991,
              "maximum": 9007199254740991,
              "description": "UI label: Length, in weeks; derived from Starts and Ends."
            }
          },
          "required": [
            "id",
            "intention",
            "start_at",
            "end_at",
            "status",
            "created_at",
            "url",
            "achievement_pct",
            "time_gone_pct",
            "length_weeks"
          ],
          "additionalProperties": false
        },
        "objectives": {
          "type": "object",
          "properties": {
            "items": {
              "maxItems": 50,
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "cycle_id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "title": {
                    "type": "string"
                  },
                  "description": {
                    "type": "string"
                  },
                  "deadline_at": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                        "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "UI label: Deadline; null when no deadline has been set."
                  },
                  "status": {
                    "type": "string",
                    "enum": [
                      "on_track",
                      "off_track",
                      "completed"
                    ],
                    "description": "Objective status: On track, Off track or Completed. Coaching judgment, independent of the derived Progress percentage."
                  },
                  "created_at": {
                    "type": "string",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                  },
                  "short_code": {
                    "type": "string",
                    "minLength": 1
                  },
                  "url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "progress_pct": {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "UI label: Progress. Derived from measurable results, independently of Status."
                  },
                  "boundary_progress_pct": {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "Historical progress at the resolved last-session boundary; not current Progress."
                  },
                  "movement_pp": {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                },
                "required": [
                  "id",
                  "cycle_id",
                  "title",
                  "description",
                  "deadline_at",
                  "status",
                  "created_at",
                  "short_code",
                  "url",
                  "progress_pct",
                  "boundary_progress_pct",
                  "movement_pp"
                ],
                "additionalProperties": false
              }
            },
            "next_cursor": {
              "anyOf": [
                {
                  "type": "string",
                  "minLength": 1
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "items",
            "next_cursor"
          ],
          "additionalProperties": false
        },
        "continuations": {
          "type": "object",
          "propertyNames": {
            "type": "string",
            "enum": [
              "cycles",
              "objectives",
              "results",
              "actions",
              "notes",
              "sessions",
              "result_logs",
              "habit_logs",
              "action_logs",
              "trend"
            ]
          },
          "additionalProperties": {
            "type": "string",
            "minLength": 1
          }
        }
      },
      "required": [
        "cycle",
        "objectives",
        "continuations"
      ],
      "additionalProperties": false
    },
    "changed": {
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "entity": {
            "type": "string",
            "enum": [
              "user",
              "cycle",
              "objective",
              "result",
              "result_log",
              "action",
              "action_log",
              "session",
              "note",
              "habit_log"
            ]
          },
          "id": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
            "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
          }
        },
        "required": [
          "entity",
          "id"
        ],
        "additionalProperties": false
      }
    },
    "continuations": {
      "type": "object",
      "propertyNames": {
        "type": "string",
        "enum": [
          "cycles",
          "objectives",
          "results",
          "actions",
          "notes",
          "sessions",
          "result_logs",
          "habit_logs",
          "action_logs",
          "trend"
        ]
      },
      "additionalProperties": {
        "type": "string",
        "minLength": 1
      }
    }
  },
  "required": [
    "record",
    "changed",
    "continuations"
  ],
  "additionalProperties": false
}
Public MCP input/output shapes for comparison
[
  {
    "tool": "cycle_lifecycle",
    "collection": "cycles",
    "specification": "docs/feature-specs/F2-cycles.md#mcp-contract",
    "operation": "create",
    "binding": "bound",
    "mode": "adapted",
    "readiness": "contract-only",
    "services": [
      "cycles.create"
    ],
    "gap": null,
    "projection": "Dispatch lifecycle operations explicitly; read returns the cycle only; writes project record.cycle and changed; readers preserve continuations.",
    "input": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "oneOf": [
        {
          "type": "object",
          "properties": {
            "start_at": {
              "type": "string",
              "format": "date",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
              "description": "UI label: Starts. Calendar date, YYYY-MM-DD. Required on create; omit on update to preserve."
            },
            "end_at": {
              "type": "string",
              "format": "date",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
              "description": "UI label: Ends. Calendar date, YYYY-MM-DD; must be after the resulting start date."
            },
            "intention": {
              "description": "Personal focus. Omit to preserve on update; null clears it.",
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ]
            },
            "idempotency_key": {
              "type": "string",
              "minLength": 1,
              "maxLength": 255,
              "description": "Unique key per logical create. Reuse the same key AND fields on every retry, including uncertain outcomes. A new create needs a new key."
            },
            "operation": {
              "type": "string",
              "const": "create"
            }
          },
          "required": [
            "start_at",
            "end_at",
            "idempotency_key",
            "operation"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "operation": {
              "type": "string",
              "const": "archive"
            }
          },
          "required": [
            "id",
            "operation"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "operation": {
              "type": "string",
              "const": "activate"
            }
          },
          "required": [
            "id",
            "operation"
          ],
          "additionalProperties": false
        }
      ]
    },
    "output": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "cycle": {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "intention": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "UI label: Intention. Optional guiding focus; the cycle is identified by its date range, not a name."
            },
            "start_at": {
              "type": "string",
              "format": "date",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
              "description": "UI label: Starts."
            },
            "end_at": {
              "type": "string",
              "format": "date",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
              "description": "UI label: Ends."
            },
            "status": {
              "type": "string",
              "enum": [
                "active",
                "archived"
              ]
            },
            "created_at": {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
            },
            "url": {
              "type": "string",
              "format": "uri"
            },
            "achievement_pct": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "null"
                }
              ],
              "description": "UI label: Achievement. Derived from objective progress; unavailable when nothing is measurable."
            },
            "time_gone_pct": {
              "type": "number",
              "minimum": 0,
              "maximum": 100,
              "description": "UI label: Time gone. Derived percentage of the cycle elapsed."
            },
            "length_weeks": {
              "type": "integer",
              "minimum": -9007199254740991,
              "maximum": 9007199254740991,
              "description": "UI label: Length, in weeks; derived from Starts and Ends."
            }
          },
          "required": [
            "id",
            "intention",
            "start_at",
            "end_at",
            "status",
            "created_at",
            "url",
            "achievement_pct",
            "time_gone_pct",
            "length_weeks"
          ],
          "additionalProperties": false
        },
        "changed": {
          "maxItems": 100,
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "entity": {
                "type": "string",
                "enum": [
                  "user",
                  "cycle",
                  "objective",
                  "result",
                  "result_log",
                  "action",
                  "action_log",
                  "session",
                  "note",
                  "habit_log"
                ]
              },
              "id": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
              }
            },
            "required": [
              "entity",
              "id"
            ],
            "additionalProperties": false
          }
        }
      },
      "required": [
        "cycle",
        "changed"
      ],
      "additionalProperties": false
    }
  }
]
cycles.resolve_active · write · contract-only

Feature declaration: getActiveCycle

Requirement: docs/feature-specs/F2-cycles.md · Access: retained-read

Tables: cycles (write)

Trusted context: authenticated actor

Retry: Inspect state after uncertain outcomes; never infer rollback from a response failure.

Expected errors: UNAUTHORIZED, BAD_REQUEST, FORBIDDEN, NOT_FOUND, CONFLICT, NOT_IMPLEMENTED, INTERNAL_SERVER_ERROR

API consumers

[
  {
    "operation": "cycles.resolve_active",
    "service": "cycles.resolve_active",
    "binding": "bound"
  }
]

MCP consumers

[]

Service input

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {},
  "additionalProperties": false
}

Service output

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "anyOf": [
    {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
        },
        "intention": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "description": "UI label: Intention. Optional guiding focus; the cycle is identified by its date range, not a name."
        },
        "start_at": {
          "type": "string",
          "format": "date",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
          "description": "UI label: Starts."
        },
        "end_at": {
          "type": "string",
          "format": "date",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
          "description": "UI label: Ends."
        },
        "status": {
          "type": "string",
          "enum": [
            "active",
            "archived"
          ]
        },
        "created_at": {
          "type": "string",
          "format": "date-time",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
        },
        "url": {
          "type": "string",
          "format": "uri"
        },
        "achievement_pct": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "description": "UI label: Achievement. Derived from objective progress; unavailable when nothing is measurable."
        },
        "time_gone_pct": {
          "type": "number",
          "minimum": 0,
          "maximum": 100,
          "description": "UI label: Time gone. Derived percentage of the cycle elapsed."
        },
        "length_weeks": {
          "type": "integer",
          "minimum": -9007199254740991,
          "maximum": 9007199254740991,
          "description": "UI label: Length, in weeks; derived from Starts and Ends."
        }
      },
      "required": [
        "id",
        "intention",
        "start_at",
        "end_at",
        "status",
        "created_at",
        "url",
        "achievement_pct",
        "time_gone_pct",
        "length_weeks"
      ],
      "additionalProperties": false
    },
    {
      "type": "null"
    }
  ]
}
Public MCP input/output shapes for comparison
[]
cycles.get_stored_active · read · contract-only

Feature declaration: getStoredActiveCycle

Requirement: docs/feature-specs/F2-cycles.md · Access: retained-read

Tables: cycles (read)

Trusted context: authenticated actor

Retry: Safe to retry with the same resolved filters and cursor.

Expected errors: UNAUTHORIZED, BAD_REQUEST, FORBIDDEN, NOT_FOUND, CONFLICT, NOT_IMPLEMENTED, INTERNAL_SERVER_ERROR

API consumers

[]

MCP consumers

[
  {
    "tool": "cycle_read",
    "collection": "cycles",
    "specification": "docs/feature-specs/F2-cycles.md#entity-specific-cycle-query",
    "operation": "get",
    "binding": "bound",
    "mode": "adapted",
    "readiness": "contract-only",
    "services": [
      "cycles.get",
      "cycles.get_stored_active"
    ],
    "gap": null,
    "projection": "Dispatch lifecycle operations explicitly; read returns the cycle only; writes project record.cycle and changed; readers preserve continuations."
  }
]

Service input

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {},
  "additionalProperties": false
}

Service output

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "anyOf": [
    {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
        },
        "intention": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "description": "UI label: Intention. Optional guiding focus; the cycle is identified by its date range, not a name."
        },
        "start_at": {
          "type": "string",
          "format": "date",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
          "description": "UI label: Starts."
        },
        "end_at": {
          "type": "string",
          "format": "date",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
          "description": "UI label: Ends."
        },
        "status": {
          "type": "string",
          "enum": [
            "active",
            "archived"
          ]
        },
        "created_at": {
          "type": "string",
          "format": "date-time",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
        },
        "url": {
          "type": "string",
          "format": "uri"
        },
        "achievement_pct": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "description": "UI label: Achievement. Derived from objective progress; unavailable when nothing is measurable."
        },
        "time_gone_pct": {
          "type": "number",
          "minimum": 0,
          "maximum": 100,
          "description": "UI label: Time gone. Derived percentage of the cycle elapsed."
        },
        "length_weeks": {
          "type": "integer",
          "minimum": -9007199254740991,
          "maximum": 9007199254740991,
          "description": "UI label: Length, in weeks; derived from Starts and Ends."
        }
      },
      "required": [
        "id",
        "intention",
        "start_at",
        "end_at",
        "status",
        "created_at",
        "url",
        "achievement_pct",
        "time_gone_pct",
        "length_weeks"
      ],
      "additionalProperties": false
    },
    {
      "type": "null"
    }
  ]
}
Public MCP input/output shapes for comparison
[
  {
    "tool": "cycle_read",
    "collection": "cycles",
    "specification": "docs/feature-specs/F2-cycles.md#entity-specific-cycle-query",
    "operation": "get",
    "binding": "bound",
    "mode": "adapted",
    "readiness": "contract-only",
    "services": [
      "cycles.get",
      "cycles.get_stored_active"
    ],
    "gap": null,
    "projection": "Dispatch lifecycle operations explicitly; read returns the cycle only; writes project record.cycle and changed; readers preserve continuations.",
    "input": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "oneOf": [
        {
          "type": "object",
          "properties": {
            "cursor": {
              "type": "string",
              "minLength": 1
            },
            "limit": {
              "default": 20,
              "type": "integer",
              "minimum": 1,
              "maximum": 100
            },
            "operation": {
              "type": "string",
              "const": "list",
              "description": "Find cycles; reuse fresh results directly for updates."
            }
          },
          "required": [
            "operation"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "operation": {
              "type": "string",
              "const": "get"
            },
            "id": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                {
                  "type": "string",
                  "const": "active"
                }
              ],
              "description": "Owned cycle UUID from fresh context, or active for the stored active cycle at execution. No date-based expiry or fallback. Use the UUID for a specifically selected cycle."
            }
          },
          "required": [
            "operation",
            "id"
          ],
          "additionalProperties": false
        }
      ]
    },
    "output": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "items": {
              "maxItems": 100,
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "intention": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "UI label: Intention. Optional guiding focus; the cycle is identified by its date range, not a name."
                  },
                  "start_at": {
                    "type": "string",
                    "format": "date",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                    "description": "UI label: Starts."
                  },
                  "end_at": {
                    "type": "string",
                    "format": "date",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                    "description": "UI label: Ends."
                  },
                  "status": {
                    "type": "string",
                    "enum": [
                      "active",
                      "archived"
                    ]
                  },
                  "created_at": {
                    "type": "string",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                  },
                  "url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "achievement_pct": {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "UI label: Achievement. Derived from objective progress; unavailable when nothing is measurable."
                  },
                  "time_gone_pct": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 100,
                    "description": "UI label: Time gone. Derived percentage of the cycle elapsed."
                  },
                  "length_weeks": {
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991,
                    "description": "UI label: Length, in weeks; derived from Starts and Ends."
                  }
                },
                "required": [
                  "id",
                  "intention",
                  "start_at",
                  "end_at",
                  "status",
                  "created_at",
                  "url",
                  "achievement_pct",
                  "time_gone_pct",
                  "length_weeks"
                ],
                "additionalProperties": false
              }
            },
            "next_cursor": {
              "anyOf": [
                {
                  "type": "string",
                  "minLength": 1
                },
                {
                  "type": "null"
                }
              ]
            },
            "continuation": {
              "anyOf": [
                {
                  "type": "object",
                  "properties": {
                    "tool": {
                      "type": "string",
                      "const": "cycle_read"
                    },
                    "arguments": {
                      "type": "object",
                      "properties": {
                        "operation": {
                          "type": "string",
                          "const": "list"
                        },
                        "cursor": {
                          "type": "string",
                          "minLength": 1
                        },
                        "limit": {
                          "type": "integer",
                          "minimum": 1,
                          "maximum": 100
                        }
                      },
                      "required": [
                        "operation",
                        "cursor",
                        "limit"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "required": [
                    "tool",
                    "arguments"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "items",
            "next_cursor",
            "continuation"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "cycle": {
              "anyOf": [
                {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    "intention": {
                      "anyOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "null"
                        }
                      ],
                      "description": "UI label: Intention. Optional guiding focus; the cycle is identified by its date range, not a name."
                    },
                    "start_at": {
                      "type": "string",
                      "format": "date",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                      "description": "UI label: Starts."
                    },
                    "end_at": {
                      "type": "string",
                      "format": "date",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                      "description": "UI label: Ends."
                    },
                    "status": {
                      "type": "string",
                      "enum": [
                        "active",
                        "archived"
                      ]
                    },
                    "created_at": {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    "url": {
                      "type": "string",
                      "format": "uri"
                    },
                    "achievement_pct": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ],
                      "description": "UI label: Achievement. Derived from objective progress; unavailable when nothing is measurable."
                    },
                    "time_gone_pct": {
                      "type": "number",
                      "minimum": 0,
                      "maximum": 100,
                      "description": "UI label: Time gone. Derived percentage of the cycle elapsed."
                    },
                    "length_weeks": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991,
                      "description": "UI label: Length, in weeks; derived from Starts and Ends."
                    }
                  },
                  "required": [
                    "id",
                    "intention",
                    "start_at",
                    "end_at",
                    "status",
                    "created_at",
                    "url",
                    "achievement_pct",
                    "time_gone_pct",
                    "length_weeks"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "cycle"
          ],
          "additionalProperties": false
        }
      ]
    }
  }
]
cycles.preview_deletion · write · contract-only

Feature declaration: previewCycleDeletion

Requirement: docs/feature-specs/F2-cycles.md · Access: entitled-write

Tables: cycles (read), objectives (read), results (read), result_logs (read), habit_logs (read), actions (read), action_logs (read)

Trusted context: authenticated actor

Retry: Inspect state after uncertain outcomes; never infer rollback from a response failure.

Expected errors: UNAUTHORIZED, BAD_REQUEST, FORBIDDEN, NOT_FOUND, CONFLICT, NOT_IMPLEMENTED, INTERNAL_SERVER_ERROR

API consumers

[
  {
    "operation": "cycles.preview_deletion",
    "service": "cycles.preview_deletion",
    "binding": "bound"
  }
]

MCP consumers

[
  {
    "tool": "cycle_delete",
    "collection": "cycles",
    "specification": "docs/feature-specs/F2-cycles.md#mcp-contract",
    "operation": "preview",
    "binding": "bound",
    "mode": "adapted",
    "readiness": "contract-only",
    "services": [
      "cycles.preview_deletion"
    ],
    "gap": null,
    "projection": "Dispatch lifecycle operations explicitly; read returns the cycle only; writes project record.cycle and changed; readers preserve continuations."
  }
]

Service input

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}

Service output

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "operation": {
      "type": "string",
      "const": "preview"
    },
    "preview_id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
    },
    "expires_at": {
      "type": "string",
      "format": "date-time",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
    },
    "cycle": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
        },
        "start_at": {
          "type": "string",
          "format": "date",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
          "description": "UI label: Starts."
        },
        "end_at": {
          "type": "string",
          "format": "date",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
          "description": "UI label: Ends."
        },
        "status": {
          "type": "string",
          "enum": [
            "active",
            "archived"
          ]
        }
      },
      "required": [
        "id",
        "start_at",
        "end_at",
        "status"
      ],
      "additionalProperties": false
    },
    "deleted": {
      "type": "object",
      "properties": {
        "cycles": {
          "type": "number",
          "const": 1
        },
        "objectives": {
          "type": "integer",
          "minimum": 0,
          "maximum": 9007199254740991
        },
        "results": {
          "type": "integer",
          "minimum": 0,
          "maximum": 9007199254740991
        },
        "result_logs": {
          "type": "integer",
          "minimum": 0,
          "maximum": 9007199254740991
        },
        "habit_logs": {
          "type": "integer",
          "minimum": 0,
          "maximum": 9007199254740991
        },
        "actions": {
          "type": "integer",
          "minimum": 0,
          "maximum": 9007199254740991
        },
        "action_logs": {
          "type": "integer",
          "minimum": 0,
          "maximum": 9007199254740991
        }
      },
      "required": [
        "cycles",
        "objectives",
        "results",
        "result_logs",
        "habit_logs",
        "actions",
        "action_logs"
      ],
      "additionalProperties": false
    },
    "retained": {
      "type": "array",
      "prefixItems": [
        {
          "type": "string",
          "const": "notes"
        },
        {
          "type": "string",
          "const": "sessions"
        }
      ]
    },
    "active_remaining": {
      "type": "boolean"
    },
    "approval": {
      "type": "object",
      "properties": {
        "status": {
          "type": "string",
          "const": "required"
        },
        "url": {
          "type": "string",
          "format": "uri"
        }
      },
      "required": [
        "status",
        "url"
      ],
      "additionalProperties": false
    }
  },
  "required": [
    "operation",
    "preview_id",
    "expires_at",
    "cycle",
    "deleted",
    "retained",
    "active_remaining",
    "approval"
  ],
  "additionalProperties": false
}
Public MCP input/output shapes for comparison
[
  {
    "tool": "cycle_delete",
    "collection": "cycles",
    "specification": "docs/feature-specs/F2-cycles.md#mcp-contract",
    "operation": "preview",
    "binding": "bound",
    "mode": "adapted",
    "readiness": "contract-only",
    "services": [
      "cycles.preview_deletion"
    ],
    "gap": null,
    "projection": "Dispatch lifecycle operations explicitly; read returns the cycle only; writes project record.cycle and changed; readers preserve continuations.",
    "input": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "oneOf": [
        {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "operation": {
              "type": "string",
              "const": "preview"
            }
          },
          "required": [
            "id",
            "operation"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "preview_id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Server-issued impact preview ID. This is not approval: the service checks genuine user approval recorded by the trusted host/application."
            },
            "operation": {
              "type": "string",
              "const": "commit"
            }
          },
          "required": [
            "id",
            "preview_id",
            "operation"
          ],
          "additionalProperties": false
        }
      ]
    },
    "output": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "operation": {
              "type": "string",
              "const": "preview"
            },
            "preview_id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "expires_at": {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
            },
            "cycle": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "start_at": {
                  "type": "string",
                  "format": "date",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                  "description": "UI label: Starts."
                },
                "end_at": {
                  "type": "string",
                  "format": "date",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                  "description": "UI label: Ends."
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "active",
                    "archived"
                  ]
                }
              },
              "required": [
                "id",
                "start_at",
                "end_at",
                "status"
              ],
              "additionalProperties": false
            },
            "deleted": {
              "type": "object",
              "properties": {
                "cycles": {
                  "type": "number",
                  "const": 1
                },
                "objectives": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "results": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "result_logs": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "habit_logs": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "actions": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "action_logs": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                }
              },
              "required": [
                "cycles",
                "objectives",
                "results",
                "result_logs",
                "habit_logs",
                "actions",
                "action_logs"
              ],
              "additionalProperties": false
            },
            "retained": {
              "type": "array",
              "prefixItems": [
                {
                  "type": "string",
                  "const": "notes"
                },
                {
                  "type": "string",
                  "const": "sessions"
                }
              ]
            },
            "active_remaining": {
              "type": "boolean"
            },
            "approval": {
              "type": "object",
              "properties": {
                "status": {
                  "type": "string",
                  "const": "required"
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                }
              },
              "required": [
                "status",
                "url"
              ],
              "additionalProperties": false
            }
          },
          "required": [
            "operation",
            "preview_id",
            "expires_at",
            "cycle",
            "deleted",
            "retained",
            "active_remaining",
            "approval"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "active_remaining": {
              "type": "boolean"
            },
            "operation": {
              "type": "string",
              "const": "commit"
            }
          },
          "required": [
            "id",
            "active_remaining",
            "operation"
          ],
          "additionalProperties": false
        }
      ]
    }
  }
]
cycles.get · read · contract-only

Feature declaration: getCycle

Requirement: docs/feature-specs/F2-cycles.md · Access: retained-read

Tables: cycles (read), objectives (read)

Trusted context: authenticated actor

Retry: Safe to retry with the same resolved filters and cursor.

Expected errors: UNAUTHORIZED, BAD_REQUEST, FORBIDDEN, NOT_FOUND, CONFLICT, NOT_IMPLEMENTED, INTERNAL_SERVER_ERROR

API consumers

[
  {
    "operation": "cycles.get",
    "service": "cycles.get",
    "binding": "bound"
  }
]

MCP consumers

[
  {
    "tool": "cycle_read",
    "collection": "cycles",
    "specification": "docs/feature-specs/F2-cycles.md#entity-specific-cycle-query",
    "operation": "get",
    "binding": "bound",
    "mode": "adapted",
    "readiness": "contract-only",
    "services": [
      "cycles.get",
      "cycles.get_stored_active"
    ],
    "gap": null,
    "projection": "Dispatch lifecycle operations explicitly; read returns the cycle only; writes project record.cycle and changed; readers preserve continuations."
  }
]

Service input

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}

Service output

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "cycle": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
        },
        "intention": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "description": "UI label: Intention. Optional guiding focus; the cycle is identified by its date range, not a name."
        },
        "start_at": {
          "type": "string",
          "format": "date",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
          "description": "UI label: Starts."
        },
        "end_at": {
          "type": "string",
          "format": "date",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
          "description": "UI label: Ends."
        },
        "status": {
          "type": "string",
          "enum": [
            "active",
            "archived"
          ]
        },
        "created_at": {
          "type": "string",
          "format": "date-time",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
        },
        "url": {
          "type": "string",
          "format": "uri"
        },
        "achievement_pct": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "description": "UI label: Achievement. Derived from objective progress; unavailable when nothing is measurable."
        },
        "time_gone_pct": {
          "type": "number",
          "minimum": 0,
          "maximum": 100,
          "description": "UI label: Time gone. Derived percentage of the cycle elapsed."
        },
        "length_weeks": {
          "type": "integer",
          "minimum": -9007199254740991,
          "maximum": 9007199254740991,
          "description": "UI label: Length, in weeks; derived from Starts and Ends."
        }
      },
      "required": [
        "id",
        "intention",
        "start_at",
        "end_at",
        "status",
        "created_at",
        "url",
        "achievement_pct",
        "time_gone_pct",
        "length_weeks"
      ],
      "additionalProperties": false
    },
    "objectives": {
      "type": "object",
      "properties": {
        "items": {
          "maxItems": 50,
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
              },
              "cycle_id": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
              },
              "title": {
                "type": "string"
              },
              "description": {
                "type": "string"
              },
              "deadline_at": {
                "anyOf": [
                  {
                    "type": "string",
                    "format": "date",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                    "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "UI label: Deadline; null when no deadline has been set."
              },
              "status": {
                "type": "string",
                "enum": [
                  "on_track",
                  "off_track",
                  "completed"
                ],
                "description": "Objective status: On track, Off track or Completed. Coaching judgment, independent of the derived Progress percentage."
              },
              "created_at": {
                "type": "string",
                "format": "date-time",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
              },
              "short_code": {
                "type": "string",
                "minLength": 1
              },
              "url": {
                "type": "string",
                "format": "uri"
              },
              "progress_pct": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "UI label: Progress. Derived from measurable results, independently of Status."
              },
              "boundary_progress_pct": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Historical progress at the resolved last-session boundary; not current Progress."
              },
              "movement_pp": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "required": [
              "id",
              "cycle_id",
              "title",
              "description",
              "deadline_at",
              "status",
              "created_at",
              "short_code",
              "url",
              "progress_pct",
              "boundary_progress_pct",
              "movement_pp"
            ],
            "additionalProperties": false
          }
        },
        "next_cursor": {
          "anyOf": [
            {
              "type": "string",
              "minLength": 1
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "required": [
        "items",
        "next_cursor"
      ],
      "additionalProperties": false
    },
    "continuations": {
      "type": "object",
      "propertyNames": {
        "type": "string",
        "enum": [
          "cycles",
          "objectives",
          "results",
          "actions",
          "notes",
          "sessions",
          "result_logs",
          "habit_logs",
          "action_logs",
          "trend"
        ]
      },
      "additionalProperties": {
        "type": "string",
        "minLength": 1
      }
    }
  },
  "required": [
    "cycle",
    "objectives",
    "continuations"
  ],
  "additionalProperties": false
}
Public MCP input/output shapes for comparison
[
  {
    "tool": "cycle_read",
    "collection": "cycles",
    "specification": "docs/feature-specs/F2-cycles.md#entity-specific-cycle-query",
    "operation": "get",
    "binding": "bound",
    "mode": "adapted",
    "readiness": "contract-only",
    "services": [
      "cycles.get",
      "cycles.get_stored_active"
    ],
    "gap": null,
    "projection": "Dispatch lifecycle operations explicitly; read returns the cycle only; writes project record.cycle and changed; readers preserve continuations.",
    "input": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "oneOf": [
        {
          "type": "object",
          "properties": {
            "cursor": {
              "type": "string",
              "minLength": 1
            },
            "limit": {
              "default": 20,
              "type": "integer",
              "minimum": 1,
              "maximum": 100
            },
            "operation": {
              "type": "string",
              "const": "list",
              "description": "Find cycles; reuse fresh results directly for updates."
            }
          },
          "required": [
            "operation"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "operation": {
              "type": "string",
              "const": "get"
            },
            "id": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                {
                  "type": "string",
                  "const": "active"
                }
              ],
              "description": "Owned cycle UUID from fresh context, or active for the stored active cycle at execution. No date-based expiry or fallback. Use the UUID for a specifically selected cycle."
            }
          },
          "required": [
            "operation",
            "id"
          ],
          "additionalProperties": false
        }
      ]
    },
    "output": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "items": {
              "maxItems": 100,
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "intention": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "UI label: Intention. Optional guiding focus; the cycle is identified by its date range, not a name."
                  },
                  "start_at": {
                    "type": "string",
                    "format": "date",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                    "description": "UI label: Starts."
                  },
                  "end_at": {
                    "type": "string",
                    "format": "date",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                    "description": "UI label: Ends."
                  },
                  "status": {
                    "type": "string",
                    "enum": [
                      "active",
                      "archived"
                    ]
                  },
                  "created_at": {
                    "type": "string",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                  },
                  "url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "achievement_pct": {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "UI label: Achievement. Derived from objective progress; unavailable when nothing is measurable."
                  },
                  "time_gone_pct": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 100,
                    "description": "UI label: Time gone. Derived percentage of the cycle elapsed."
                  },
                  "length_weeks": {
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991,
                    "description": "UI label: Length, in weeks; derived from Starts and Ends."
                  }
                },
                "required": [
                  "id",
                  "intention",
                  "start_at",
                  "end_at",
                  "status",
                  "created_at",
                  "url",
                  "achievement_pct",
                  "time_gone_pct",
                  "length_weeks"
                ],
                "additionalProperties": false
              }
            },
            "next_cursor": {
              "anyOf": [
                {
                  "type": "string",
                  "minLength": 1
                },
                {
                  "type": "null"
                }
              ]
            },
            "continuation": {
              "anyOf": [
                {
                  "type": "object",
                  "properties": {
                    "tool": {
                      "type": "string",
                      "const": "cycle_read"
                    },
                    "arguments": {
                      "type": "object",
                      "properties": {
                        "operation": {
                          "type": "string",
                          "const": "list"
                        },
                        "cursor": {
                          "type": "string",
                          "minLength": 1
                        },
                        "limit": {
                          "type": "integer",
                          "minimum": 1,
                          "maximum": 100
                        }
                      },
                      "required": [
                        "operation",
                        "cursor",
                        "limit"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "required": [
                    "tool",
                    "arguments"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "items",
            "next_cursor",
            "continuation"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "cycle": {
              "anyOf": [
                {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    "intention": {
                      "anyOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "null"
                        }
                      ],
                      "description": "UI label: Intention. Optional guiding focus; the cycle is identified by its date range, not a name."
                    },
                    "start_at": {
                      "type": "string",
                      "format": "date",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                      "description": "UI label: Starts."
                    },
                    "end_at": {
                      "type": "string",
                      "format": "date",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                      "description": "UI label: Ends."
                    },
                    "status": {
                      "type": "string",
                      "enum": [
                        "active",
                        "archived"
                      ]
                    },
                    "created_at": {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    "url": {
                      "type": "string",
                      "format": "uri"
                    },
                    "achievement_pct": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ],
                      "description": "UI label: Achievement. Derived from objective progress; unavailable when nothing is measurable."
                    },
                    "time_gone_pct": {
                      "type": "number",
                      "minimum": 0,
                      "maximum": 100,
                      "description": "UI label: Time gone. Derived percentage of the cycle elapsed."
                    },
                    "length_weeks": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991,
                      "description": "UI label: Length, in weeks; derived from Starts and Ends."
                    }
                  },
                  "required": [
                    "id",
                    "intention",
                    "start_at",
                    "end_at",
                    "status",
                    "created_at",
                    "url",
                    "achievement_pct",
                    "time_gone_pct",
                    "length_weeks"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "cycle"
          ],
          "additionalProperties": false
        }
      ]
    }
  }
]
cycles.list · read · contract-only

Feature declaration: listCycles

Requirement: docs/feature-specs/F2-cycles.md · Access: retained-read

Tables: cycles (read)

Trusted context: authenticated actor

Retry: Safe to retry with the same resolved filters and cursor.

Expected errors: UNAUTHORIZED, BAD_REQUEST, FORBIDDEN, NOT_FOUND, CONFLICT, NOT_IMPLEMENTED, INTERNAL_SERVER_ERROR

API consumers

[
  {
    "operation": "cycles.list",
    "service": "cycles.list",
    "binding": "bound"
  }
]

MCP consumers

[
  {
    "tool": "cycle_read",
    "collection": "cycles",
    "specification": "docs/feature-specs/F2-cycles.md#entity-specific-cycle-query",
    "operation": "list",
    "binding": "bound",
    "mode": "adapted",
    "readiness": "contract-only",
    "services": [
      "cycles.list"
    ],
    "gap": null,
    "projection": "Dispatch lifecycle operations explicitly; read returns the cycle only; writes project record.cycle and changed; readers preserve continuations."
  }
]

Service input

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "cursor": {
      "type": "string",
      "minLength": 1
    },
    "limit": {
      "default": 20,
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    }
  },
  "additionalProperties": false
}

Service output

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "items": {
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
            "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
          },
          "intention": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "UI label: Intention. Optional guiding focus; the cycle is identified by its date range, not a name."
          },
          "start_at": {
            "type": "string",
            "format": "date",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
            "description": "UI label: Starts."
          },
          "end_at": {
            "type": "string",
            "format": "date",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
            "description": "UI label: Ends."
          },
          "status": {
            "type": "string",
            "enum": [
              "active",
              "archived"
            ]
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "achievement_pct": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "description": "UI label: Achievement. Derived from objective progress; unavailable when nothing is measurable."
          },
          "time_gone_pct": {
            "type": "number",
            "minimum": 0,
            "maximum": 100,
            "description": "UI label: Time gone. Derived percentage of the cycle elapsed."
          },
          "length_weeks": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991,
            "description": "UI label: Length, in weeks; derived from Starts and Ends."
          }
        },
        "required": [
          "id",
          "intention",
          "start_at",
          "end_at",
          "status",
          "created_at",
          "url",
          "achievement_pct",
          "time_gone_pct",
          "length_weeks"
        ],
        "additionalProperties": false
      }
    },
    "next_cursor": {
      "anyOf": [
        {
          "type": "string",
          "minLength": 1
        },
        {
          "type": "null"
        }
      ]
    }
  },
  "required": [
    "items",
    "next_cursor"
  ],
  "additionalProperties": false
}
Public MCP input/output shapes for comparison
[
  {
    "tool": "cycle_read",
    "collection": "cycles",
    "specification": "docs/feature-specs/F2-cycles.md#entity-specific-cycle-query",
    "operation": "list",
    "binding": "bound",
    "mode": "adapted",
    "readiness": "contract-only",
    "services": [
      "cycles.list"
    ],
    "gap": null,
    "projection": "Dispatch lifecycle operations explicitly; read returns the cycle only; writes project record.cycle and changed; readers preserve continuations.",
    "input": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "oneOf": [
        {
          "type": "object",
          "properties": {
            "cursor": {
              "type": "string",
              "minLength": 1
            },
            "limit": {
              "default": 20,
              "type": "integer",
              "minimum": 1,
              "maximum": 100
            },
            "operation": {
              "type": "string",
              "const": "list",
              "description": "Find cycles; reuse fresh results directly for updates."
            }
          },
          "required": [
            "operation"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "operation": {
              "type": "string",
              "const": "get"
            },
            "id": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                {
                  "type": "string",
                  "const": "active"
                }
              ],
              "description": "Owned cycle UUID from fresh context, or active for the stored active cycle at execution. No date-based expiry or fallback. Use the UUID for a specifically selected cycle."
            }
          },
          "required": [
            "operation",
            "id"
          ],
          "additionalProperties": false
        }
      ]
    },
    "output": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "items": {
              "maxItems": 100,
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "intention": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "UI label: Intention. Optional guiding focus; the cycle is identified by its date range, not a name."
                  },
                  "start_at": {
                    "type": "string",
                    "format": "date",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                    "description": "UI label: Starts."
                  },
                  "end_at": {
                    "type": "string",
                    "format": "date",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                    "description": "UI label: Ends."
                  },
                  "status": {
                    "type": "string",
                    "enum": [
                      "active",
                      "archived"
                    ]
                  },
                  "created_at": {
                    "type": "string",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                  },
                  "url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "achievement_pct": {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "UI label: Achievement. Derived from objective progress; unavailable when nothing is measurable."
                  },
                  "time_gone_pct": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 100,
                    "description": "UI label: Time gone. Derived percentage of the cycle elapsed."
                  },
                  "length_weeks": {
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991,
                    "description": "UI label: Length, in weeks; derived from Starts and Ends."
                  }
                },
                "required": [
                  "id",
                  "intention",
                  "start_at",
                  "end_at",
                  "status",
                  "created_at",
                  "url",
                  "achievement_pct",
                  "time_gone_pct",
                  "length_weeks"
                ],
                "additionalProperties": false
              }
            },
            "next_cursor": {
              "anyOf": [
                {
                  "type": "string",
                  "minLength": 1
                },
                {
                  "type": "null"
                }
              ]
            },
            "continuation": {
              "anyOf": [
                {
                  "type": "object",
                  "properties": {
                    "tool": {
                      "type": "string",
                      "const": "cycle_read"
                    },
                    "arguments": {
                      "type": "object",
                      "properties": {
                        "operation": {
                          "type": "string",
                          "const": "list"
                        },
                        "cursor": {
                          "type": "string",
                          "minLength": 1
                        },
                        "limit": {
                          "type": "integer",
                          "minimum": 1,
                          "maximum": 100
                        }
                      },
                      "required": [
                        "operation",
                        "cursor",
                        "limit"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "required": [
                    "tool",
                    "arguments"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "items",
            "next_cursor",
            "continuation"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "cycle": {
              "anyOf": [
                {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    "intention": {
                      "anyOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "null"
                        }
                      ],
                      "description": "UI label: Intention. Optional guiding focus; the cycle is identified by its date range, not a name."
                    },
                    "start_at": {
                      "type": "string",
                      "format": "date",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                      "description": "UI label: Starts."
                    },
                    "end_at": {
                      "type": "string",
                      "format": "date",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                      "description": "UI label: Ends."
                    },
                    "status": {
                      "type": "string",
                      "enum": [
                        "active",
                        "archived"
                      ]
                    },
                    "created_at": {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    "url": {
                      "type": "string",
                      "format": "uri"
                    },
                    "achievement_pct": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ],
                      "description": "UI label: Achievement. Derived from objective progress; unavailable when nothing is measurable."
                    },
                    "time_gone_pct": {
                      "type": "number",
                      "minimum": 0,
                      "maximum": 100,
                      "description": "UI label: Time gone. Derived percentage of the cycle elapsed."
                    },
                    "length_weeks": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991,
                      "description": "UI label: Length, in weeks; derived from Starts and Ends."
                    }
                  },
                  "required": [
                    "id",
                    "intention",
                    "start_at",
                    "end_at",
                    "status",
                    "created_at",
                    "url",
                    "achievement_pct",
                    "time_gone_pct",
                    "length_weeks"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "cycle"
          ],
          "additionalProperties": false
        }
      ]
    }
  }
]
cycles.update · write · contract-only

Feature declaration: updateCycle

Requirement: docs/feature-specs/F2-cycles.md · Access: entitled-write

Tables: cycles (write), objectives (read)

Trusted context: authenticated actor

Retry: Inspect state after uncertain outcomes; never infer rollback from a response failure.

Expected errors: UNAUTHORIZED, BAD_REQUEST, FORBIDDEN, NOT_FOUND, CONFLICT, NOT_IMPLEMENTED, INTERNAL_SERVER_ERROR

API consumers

[
  {
    "operation": "cycles.update",
    "service": "cycles.update",
    "binding": "bound"
  }
]

MCP consumers

[
  {
    "tool": "cycle_update",
    "collection": "cycles",
    "specification": "docs/feature-specs/F2-cycles.md#mcp-contract",
    "operation": "call",
    "binding": "bound",
    "mode": "adapted",
    "readiness": "contract-only",
    "services": [
      "cycles.update"
    ],
    "gap": null,
    "projection": "Dispatch lifecycle operations explicitly; read returns the cycle only; writes project record.cycle and changed; readers preserve continuations."
  },
  {
    "tool": "cycle_lifecycle",
    "collection": "cycles",
    "specification": "docs/feature-specs/F2-cycles.md#mcp-contract",
    "operation": "archive",
    "binding": "bound",
    "mode": "adapted",
    "readiness": "contract-only",
    "services": [
      "cycles.update"
    ],
    "gap": null,
    "projection": "Dispatch lifecycle operations explicitly; read returns the cycle only; writes project record.cycle and changed; readers preserve continuations."
  },
  {
    "tool": "cycle_lifecycle",
    "collection": "cycles",
    "specification": "docs/feature-specs/F2-cycles.md#mcp-contract",
    "operation": "activate",
    "binding": "bound",
    "mode": "adapted",
    "readiness": "contract-only",
    "services": [
      "cycles.update"
    ],
    "gap": null,
    "projection": "Dispatch lifecycle operations explicitly; read returns the cycle only; writes project record.cycle and changed; readers preserve continuations."
  }
]

Service input

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "anyOf": [
        {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
        },
        {
          "type": "string",
          "const": "active"
        }
      ],
      "description": "Owned cycle UUID from fresh context, or active for the stored active cycle at execution. No date-based expiry or fallback. Use the UUID for a specifically selected cycle."
    },
    "start_at": {
      "type": "string",
      "format": "date",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      "description": "UI label: Starts. Calendar date, YYYY-MM-DD. Required on create; omit on update to preserve."
    },
    "end_at": {
      "type": "string",
      "format": "date",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      "description": "UI label: Ends. Calendar date, YYYY-MM-DD; must be after the resulting start date."
    },
    "intention": {
      "description": "Personal focus. Omit to preserve on update; null clears it.",
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ]
    },
    "status": {
      "type": "string",
      "enum": [
        "active",
        "archived"
      ]
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}

Service output

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "record": {
      "type": "object",
      "properties": {
        "cycle": {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "intention": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "UI label: Intention. Optional guiding focus; the cycle is identified by its date range, not a name."
            },
            "start_at": {
              "type": "string",
              "format": "date",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
              "description": "UI label: Starts."
            },
            "end_at": {
              "type": "string",
              "format": "date",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
              "description": "UI label: Ends."
            },
            "status": {
              "type": "string",
              "enum": [
                "active",
                "archived"
              ]
            },
            "created_at": {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
            },
            "url": {
              "type": "string",
              "format": "uri"
            },
            "achievement_pct": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "null"
                }
              ],
              "description": "UI label: Achievement. Derived from objective progress; unavailable when nothing is measurable."
            },
            "time_gone_pct": {
              "type": "number",
              "minimum": 0,
              "maximum": 100,
              "description": "UI label: Time gone. Derived percentage of the cycle elapsed."
            },
            "length_weeks": {
              "type": "integer",
              "minimum": -9007199254740991,
              "maximum": 9007199254740991,
              "description": "UI label: Length, in weeks; derived from Starts and Ends."
            }
          },
          "required": [
            "id",
            "intention",
            "start_at",
            "end_at",
            "status",
            "created_at",
            "url",
            "achievement_pct",
            "time_gone_pct",
            "length_weeks"
          ],
          "additionalProperties": false
        },
        "objectives": {
          "type": "object",
          "properties": {
            "items": {
              "maxItems": 50,
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "cycle_id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "title": {
                    "type": "string"
                  },
                  "description": {
                    "type": "string"
                  },
                  "deadline_at": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                        "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "UI label: Deadline; null when no deadline has been set."
                  },
                  "status": {
                    "type": "string",
                    "enum": [
                      "on_track",
                      "off_track",
                      "completed"
                    ],
                    "description": "Objective status: On track, Off track or Completed. Coaching judgment, independent of the derived Progress percentage."
                  },
                  "created_at": {
                    "type": "string",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                  },
                  "short_code": {
                    "type": "string",
                    "minLength": 1
                  },
                  "url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "progress_pct": {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "UI label: Progress. Derived from measurable results, independently of Status."
                  },
                  "boundary_progress_pct": {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "Historical progress at the resolved last-session boundary; not current Progress."
                  },
                  "movement_pp": {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                },
                "required": [
                  "id",
                  "cycle_id",
                  "title",
                  "description",
                  "deadline_at",
                  "status",
                  "created_at",
                  "short_code",
                  "url",
                  "progress_pct",
                  "boundary_progress_pct",
                  "movement_pp"
                ],
                "additionalProperties": false
              }
            },
            "next_cursor": {
              "anyOf": [
                {
                  "type": "string",
                  "minLength": 1
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "items",
            "next_cursor"
          ],
          "additionalProperties": false
        },
        "continuations": {
          "type": "object",
          "propertyNames": {
            "type": "string",
            "enum": [
              "cycles",
              "objectives",
              "results",
              "actions",
              "notes",
              "sessions",
              "result_logs",
              "habit_logs",
              "action_logs",
              "trend"
            ]
          },
          "additionalProperties": {
            "type": "string",
            "minLength": 1
          }
        }
      },
      "required": [
        "cycle",
        "objectives",
        "continuations"
      ],
      "additionalProperties": false
    },
    "changed": {
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "entity": {
            "type": "string",
            "enum": [
              "user",
              "cycle",
              "objective",
              "result",
              "result_log",
              "action",
              "action_log",
              "session",
              "note",
              "habit_log"
            ]
          },
          "id": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
            "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
          }
        },
        "required": [
          "entity",
          "id"
        ],
        "additionalProperties": false
      }
    },
    "continuations": {
      "type": "object",
      "propertyNames": {
        "type": "string",
        "enum": [
          "cycles",
          "objectives",
          "results",
          "actions",
          "notes",
          "sessions",
          "result_logs",
          "habit_logs",
          "action_logs",
          "trend"
        ]
      },
      "additionalProperties": {
        "type": "string",
        "minLength": 1
      }
    }
  },
  "required": [
    "record",
    "changed",
    "continuations"
  ],
  "additionalProperties": false
}
Public MCP input/output shapes for comparison
[
  {
    "tool": "cycle_update",
    "collection": "cycles",
    "specification": "docs/feature-specs/F2-cycles.md#mcp-contract",
    "operation": "call",
    "binding": "bound",
    "mode": "adapted",
    "readiness": "contract-only",
    "services": [
      "cycles.update"
    ],
    "gap": null,
    "projection": "Dispatch lifecycle operations explicitly; read returns the cycle only; writes project record.cycle and changed; readers preserve continuations.",
    "input": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "id": {
          "anyOf": [
            {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            {
              "type": "string",
              "const": "active"
            }
          ],
          "description": "Owned cycle UUID from fresh context, or active for the stored active cycle at execution. No date-based expiry or fallback. Use the UUID for a specifically selected cycle."
        },
        "start_at": {
          "type": "string",
          "format": "date",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
          "description": "UI label: Starts. Calendar date, YYYY-MM-DD. Required on create; omit on update to preserve."
        },
        "end_at": {
          "type": "string",
          "format": "date",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
          "description": "UI label: Ends. Calendar date, YYYY-MM-DD; must be after the resulting start date."
        },
        "intention": {
          "description": "Personal focus. Omit to preserve on update; null clears it.",
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "required": [
        "id"
      ],
      "additionalProperties": false
    },
    "output": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "cycle": {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "intention": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "UI label: Intention. Optional guiding focus; the cycle is identified by its date range, not a name."
            },
            "start_at": {
              "type": "string",
              "format": "date",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
              "description": "UI label: Starts."
            },
            "end_at": {
              "type": "string",
              "format": "date",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
              "description": "UI label: Ends."
            },
            "status": {
              "type": "string",
              "enum": [
                "active",
                "archived"
              ]
            },
            "created_at": {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
            },
            "url": {
              "type": "string",
              "format": "uri"
            },
            "achievement_pct": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "null"
                }
              ],
              "description": "UI label: Achievement. Derived from objective progress; unavailable when nothing is measurable."
            },
            "time_gone_pct": {
              "type": "number",
              "minimum": 0,
              "maximum": 100,
              "description": "UI label: Time gone. Derived percentage of the cycle elapsed."
            },
            "length_weeks": {
              "type": "integer",
              "minimum": -9007199254740991,
              "maximum": 9007199254740991,
              "description": "UI label: Length, in weeks; derived from Starts and Ends."
            }
          },
          "required": [
            "id",
            "intention",
            "start_at",
            "end_at",
            "status",
            "created_at",
            "url",
            "achievement_pct",
            "time_gone_pct",
            "length_weeks"
          ],
          "additionalProperties": false
        },
        "changed": {
          "maxItems": 100,
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "entity": {
                "type": "string",
                "enum": [
                  "user",
                  "cycle",
                  "objective",
                  "result",
                  "result_log",
                  "action",
                  "action_log",
                  "session",
                  "note",
                  "habit_log"
                ]
              },
              "id": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
              }
            },
            "required": [
              "entity",
              "id"
            ],
            "additionalProperties": false
          }
        }
      },
      "required": [
        "cycle",
        "changed"
      ],
      "additionalProperties": false
    }
  },
  {
    "tool": "cycle_lifecycle",
    "collection": "cycles",
    "specification": "docs/feature-specs/F2-cycles.md#mcp-contract",
    "operation": "archive",
    "binding": "bound",
    "mode": "adapted",
    "readiness": "contract-only",
    "services": [
      "cycles.update"
    ],
    "gap": null,
    "projection": "Dispatch lifecycle operations explicitly; read returns the cycle only; writes project record.cycle and changed; readers preserve continuations.",
    "input": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "oneOf": [
        {
          "type": "object",
          "properties": {
            "start_at": {
              "type": "string",
              "format": "date",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
              "description": "UI label: Starts. Calendar date, YYYY-MM-DD. Required on create; omit on update to preserve."
            },
            "end_at": {
              "type": "string",
              "format": "date",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
              "description": "UI label: Ends. Calendar date, YYYY-MM-DD; must be after the resulting start date."
            },
            "intention": {
              "description": "Personal focus. Omit to preserve on update; null clears it.",
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ]
            },
            "idempotency_key": {
              "type": "string",
              "minLength": 1,
              "maxLength": 255,
              "description": "Unique key per logical create. Reuse the same key AND fields on every retry, including uncertain outcomes. A new create needs a new key."
            },
            "operation": {
              "type": "string",
              "const": "create"
            }
          },
          "required": [
            "start_at",
            "end_at",
            "idempotency_key",
            "operation"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "operation": {
              "type": "string",
              "const": "archive"
            }
          },
          "required": [
            "id",
            "operation"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "operation": {
              "type": "string",
              "const": "activate"
            }
          },
          "required": [
            "id",
            "operation"
          ],
          "additionalProperties": false
        }
      ]
    },
    "output": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "cycle": {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "intention": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "UI label: Intention. Optional guiding focus; the cycle is identified by its date range, not a name."
            },
            "start_at": {
              "type": "string",
              "format": "date",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
              "description": "UI label: Starts."
            },
            "end_at": {
              "type": "string",
              "format": "date",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
              "description": "UI label: Ends."
            },
            "status": {
              "type": "string",
              "enum": [
                "active",
                "archived"
              ]
            },
            "created_at": {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
            },
            "url": {
              "type": "string",
              "format": "uri"
            },
            "achievement_pct": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "null"
                }
              ],
              "description": "UI label: Achievement. Derived from objective progress; unavailable when nothing is measurable."
            },
            "time_gone_pct": {
              "type": "number",
              "minimum": 0,
              "maximum": 100,
              "description": "UI label: Time gone. Derived percentage of the cycle elapsed."
            },
            "length_weeks": {
              "type": "integer",
              "minimum": -9007199254740991,
              "maximum": 9007199254740991,
              "description": "UI label: Length, in weeks; derived from Starts and Ends."
            }
          },
          "required": [
            "id",
            "intention",
            "start_at",
            "end_at",
            "status",
            "created_at",
            "url",
            "achievement_pct",
            "time_gone_pct",
            "length_weeks"
          ],
          "additionalProperties": false
        },
        "changed": {
          "maxItems": 100,
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "entity": {
                "type": "string",
                "enum": [
                  "user",
                  "cycle",
                  "objective",
                  "result",
                  "result_log",
                  "action",
                  "action_log",
                  "session",
                  "note",
                  "habit_log"
                ]
              },
              "id": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
              }
            },
            "required": [
              "entity",
              "id"
            ],
            "additionalProperties": false
          }
        }
      },
      "required": [
        "cycle",
        "changed"
      ],
      "additionalProperties": false
    }
  },
  {
    "tool": "cycle_lifecycle",
    "collection": "cycles",
    "specification": "docs/feature-specs/F2-cycles.md#mcp-contract",
    "operation": "activate",
    "binding": "bound",
    "mode": "adapted",
    "readiness": "contract-only",
    "services": [
      "cycles.update"
    ],
    "gap": null,
    "projection": "Dispatch lifecycle operations explicitly; read returns the cycle only; writes project record.cycle and changed; readers preserve continuations.",
    "input": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "oneOf": [
        {
          "type": "object",
          "properties": {
            "start_at": {
              "type": "string",
              "format": "date",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
              "description": "UI label: Starts. Calendar date, YYYY-MM-DD. Required on create; omit on update to preserve."
            },
            "end_at": {
              "type": "string",
              "format": "date",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
              "description": "UI label: Ends. Calendar date, YYYY-MM-DD; must be after the resulting start date."
            },
            "intention": {
              "description": "Personal focus. Omit to preserve on update; null clears it.",
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ]
            },
            "idempotency_key": {
              "type": "string",
              "minLength": 1,
              "maxLength": 255,
              "description": "Unique key per logical create. Reuse the same key AND fields on every retry, including uncertain outcomes. A new create needs a new key."
            },
            "operation": {
              "type": "string",
              "const": "create"
            }
          },
          "required": [
            "start_at",
            "end_at",
            "idempotency_key",
            "operation"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "operation": {
              "type": "string",
              "const": "archive"
            }
          },
          "required": [
            "id",
            "operation"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "operation": {
              "type": "string",
              "const": "activate"
            }
          },
          "required": [
            "id",
            "operation"
          ],
          "additionalProperties": false
        }
      ]
    },
    "output": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "cycle": {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "intention": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "UI label: Intention. Optional guiding focus; the cycle is identified by its date range, not a name."
            },
            "start_at": {
              "type": "string",
              "format": "date",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
              "description": "UI label: Starts."
            },
            "end_at": {
              "type": "string",
              "format": "date",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
              "description": "UI label: Ends."
            },
            "status": {
              "type": "string",
              "enum": [
                "active",
                "archived"
              ]
            },
            "created_at": {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
            },
            "url": {
              "type": "string",
              "format": "uri"
            },
            "achievement_pct": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "null"
                }
              ],
              "description": "UI label: Achievement. Derived from objective progress; unavailable when nothing is measurable."
            },
            "time_gone_pct": {
              "type": "number",
              "minimum": 0,
              "maximum": 100,
              "description": "UI label: Time gone. Derived percentage of the cycle elapsed."
            },
            "length_weeks": {
              "type": "integer",
              "minimum": -9007199254740991,
              "maximum": 9007199254740991,
              "description": "UI label: Length, in weeks; derived from Starts and Ends."
            }
          },
          "required": [
            "id",
            "intention",
            "start_at",
            "end_at",
            "status",
            "created_at",
            "url",
            "achievement_pct",
            "time_gone_pct",
            "length_weeks"
          ],
          "additionalProperties": false
        },
        "changed": {
          "maxItems": 100,
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "entity": {
                "type": "string",
                "enum": [
                  "user",
                  "cycle",
                  "objective",
                  "result",
                  "result_log",
                  "action",
                  "action_log",
                  "session",
                  "note",
                  "habit_log"
                ]
              },
              "id": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
              }
            },
            "required": [
              "entity",
              "id"
            ],
            "additionalProperties": false
          }
        }
      },
      "required": [
        "cycle",
        "changed"
      ],
      "additionalProperties": false
    }
  }
]
cycles.delete · delete · contract-only

Feature declaration: deleteCycle

Requirement: docs/feature-specs/F2-cycles.md · Access: entitled-write

Tables: cycles (delete)

Trusted context: authenticated actor

Retry: Inspect state after uncertain outcomes; never infer rollback from a response failure.

Expected errors: UNAUTHORIZED, BAD_REQUEST, FORBIDDEN, NOT_FOUND, CONFLICT, NOT_IMPLEMENTED, INTERNAL_SERVER_ERROR

API consumers

[
  {
    "operation": "cycles.delete",
    "service": "cycles.delete",
    "binding": "bound"
  }
]

MCP consumers

[
  {
    "tool": "cycle_delete",
    "collection": "cycles",
    "specification": "docs/feature-specs/F2-cycles.md#mcp-contract",
    "operation": "commit",
    "binding": "bound",
    "mode": "adapted",
    "readiness": "contract-only",
    "services": [
      "cycles.delete"
    ],
    "gap": null,
    "projection": "Dispatch lifecycle operations explicitly; read returns the cycle only; writes project record.cycle and changed; readers preserve continuations."
  }
]

Service input

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
    },
    "preview_id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "Server-issued impact preview ID. This is not approval: the service checks genuine user approval recorded by the trusted host/application."
    }
  },
  "required": [
    "id",
    "preview_id"
  ],
  "additionalProperties": false
}

Service output

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
    },
    "active_remaining": {
      "type": "boolean"
    }
  },
  "required": [
    "id",
    "active_remaining"
  ],
  "additionalProperties": false
}
Public MCP input/output shapes for comparison
[
  {
    "tool": "cycle_delete",
    "collection": "cycles",
    "specification": "docs/feature-specs/F2-cycles.md#mcp-contract",
    "operation": "commit",
    "binding": "bound",
    "mode": "adapted",
    "readiness": "contract-only",
    "services": [
      "cycles.delete"
    ],
    "gap": null,
    "projection": "Dispatch lifecycle operations explicitly; read returns the cycle only; writes project record.cycle and changed; readers preserve continuations.",
    "input": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "oneOf": [
        {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "operation": {
              "type": "string",
              "const": "preview"
            }
          },
          "required": [
            "id",
            "operation"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "preview_id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Server-issued impact preview ID. This is not approval: the service checks genuine user approval recorded by the trusted host/application."
            },
            "operation": {
              "type": "string",
              "const": "commit"
            }
          },
          "required": [
            "id",
            "preview_id",
            "operation"
          ],
          "additionalProperties": false
        }
      ]
    },
    "output": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "operation": {
              "type": "string",
              "const": "preview"
            },
            "preview_id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "expires_at": {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
            },
            "cycle": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "start_at": {
                  "type": "string",
                  "format": "date",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                  "description": "UI label: Starts."
                },
                "end_at": {
                  "type": "string",
                  "format": "date",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                  "description": "UI label: Ends."
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "active",
                    "archived"
                  ]
                }
              },
              "required": [
                "id",
                "start_at",
                "end_at",
                "status"
              ],
              "additionalProperties": false
            },
            "deleted": {
              "type": "object",
              "properties": {
                "cycles": {
                  "type": "number",
                  "const": 1
                },
                "objectives": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "results": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "result_logs": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "habit_logs": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "actions": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "action_logs": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                }
              },
              "required": [
                "cycles",
                "objectives",
                "results",
                "result_logs",
                "habit_logs",
                "actions",
                "action_logs"
              ],
              "additionalProperties": false
            },
            "retained": {
              "type": "array",
              "prefixItems": [
                {
                  "type": "string",
                  "const": "notes"
                },
                {
                  "type": "string",
                  "const": "sessions"
                }
              ]
            },
            "active_remaining": {
              "type": "boolean"
            },
            "approval": {
              "type": "object",
              "properties": {
                "status": {
                  "type": "string",
                  "const": "required"
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                }
              },
              "required": [
                "status",
                "url"
              ],
              "additionalProperties": false
            }
          },
          "required": [
            "operation",
            "preview_id",
            "expires_at",
            "cycle",
            "deleted",
            "retained",
            "active_remaining",
            "approval"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "active_remaining": {
              "type": "boolean"
            },
            "operation": {
              "type": "string",
              "const": "commit"
            }
          },
          "required": [
            "id",
            "active_remaining",
            "operation"
          ],
          "additionalProperties": false
        }
      ]
    }
  }
]
objectives.preview_deletion · write · contract-only

Feature declaration: previewObjectiveDeletion

Requirement: docs/feature-specs/F3-objectives.md · Access: entitled-write

Tables: objectives (read), results (read), result_logs (read), habit_logs (read), actions (read), action_logs (read)

Trusted context: authenticated actor

Retry: Preview does not authorize deletion. Commit rechecks actor, target, impact, expiry and application approval; incomplete impact fails closed.

Expected errors: UNAUTHORIZED, BAD_REQUEST, FORBIDDEN, NOT_FOUND, CONFLICT, NOT_IMPLEMENTED, INTERNAL_SERVER_ERROR

API consumers

[
  {
    "operation": "objectives.preview_deletion",
    "service": "objectives.preview_deletion",
    "binding": "bound"
  }
]

MCP consumers

[
  {
    "tool": "objective_delete",
    "collection": "objectives",
    "specification": "docs/feature-specs/F3-objectives.md#mcp-source-mapping--selected-target",
    "operation": "preview",
    "binding": "planned",
    "mode": "adapted",
    "readiness": "contract-only",
    "services": [
      "objectives.preview_deletion"
    ],
    "gap": null,
    "projection": "Project record.objective and changed on writes; list uses resolved cycle_id for continuations; get returns objective only."
  }
]

Service input

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}

Service output

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "operation": {
      "type": "string",
      "const": "preview"
    },
    "preview_id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
    },
    "expires_at": {
      "type": "string",
      "format": "date-time",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
    },
    "target": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
        },
        "title": {
          "type": "string"
        }
      },
      "required": [
        "id",
        "title"
      ],
      "additionalProperties": false
    },
    "deleted": {
      "type": "object",
      "properties": {
        "objectives": {
          "type": "number",
          "const": 1
        },
        "results": {
          "type": "integer",
          "minimum": 0,
          "maximum": 9007199254740991
        },
        "result_logs": {
          "type": "integer",
          "minimum": 0,
          "maximum": 9007199254740991
        },
        "habit_logs": {
          "type": "integer",
          "minimum": 0,
          "maximum": 9007199254740991
        },
        "actions": {
          "type": "integer",
          "minimum": 0,
          "maximum": 9007199254740991
        },
        "action_logs": {
          "type": "integer",
          "minimum": 0,
          "maximum": 9007199254740991
        }
      },
      "required": [
        "objectives",
        "results",
        "result_logs",
        "habit_logs",
        "actions",
        "action_logs"
      ],
      "additionalProperties": false
    },
    "approval": {
      "type": "object",
      "properties": {
        "status": {
          "type": "string",
          "const": "required"
        },
        "url": {
          "type": "string",
          "format": "uri"
        }
      },
      "required": [
        "status",
        "url"
      ],
      "additionalProperties": false
    }
  },
  "required": [
    "operation",
    "preview_id",
    "expires_at",
    "target",
    "deleted",
    "approval"
  ],
  "additionalProperties": false
}
Public MCP input/output shapes for comparison
[
  {
    "tool": "objective_delete",
    "collection": "objectives",
    "specification": "docs/feature-specs/F3-objectives.md#mcp-source-mapping--selected-target",
    "operation": "preview",
    "binding": "planned",
    "mode": "adapted",
    "readiness": "contract-only",
    "services": [
      "objectives.preview_deletion"
    ],
    "gap": null,
    "projection": "Project record.objective and changed on writes; list uses resolved cycle_id for continuations; get returns objective only.",
    "input": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "oneOf": [
        {
          "type": "object",
          "properties": {
            "operation": {
              "type": "string",
              "const": "preview"
            },
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Exact owned record UUID. Resolve ambiguous targets before requesting impact."
            }
          },
          "required": [
            "operation",
            "id"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "operation": {
              "type": "string",
              "const": "commit"
            },
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "preview_id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Server preview ID for this target. Not consent: genuine approval must already be recorded by the trusted application."
            }
          },
          "required": [
            "operation",
            "id",
            "preview_id"
          ],
          "additionalProperties": false
        }
      ]
    },
    "output": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "oneOf": [
        {
          "type": "object",
          "properties": {
            "operation": {
              "type": "string",
              "const": "preview"
            },
            "preview_id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "expires_at": {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
            },
            "target": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "title": {
                  "type": "string"
                }
              },
              "required": [
                "id",
                "title"
              ],
              "additionalProperties": false
            },
            "deleted": {
              "type": "object",
              "properties": {
                "objectives": {
                  "type": "number",
                  "const": 1
                },
                "results": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "result_logs": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "habit_logs": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "actions": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "action_logs": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                }
              },
              "required": [
                "objectives",
                "results",
                "result_logs",
                "habit_logs",
                "actions",
                "action_logs"
              ],
              "additionalProperties": false
            },
            "approval": {
              "type": "object",
              "properties": {
                "status": {
                  "type": "string",
                  "const": "required"
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                }
              },
              "required": [
                "status",
                "url"
              ],
              "additionalProperties": false
            }
          },
          "required": [
            "operation",
            "preview_id",
            "expires_at",
            "target",
            "deleted",
            "approval"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "operation": {
              "type": "string",
              "const": "commit"
            },
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            }
          },
          "required": [
            "operation",
            "id"
          ],
          "additionalProperties": false
        }
      ]
    }
  }
]
objectives.create · write · contract-only

Feature declaration: createObjective

Requirement: docs/feature-specs/F3-objectives.md · Access: entitled-write

Tables: objectives (write), cycles (read), results (read), actions (read), idempotency_keys (write)

Trusted context: authenticated actor

Retry: API requires client-key replay; unkeyed MCP calls must inspect state after an uncertain outcome.

Expected errors: UNAUTHORIZED, BAD_REQUEST, FORBIDDEN, NOT_FOUND, CONFLICT, NOT_IMPLEMENTED, INTERNAL_SERVER_ERROR

API consumers

[
  {
    "operation": "objectives.create",
    "service": "objectives.create",
    "binding": "bound"
  }
]

MCP consumers

[
  {
    "tool": "objective_write",
    "collection": "objectives",
    "specification": "docs/feature-specs/F3-objectives.md#mcp-source-mapping--selected-target",
    "operation": "create",
    "binding": "planned",
    "mode": "adapted",
    "readiness": "contract-only",
    "services": [
      "objectives.create"
    ],
    "gap": null,
    "projection": "Project record.objective and changed on writes; list uses resolved cycle_id for continuations; get returns objective only."
  }
]

Service input

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "anyOf": [
    {
      "type": "object",
      "properties": {
        "title": {
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "deadline_at": {
          "description": "UI label: Deadline. Optional; omitted or null creates the objective with no deadline.",
          "anyOf": [
            {
              "type": "string",
              "format": "date",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
              "description": "Calendar date as YYYY-MM-DD in the profile timezone."
            },
            {
              "type": "null"
            }
          ]
        },
        "idempotency_key": {
          "type": "string",
          "minLength": 1,
          "maxLength": 255
        }
      },
      "required": [
        "title",
        "idempotency_key"
      ],
      "additionalProperties": false
    },
    {
      "type": "object",
      "properties": {
        "title": {
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "deadline_at": {
          "description": "UI label: Deadline. Optional; omitted or null creates the objective with no deadline.",
          "anyOf": [
            {
              "type": "string",
              "format": "date",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
              "description": "Calendar date as YYYY-MM-DD in the profile timezone."
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "required": [
        "title"
      ],
      "additionalProperties": false
    }
  ]
}

Service output

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "record": {
      "type": "object",
      "properties": {
        "objective": {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "cycle_id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "title": {
              "type": "string"
            },
            "description": {
              "type": "string"
            },
            "deadline_at": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                  "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                },
                {
                  "type": "null"
                }
              ],
              "description": "UI label: Deadline; null when no deadline has been set."
            },
            "status": {
              "type": "string",
              "enum": [
                "on_track",
                "off_track",
                "completed"
              ],
              "description": "Objective status: On track, Off track or Completed. Coaching judgment, independent of the derived Progress percentage."
            },
            "created_at": {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
            },
            "short_code": {
              "type": "string",
              "minLength": 1
            },
            "url": {
              "type": "string",
              "format": "uri"
            },
            "progress_pct": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "null"
                }
              ],
              "description": "UI label: Progress. Derived from measurable results, independently of Status."
            },
            "boundary_progress_pct": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Historical progress at the resolved last-session boundary; not current Progress."
            },
            "movement_pp": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "id",
            "cycle_id",
            "title",
            "description",
            "deadline_at",
            "status",
            "created_at",
            "short_code",
            "url",
            "progress_pct",
            "boundary_progress_pct",
            "movement_pp"
          ],
          "additionalProperties": false
        },
        "cycle": {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "intention": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "UI label: Intention. Optional guiding focus; the cycle is identified by its date range, not a name."
            },
            "start_at": {
              "type": "string",
              "format": "date",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
              "description": "UI label: Starts."
            },
            "end_at": {
              "type": "string",
              "format": "date",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
              "description": "UI label: Ends."
            },
            "status": {
              "type": "string",
              "enum": [
                "active",
                "archived"
              ]
            },
            "created_at": {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
            },
            "url": {
              "type": "string",
              "format": "uri"
            },
            "achievement_pct": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "null"
                }
              ],
              "description": "UI label: Achievement. Derived from objective progress; unavailable when nothing is measurable."
            },
            "time_gone_pct": {
              "type": "number",
              "minimum": 0,
              "maximum": 100,
              "description": "UI label: Time gone. Derived percentage of the cycle elapsed."
            },
            "length_weeks": {
              "type": "integer",
              "minimum": -9007199254740991,
              "maximum": 9007199254740991,
              "description": "UI label: Length, in weeks; derived from Starts and Ends."
            }
          },
          "required": [
            "id",
            "intention",
            "start_at",
            "end_at",
            "status",
            "created_at",
            "url",
            "achievement_pct",
            "time_gone_pct",
            "length_weeks"
          ],
          "additionalProperties": false
        },
        "results": {
          "type": "object",
          "properties": {
            "items": {
              "maxItems": 50,
              "type": "array",
              "items": {
                "oneOf": [
                  {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      "objective_id": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      "title": {
                        "type": "string"
                      },
                      "description": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "metric_type": {
                        "type": "string",
                        "const": "number"
                      },
                      "start_value": {
                        "type": "number"
                      },
                      "target_value": {
                        "type": "number"
                      },
                      "unit": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "UI label: Unit. Used by Number and Performance results."
                      },
                      "cadence": {
                        "type": "null"
                      },
                      "per": {
                        "type": "null"
                      },
                      "since": {
                        "type": "null"
                      },
                      "status": {
                        "type": "string",
                        "enum": [
                          "in_progress",
                          "completed"
                        ],
                        "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                      },
                      "created_at": {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      "short_code": {
                        "type": "string",
                        "minLength": 1
                      },
                      "url": {
                        "type": "string",
                        "format": "uri"
                      },
                      "current_value": {
                        "type": "number",
                        "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                      },
                      "boundary_value": {
                        "type": "number"
                      },
                      "progress_pct": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "boundary_progress_pct": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "movement": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "movement_pp": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "evidence_count": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      },
                      "last_recorded_at": {
                        "anyOf": [
                          {
                            "type": "string",
                            "format": "date-time",
                            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "habit_expected_since_boundary": {
                        "anyOf": [
                          {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "habit_logs_since_boundary": {
                        "anyOf": [
                          {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "performance_share": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "required": [
                      "id",
                      "objective_id",
                      "title",
                      "description",
                      "metric_type",
                      "start_value",
                      "target_value",
                      "unit",
                      "cadence",
                      "per",
                      "since",
                      "status",
                      "created_at",
                      "short_code",
                      "url",
                      "current_value",
                      "boundary_value",
                      "progress_pct",
                      "boundary_progress_pct",
                      "movement",
                      "movement_pp",
                      "evidence_count",
                      "last_recorded_at",
                      "habit_expected_since_boundary",
                      "habit_logs_since_boundary",
                      "performance_share"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      "objective_id": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      "title": {
                        "type": "string"
                      },
                      "description": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "metric_type": {
                        "type": "string",
                        "const": "percentage"
                      },
                      "start_value": {
                        "type": "number",
                        "minimum": 0,
                        "maximum": 100
                      },
                      "target_value": {
                        "type": "number",
                        "minimum": 0,
                        "maximum": 100
                      },
                      "unit": {
                        "type": "null"
                      },
                      "cadence": {
                        "type": "null"
                      },
                      "per": {
                        "type": "null"
                      },
                      "since": {
                        "type": "null"
                      },
                      "status": {
                        "type": "string",
                        "enum": [
                          "in_progress",
                          "completed"
                        ],
                        "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                      },
                      "created_at": {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      "short_code": {
                        "type": "string",
                        "minLength": 1
                      },
                      "url": {
                        "type": "string",
                        "format": "uri"
                      },
                      "current_value": {
                        "type": "number",
                        "minimum": 0,
                        "maximum": 100
                      },
                      "boundary_value": {
                        "type": "number",
                        "minimum": 0,
                        "maximum": 100
                      },
                      "progress_pct": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "boundary_progress_pct": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "movement": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "movement_pp": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "evidence_count": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      },
                      "last_recorded_at": {
                        "anyOf": [
                          {
                            "type": "string",
                            "format": "date-time",
                            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "habit_expected_since_boundary": {
                        "anyOf": [
                          {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "habit_logs_since_boundary": {
                        "anyOf": [
                          {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "performance_share": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "required": [
                      "id",
                      "objective_id",
                      "title",
                      "description",
                      "metric_type",
                      "start_value",
                      "target_value",
                      "unit",
                      "cadence",
                      "per",
                      "since",
                      "status",
                      "created_at",
                      "short_code",
                      "url",
                      "current_value",
                      "boundary_value",
                      "progress_pct",
                      "boundary_progress_pct",
                      "movement",
                      "movement_pp",
                      "evidence_count",
                      "last_recorded_at",
                      "habit_expected_since_boundary",
                      "habit_logs_since_boundary",
                      "performance_share"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      "objective_id": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      "title": {
                        "type": "string"
                      },
                      "description": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "metric_type": {
                        "type": "string",
                        "const": "milestone"
                      },
                      "start_value": {
                        "type": "number",
                        "const": 0
                      },
                      "target_value": {
                        "type": "number",
                        "const": 1
                      },
                      "unit": {
                        "type": "null"
                      },
                      "cadence": {
                        "type": "null"
                      },
                      "per": {
                        "type": "null"
                      },
                      "since": {
                        "type": "null"
                      },
                      "status": {
                        "type": "string",
                        "enum": [
                          "in_progress",
                          "completed"
                        ],
                        "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                      },
                      "created_at": {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      "short_code": {
                        "type": "string",
                        "minLength": 1
                      },
                      "url": {
                        "type": "string",
                        "format": "uri"
                      },
                      "current_value": {
                        "anyOf": [
                          {
                            "type": "number",
                            "const": 0
                          },
                          {
                            "type": "number",
                            "const": 1
                          }
                        ]
                      },
                      "boundary_value": {
                        "anyOf": [
                          {
                            "type": "number",
                            "const": 0
                          },
                          {
                            "type": "number",
                            "const": 1
                          }
                        ]
                      },
                      "progress_pct": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "boundary_progress_pct": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "movement": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "movement_pp": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "evidence_count": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      },
                      "last_recorded_at": {
                        "anyOf": [
                          {
                            "type": "string",
                            "format": "date-time",
                            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "habit_expected_since_boundary": {
                        "anyOf": [
                          {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "habit_logs_since_boundary": {
                        "anyOf": [
                          {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "performance_share": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "required": [
                      "id",
                      "objective_id",
                      "title",
                      "description",
                      "metric_type",
                      "start_value",
                      "target_value",
                      "unit",
                      "cadence",
                      "per",
                      "since",
                      "status",
                      "created_at",
                      "short_code",
                      "url",
                      "current_value",
                      "boundary_value",
                      "progress_pct",
                      "boundary_progress_pct",
                      "movement",
                      "movement_pp",
                      "evidence_count",
                      "last_recorded_at",
                      "habit_expected_since_boundary",
                      "habit_logs_since_boundary",
                      "performance_share"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      "objective_id": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      "title": {
                        "type": "string"
                      },
                      "description": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "metric_type": {
                        "type": "string",
                        "const": "habit"
                      },
                      "start_value": {
                        "type": "number",
                        "const": 0
                      },
                      "target_value": {
                        "type": "number",
                        "const": 100
                      },
                      "unit": {
                        "type": "null"
                      },
                      "cadence": {
                        "type": "string",
                        "enum": [
                          "weekly",
                          "monthly"
                        ],
                        "description": "UI label: Cadence. Weekly or Monthly; per supplies the Times value."
                      },
                      "per": {
                        "type": "integer",
                        "exclusiveMinimum": 0,
                        "maximum": 9007199254740991
                      },
                      "since": {
                        "type": "string",
                        "format": "date",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                        "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                      },
                      "status": {
                        "type": "string",
                        "enum": [
                          "in_progress",
                          "completed"
                        ],
                        "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                      },
                      "created_at": {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      "short_code": {
                        "type": "string",
                        "minLength": 1
                      },
                      "url": {
                        "type": "string",
                        "format": "uri"
                      },
                      "current_value": {
                        "type": "number",
                        "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                      },
                      "boundary_value": {
                        "type": "number"
                      },
                      "progress_pct": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "boundary_progress_pct": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "movement": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "movement_pp": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "evidence_count": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      },
                      "last_recorded_at": {
                        "anyOf": [
                          {
                            "type": "string",
                            "format": "date-time",
                            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "habit_expected_since_boundary": {
                        "anyOf": [
                          {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "habit_logs_since_boundary": {
                        "anyOf": [
                          {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "performance_share": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "required": [
                      "id",
                      "objective_id",
                      "title",
                      "description",
                      "metric_type",
                      "start_value",
                      "target_value",
                      "unit",
                      "cadence",
                      "per",
                      "since",
                      "status",
                      "created_at",
                      "short_code",
                      "url",
                      "current_value",
                      "boundary_value",
                      "progress_pct",
                      "boundary_progress_pct",
                      "movement",
                      "movement_pp",
                      "evidence_count",
                      "last_recorded_at",
                      "habit_expected_since_boundary",
                      "habit_logs_since_boundary",
                      "performance_share"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      "objective_id": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      "title": {
                        "type": "string"
                      },
                      "description": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "metric_type": {
                        "type": "string",
                        "const": "performance"
                      },
                      "start_value": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "UI label: Start. Metric baseline; habit baselines are derived rather than stored."
                      },
                      "target_value": {
                        "type": "number"
                      },
                      "unit": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "UI label: Unit. Used by Number and Performance results."
                      },
                      "cadence": {
                        "type": "null"
                      },
                      "per": {
                        "type": "null"
                      },
                      "since": {
                        "type": "string",
                        "format": "date",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                        "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                      },
                      "status": {
                        "type": "string",
                        "enum": [
                          "in_progress",
                          "completed"
                        ],
                        "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                      },
                      "created_at": {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      "short_code": {
                        "type": "string",
                        "minLength": 1
                      },
                      "url": {
                        "type": "string",
                        "format": "uri"
                      },
                      "current_value": {
                        "type": "number",
                        "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                      },
                      "boundary_value": {
                        "type": "number"
                      },
                      "progress_pct": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "boundary_progress_pct": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "movement": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "movement_pp": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "evidence_count": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      },
                      "last_recorded_at": {
                        "anyOf": [
                          {
                            "type": "string",
                            "format": "date-time",
                            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "habit_expected_since_boundary": {
                        "anyOf": [
                          {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "habit_logs_since_boundary": {
                        "anyOf": [
                          {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "performance_share": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "required": [
                      "id",
                      "objective_id",
                      "title",
                      "description",
                      "metric_type",
                      "start_value",
                      "target_value",
                      "unit",
                      "cadence",
                      "per",
                      "since",
                      "status",
                      "created_at",
                      "short_code",
                      "url",
                      "current_value",
                      "boundary_value",
                      "progress_pct",
                      "boundary_progress_pct",
                      "movement",
                      "movement_pp",
                      "evidence_count",
                      "last_recorded_at",
                      "habit_expected_since_boundary",
                      "habit_logs_since_boundary",
                      "performance_share"
                    ],
                    "additionalProperties": false
                  }
                ]
              }
            },
            "next_cursor": {
              "anyOf": [
                {
                  "type": "string",
                  "minLength": 1
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "items",
            "next_cursor"
          ],
          "additionalProperties": false
        },
        "actions": {
          "type": "object",
          "properties": {
            "items": {
              "maxItems": 50,
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "cycle_id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "objective_id": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "title": {
                    "type": "string"
                  },
                  "description": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "due_at": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                        "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "UI label: Due. May be unset on a web draft; a set date cannot be cleared."
                  },
                  "status": {
                    "type": "string",
                    "enum": [
                      "open",
                      "in_progress",
                      "done"
                    ],
                    "description": "Action status: Open, In progress or Done. The To do UI group includes Open and In progress; Overdue is derived, not a status."
                  },
                  "sort_order": {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "Drag order within an action group; not a progress status."
                  },
                  "session_id": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "created_at": {
                    "type": "string",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                  },
                  "url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "overdue": {
                    "type": "boolean"
                  },
                  "done_since_boundary": {
                    "type": "boolean"
                  }
                },
                "required": [
                  "id",
                  "cycle_id",
                  "objective_id",
                  "title",
                  "description",
                  "due_at",
                  "status",
                  "sort_order",
                  "session_id",
                  "created_at",
                  "url",
                  "overdue",
                  "done_since_boundary"
                ],
                "additionalProperties": false
              }
            },
            "next_cursor": {
              "anyOf": [
                {
                  "type": "string",
                  "minLength": 1
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "items",
            "next_cursor"
          ],
          "additionalProperties": false
        },
        "continuations": {
          "type": "object",
          "propertyNames": {
            "type": "string",
            "enum": [
              "cycles",
              "objectives",
              "results",
              "actions",
              "notes",
              "sessions",
              "result_logs",
              "habit_logs",
              "action_logs",
              "trend"
            ]
          },
          "additionalProperties": {
            "type": "string",
            "minLength": 1
          }
        }
      },
      "required": [
        "objective",
        "cycle",
        "results",
        "actions",
        "continuations"
      ],
      "additionalProperties": false
    },
    "changed": {
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "entity": {
            "type": "string",
            "enum": [
              "user",
              "cycle",
              "objective",
              "result",
              "result_log",
              "action",
              "action_log",
              "session",
              "note",
              "habit_log"
            ]
          },
          "id": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
            "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
          }
        },
        "required": [
          "entity",
          "id"
        ],
        "additionalProperties": false
      }
    },
    "continuations": {
      "type": "object",
      "propertyNames": {
        "type": "string",
        "enum": [
          "cycles",
          "objectives",
          "results",
          "actions",
          "notes",
          "sessions",
          "result_logs",
          "habit_logs",
          "action_logs",
          "trend"
        ]
      },
      "additionalProperties": {
        "type": "string",
        "minLength": 1
      }
    }
  },
  "required": [
    "record",
    "changed",
    "continuations"
  ],
  "additionalProperties": false
}
Public MCP input/output shapes for comparison
[
  {
    "tool": "objective_write",
    "collection": "objectives",
    "specification": "docs/feature-specs/F3-objectives.md#mcp-source-mapping--selected-target",
    "operation": "create",
    "binding": "planned",
    "mode": "adapted",
    "readiness": "contract-only",
    "services": [
      "objectives.create"
    ],
    "gap": null,
    "projection": "Project record.objective and changed on writes; list uses resolved cycle_id for continuations; get returns objective only.",
    "input": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "oneOf": [
        {
          "type": "object",
          "properties": {
            "title": {
              "type": "string",
              "minLength": 1
            },
            "description": {
              "type": "string"
            },
            "deadline_at": {
              "description": "UI label: Deadline. Optional; omitted or null creates the objective with no deadline.",
              "anyOf": [
                {
                  "type": "string",
                  "format": "date",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                  "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                },
                {
                  "type": "null"
                }
              ]
            },
            "operation": {
              "type": "string",
              "const": "create"
            }
          },
          "required": [
            "title",
            "description",
            "operation"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "title": {
              "type": "string",
              "minLength": 1
            },
            "description": {
              "type": "string"
            },
            "deadline_at": {
              "description": "UI label: Deadline. Omit to preserve; a date sets or replaces it. A deadline cannot be cleared, so null is rejected.",
              "type": "string",
              "format": "date",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
            },
            "status": {
              "type": "string",
              "enum": [
                "on_track",
                "off_track",
                "completed"
              ],
              "description": "Objective status: On track, Off track or Completed. Coaching judgment, independent of the derived Progress percentage."
            },
            "operation": {
              "type": "string",
              "const": "update"
            }
          },
          "required": [
            "id",
            "operation"
          ],
          "additionalProperties": false
        }
      ]
    },
    "output": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "objective": {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "cycle_id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "title": {
              "type": "string"
            },
            "description": {
              "type": "string"
            },
            "deadline_at": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                  "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                },
                {
                  "type": "null"
                }
              ],
              "description": "UI label: Deadline; null when no deadline has been set."
            },
            "status": {
              "type": "string",
              "enum": [
                "on_track",
                "off_track",
                "completed"
              ],
              "description": "Objective status: On track, Off track or Completed. Coaching judgment, independent of the derived Progress percentage."
            },
            "created_at": {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
            },
            "short_code": {
              "type": "string",
              "minLength": 1
            },
            "url": {
              "type": "string",
              "format": "uri"
            },
            "progress_pct": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "null"
                }
              ],
              "description": "UI label: Progress. Derived from measurable results, independently of Status."
            },
            "boundary_progress_pct": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Historical progress at the resolved last-session boundary; not current Progress."
            },
            "movement_pp": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "id",
            "cycle_id",
            "title",
            "description",
            "deadline_at",
            "status",
            "created_at",
            "short_code",
            "url",
            "progress_pct",
            "boundary_progress_pct",
            "movement_pp"
          ],
          "additionalProperties": false
        },
        "changed": {
          "maxItems": 100,
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "entity": {
                "type": "string",
                "enum": [
                  "user",
                  "cycle",
                  "objective",
                  "result",
                  "result_log",
                  "action",
                  "action_log",
                  "session",
                  "note",
                  "habit_log"
                ]
              },
              "id": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
              }
            },
            "required": [
              "entity",
              "id"
            ],
            "additionalProperties": false
          }
        }
      },
      "required": [
        "objective",
        "changed"
      ],
      "additionalProperties": false
    }
  }
]
objectives.list · read · contract-only

Feature declaration: listObjectives

Requirement: docs/feature-specs/F3-objectives.md · Access: retained-read

Tables: objectives (read)

Trusted context: authenticated actor

Retry: Safe to retry with the same resolved filters and cursor.

Expected errors: UNAUTHORIZED, BAD_REQUEST, FORBIDDEN, NOT_FOUND, CONFLICT, NOT_IMPLEMENTED, INTERNAL_SERVER_ERROR

API consumers

[
  {
    "operation": "objectives.list",
    "service": "objectives.list",
    "binding": "bound"
  }
]

MCP consumers

[
  {
    "tool": "objective_read",
    "collection": "objectives",
    "specification": "docs/feature-specs/F3-objectives.md#mcp-source-mapping--selected-target",
    "operation": "list",
    "binding": "planned",
    "mode": "adapted",
    "readiness": "contract-only",
    "services": [
      "objectives.list"
    ],
    "gap": null,
    "projection": "Project record.objective and changed on writes; list uses resolved cycle_id for continuations; get returns objective only."
  }
]

Service input

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "cursor": {
      "type": "string",
      "minLength": 1
    },
    "limit": {
      "default": 20,
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "cycle_id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
    }
  },
  "additionalProperties": false
}

Service output

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "items": {
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
            "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
          },
          "cycle_id": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
            "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
          },
          "title": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "deadline_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                "description": "Calendar date as YYYY-MM-DD in the profile timezone."
              },
              {
                "type": "null"
              }
            ],
            "description": "UI label: Deadline; null when no deadline has been set."
          },
          "status": {
            "type": "string",
            "enum": [
              "on_track",
              "off_track",
              "completed"
            ],
            "description": "Objective status: On track, Off track or Completed. Coaching judgment, independent of the derived Progress percentage."
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
          },
          "short_code": {
            "type": "string",
            "minLength": 1
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "progress_pct": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "description": "UI label: Progress. Derived from measurable results, independently of Status."
          },
          "boundary_progress_pct": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "description": "Historical progress at the resolved last-session boundary; not current Progress."
          },
          "movement_pp": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "id",
          "cycle_id",
          "title",
          "description",
          "deadline_at",
          "status",
          "created_at",
          "short_code",
          "url",
          "progress_pct",
          "boundary_progress_pct",
          "movement_pp"
        ],
        "additionalProperties": false
      }
    },
    "next_cursor": {
      "anyOf": [
        {
          "type": "string",
          "minLength": 1
        },
        {
          "type": "null"
        }
      ]
    },
    "cycle_id": {
      "anyOf": [
        {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
        },
        {
          "type": "null"
        }
      ]
    }
  },
  "required": [
    "items",
    "next_cursor",
    "cycle_id"
  ],
  "additionalProperties": false
}
Public MCP input/output shapes for comparison
[
  {
    "tool": "objective_read",
    "collection": "objectives",
    "specification": "docs/feature-specs/F3-objectives.md#mcp-source-mapping--selected-target",
    "operation": "list",
    "binding": "planned",
    "mode": "adapted",
    "readiness": "contract-only",
    "services": [
      "objectives.list"
    ],
    "gap": null,
    "projection": "Project record.objective and changed on writes; list uses resolved cycle_id for continuations; get returns objective only.",
    "input": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "oneOf": [
        {
          "type": "object",
          "properties": {
            "cursor": {
              "type": "string",
              "minLength": 1
            },
            "limit": {
              "default": 20,
              "type": "integer",
              "minimum": 1,
              "maximum": 100
            },
            "cycle_id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "operation": {
              "type": "string",
              "const": "list"
            }
          },
          "required": [
            "operation"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "operation": {
              "type": "string",
              "const": "get"
            }
          },
          "required": [
            "id",
            "operation"
          ],
          "additionalProperties": false
        }
      ]
    },
    "output": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "items": {
              "maxItems": 100,
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "cycle_id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "title": {
                    "type": "string"
                  },
                  "description": {
                    "type": "string"
                  },
                  "deadline_at": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                        "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "UI label: Deadline; null when no deadline has been set."
                  },
                  "status": {
                    "type": "string",
                    "enum": [
                      "on_track",
                      "off_track",
                      "completed"
                    ],
                    "description": "Objective status: On track, Off track or Completed. Coaching judgment, independent of the derived Progress percentage."
                  },
                  "created_at": {
                    "type": "string",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                  },
                  "short_code": {
                    "type": "string",
                    "minLength": 1
                  },
                  "url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "progress_pct": {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "UI label: Progress. Derived from measurable results, independently of Status."
                  },
                  "boundary_progress_pct": {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "Historical progress at the resolved last-session boundary; not current Progress."
                  },
                  "movement_pp": {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                },
                "required": [
                  "id",
                  "cycle_id",
                  "title",
                  "description",
                  "deadline_at",
                  "status",
                  "created_at",
                  "short_code",
                  "url",
                  "progress_pct",
                  "boundary_progress_pct",
                  "movement_pp"
                ],
                "additionalProperties": false
              }
            },
            "next_cursor": {
              "anyOf": [
                {
                  "type": "string",
                  "minLength": 1
                },
                {
                  "type": "null"
                }
              ]
            },
            "continuation": {
              "anyOf": [
                {
                  "type": "object",
                  "properties": {
                    "tool": {
                      "type": "string",
                      "const": "objective_read"
                    },
                    "arguments": {
                      "type": "object",
                      "properties": {
                        "cursor": {
                          "type": "string",
                          "minLength": 1
                        },
                        "limit": {
                          "type": "integer",
                          "minimum": 1,
                          "maximum": 100
                        },
                        "cycle_id": {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                        },
                        "operation": {
                          "type": "string",
                          "const": "list"
                        }
                      },
                      "required": [
                        "cursor",
                        "limit",
                        "cycle_id",
                        "operation"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "required": [
                    "tool",
                    "arguments"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "null"
                }
              ]
            },
            "operation": {
              "type": "string",
              "const": "list"
            }
          },
          "required": [
            "items",
            "next_cursor",
            "continuation",
            "operation"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "operation": {
              "type": "string",
              "const": "get"
            },
            "objective": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "cycle_id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "title": {
                  "type": "string"
                },
                "description": {
                  "type": "string"
                },
                "deadline_at": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                      "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "UI label: Deadline; null when no deadline has been set."
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "on_track",
                    "off_track",
                    "completed"
                  ],
                  "description": "Objective status: On track, Off track or Completed. Coaching judgment, independent of the derived Progress percentage."
                },
                "created_at": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "short_code": {
                  "type": "string",
                  "minLength": 1
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                },
                "progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "UI label: Progress. Derived from measurable results, independently of Status."
                },
                "boundary_progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "Historical progress at the resolved last-session boundary; not current Progress."
                },
                "movement_pp": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "id",
                "cycle_id",
                "title",
                "description",
                "deadline_at",
                "status",
                "created_at",
                "short_code",
                "url",
                "progress_pct",
                "boundary_progress_pct",
                "movement_pp"
              ],
              "additionalProperties": false
            }
          },
          "required": [
            "operation",
            "objective"
          ],
          "additionalProperties": false
        }
      ]
    }
  }
]
objectives.get · read · contract-only

Feature declaration: getObjective

Requirement: docs/feature-specs/F3-objectives.md · Access: retained-read

Tables: objectives (read), cycles (read), results (read), actions (read)

Trusted context: authenticated actor

Retry: Safe to retry with the same resolved filters and cursor.

Expected errors: UNAUTHORIZED, BAD_REQUEST, FORBIDDEN, NOT_FOUND, CONFLICT, NOT_IMPLEMENTED, INTERNAL_SERVER_ERROR

API consumers

[
  {
    "operation": "objectives.get",
    "service": "objectives.get",
    "binding": "bound"
  }
]

MCP consumers

[
  {
    "tool": "objective_read",
    "collection": "objectives",
    "specification": "docs/feature-specs/F3-objectives.md#mcp-source-mapping--selected-target",
    "operation": "get",
    "binding": "planned",
    "mode": "adapted",
    "readiness": "contract-only",
    "services": [
      "objectives.get"
    ],
    "gap": null,
    "projection": "Project record.objective and changed on writes; list uses resolved cycle_id for continuations; get returns objective only."
  }
]

Service input

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}

Service output

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "objective": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
        },
        "cycle_id": {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
        },
        "title": {
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "deadline_at": {
          "anyOf": [
            {
              "type": "string",
              "format": "date",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
              "description": "Calendar date as YYYY-MM-DD in the profile timezone."
            },
            {
              "type": "null"
            }
          ],
          "description": "UI label: Deadline; null when no deadline has been set."
        },
        "status": {
          "type": "string",
          "enum": [
            "on_track",
            "off_track",
            "completed"
          ],
          "description": "Objective status: On track, Off track or Completed. Coaching judgment, independent of the derived Progress percentage."
        },
        "created_at": {
          "type": "string",
          "format": "date-time",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
        },
        "short_code": {
          "type": "string",
          "minLength": 1
        },
        "url": {
          "type": "string",
          "format": "uri"
        },
        "progress_pct": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "description": "UI label: Progress. Derived from measurable results, independently of Status."
        },
        "boundary_progress_pct": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "description": "Historical progress at the resolved last-session boundary; not current Progress."
        },
        "movement_pp": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "required": [
        "id",
        "cycle_id",
        "title",
        "description",
        "deadline_at",
        "status",
        "created_at",
        "short_code",
        "url",
        "progress_pct",
        "boundary_progress_pct",
        "movement_pp"
      ],
      "additionalProperties": false
    },
    "cycle": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
        },
        "intention": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "description": "UI label: Intention. Optional guiding focus; the cycle is identified by its date range, not a name."
        },
        "start_at": {
          "type": "string",
          "format": "date",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
          "description": "UI label: Starts."
        },
        "end_at": {
          "type": "string",
          "format": "date",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
          "description": "UI label: Ends."
        },
        "status": {
          "type": "string",
          "enum": [
            "active",
            "archived"
          ]
        },
        "created_at": {
          "type": "string",
          "format": "date-time",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
        },
        "url": {
          "type": "string",
          "format": "uri"
        },
        "achievement_pct": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "description": "UI label: Achievement. Derived from objective progress; unavailable when nothing is measurable."
        },
        "time_gone_pct": {
          "type": "number",
          "minimum": 0,
          "maximum": 100,
          "description": "UI label: Time gone. Derived percentage of the cycle elapsed."
        },
        "length_weeks": {
          "type": "integer",
          "minimum": -9007199254740991,
          "maximum": 9007199254740991,
          "description": "UI label: Length, in weeks; derived from Starts and Ends."
        }
      },
      "required": [
        "id",
        "intention",
        "start_at",
        "end_at",
        "status",
        "created_at",
        "url",
        "achievement_pct",
        "time_gone_pct",
        "length_weeks"
      ],
      "additionalProperties": false
    },
    "results": {
      "type": "object",
      "properties": {
        "items": {
          "maxItems": 50,
          "type": "array",
          "items": {
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "objective_id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "title": {
                    "type": "string"
                  },
                  "description": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "metric_type": {
                    "type": "string",
                    "const": "number"
                  },
                  "start_value": {
                    "type": "number"
                  },
                  "target_value": {
                    "type": "number"
                  },
                  "unit": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "UI label: Unit. Used by Number and Performance results."
                  },
                  "cadence": {
                    "type": "null"
                  },
                  "per": {
                    "type": "null"
                  },
                  "since": {
                    "type": "null"
                  },
                  "status": {
                    "type": "string",
                    "enum": [
                      "in_progress",
                      "completed"
                    ],
                    "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                  },
                  "created_at": {
                    "type": "string",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                  },
                  "short_code": {
                    "type": "string",
                    "minLength": 1
                  },
                  "url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "current_value": {
                    "type": "number",
                    "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                  },
                  "boundary_value": {
                    "type": "number"
                  },
                  "progress_pct": {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "boundary_progress_pct": {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "movement": {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "movement_pp": {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "evidence_count": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 9007199254740991
                  },
                  "last_recorded_at": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "habit_expected_since_boundary": {
                    "anyOf": [
                      {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "habit_logs_since_boundary": {
                    "anyOf": [
                      {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "performance_share": {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                },
                "required": [
                  "id",
                  "objective_id",
                  "title",
                  "description",
                  "metric_type",
                  "start_value",
                  "target_value",
                  "unit",
                  "cadence",
                  "per",
                  "since",
                  "status",
                  "created_at",
                  "short_code",
                  "url",
                  "current_value",
                  "boundary_value",
                  "progress_pct",
                  "boundary_progress_pct",
                  "movement",
                  "movement_pp",
                  "evidence_count",
                  "last_recorded_at",
                  "habit_expected_since_boundary",
                  "habit_logs_since_boundary",
                  "performance_share"
                ],
                "additionalProperties": false
              },
              {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "objective_id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "title": {
                    "type": "string"
                  },
                  "description": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "metric_type": {
                    "type": "string",
                    "const": "percentage"
                  },
                  "start_value": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 100
                  },
                  "target_value": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 100
                  },
                  "unit": {
                    "type": "null"
                  },
                  "cadence": {
                    "type": "null"
                  },
                  "per": {
                    "type": "null"
                  },
                  "since": {
                    "type": "null"
                  },
                  "status": {
                    "type": "string",
                    "enum": [
                      "in_progress",
                      "completed"
                    ],
                    "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                  },
                  "created_at": {
                    "type": "string",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                  },
                  "short_code": {
                    "type": "string",
                    "minLength": 1
                  },
                  "url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "current_value": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 100
                  },
                  "boundary_value": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 100
                  },
                  "progress_pct": {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "boundary_progress_pct": {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "movement": {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "movement_pp": {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "evidence_count": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 9007199254740991
                  },
                  "last_recorded_at": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "habit_expected_since_boundary": {
                    "anyOf": [
                      {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "habit_logs_since_boundary": {
                    "anyOf": [
                      {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "performance_share": {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                },
                "required": [
                  "id",
                  "objective_id",
                  "title",
                  "description",
                  "metric_type",
                  "start_value",
                  "target_value",
                  "unit",
                  "cadence",
                  "per",
                  "since",
                  "status",
                  "created_at",
                  "short_code",
                  "url",
                  "current_value",
                  "boundary_value",
                  "progress_pct",
                  "boundary_progress_pct",
                  "movement",
                  "movement_pp",
                  "evidence_count",
                  "last_recorded_at",
                  "habit_expected_since_boundary",
                  "habit_logs_since_boundary",
                  "performance_share"
                ],
                "additionalProperties": false
              },
              {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "objective_id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "title": {
                    "type": "string"
                  },
                  "description": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "metric_type": {
                    "type": "string",
                    "const": "milestone"
                  },
                  "start_value": {
                    "type": "number",
                    "const": 0
                  },
                  "target_value": {
                    "type": "number",
                    "const": 1
                  },
                  "unit": {
                    "type": "null"
                  },
                  "cadence": {
                    "type": "null"
                  },
                  "per": {
                    "type": "null"
                  },
                  "since": {
                    "type": "null"
                  },
                  "status": {
                    "type": "string",
                    "enum": [
                      "in_progress",
                      "completed"
                    ],
                    "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                  },
                  "created_at": {
                    "type": "string",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                  },
                  "short_code": {
                    "type": "string",
                    "minLength": 1
                  },
                  "url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "current_value": {
                    "anyOf": [
                      {
                        "type": "number",
                        "const": 0
                      },
                      {
                        "type": "number",
                        "const": 1
                      }
                    ]
                  },
                  "boundary_value": {
                    "anyOf": [
                      {
                        "type": "number",
                        "const": 0
                      },
                      {
                        "type": "number",
                        "const": 1
                      }
                    ]
                  },
                  "progress_pct": {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "boundary_progress_pct": {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "movement": {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "movement_pp": {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "evidence_count": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 9007199254740991
                  },
                  "last_recorded_at": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "habit_expected_since_boundary": {
                    "anyOf": [
                      {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "habit_logs_since_boundary": {
                    "anyOf": [
                      {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "performance_share": {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                },
                "required": [
                  "id",
                  "objective_id",
                  "title",
                  "description",
                  "metric_type",
                  "start_value",
                  "target_value",
                  "unit",
                  "cadence",
                  "per",
                  "since",
                  "status",
                  "created_at",
                  "short_code",
                  "url",
                  "current_value",
                  "boundary_value",
                  "progress_pct",
                  "boundary_progress_pct",
                  "movement",
                  "movement_pp",
                  "evidence_count",
                  "last_recorded_at",
                  "habit_expected_since_boundary",
                  "habit_logs_since_boundary",
                  "performance_share"
                ],
                "additionalProperties": false
              },
              {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "objective_id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "title": {
                    "type": "string"
                  },
                  "description": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "metric_type": {
                    "type": "string",
                    "const": "habit"
                  },
                  "start_value": {
                    "type": "number",
                    "const": 0
                  },
                  "target_value": {
                    "type": "number",
                    "const": 100
                  },
                  "unit": {
                    "type": "null"
                  },
                  "cadence": {
                    "type": "string",
                    "enum": [
                      "weekly",
                      "monthly"
                    ],
                    "description": "UI label: Cadence. Weekly or Monthly; per supplies the Times value."
                  },
                  "per": {
                    "type": "integer",
                    "exclusiveMinimum": 0,
                    "maximum": 9007199254740991
                  },
                  "since": {
                    "type": "string",
                    "format": "date",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                    "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                  },
                  "status": {
                    "type": "string",
                    "enum": [
                      "in_progress",
                      "completed"
                    ],
                    "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                  },
                  "created_at": {
                    "type": "string",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                  },
                  "short_code": {
                    "type": "string",
                    "minLength": 1
                  },
                  "url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "current_value": {
                    "type": "number",
                    "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                  },
                  "boundary_value": {
                    "type": "number"
                  },
                  "progress_pct": {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "boundary_progress_pct": {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "movement": {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "movement_pp": {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "evidence_count": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 9007199254740991
                  },
                  "last_recorded_at": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "habit_expected_since_boundary": {
                    "anyOf": [
                      {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "habit_logs_since_boundary": {
                    "anyOf": [
                      {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "performance_share": {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                },
                "required": [
                  "id",
                  "objective_id",
                  "title",
                  "description",
                  "metric_type",
                  "start_value",
                  "target_value",
                  "unit",
                  "cadence",
                  "per",
                  "since",
                  "status",
                  "created_at",
                  "short_code",
                  "url",
                  "current_value",
                  "boundary_value",
                  "progress_pct",
                  "boundary_progress_pct",
                  "movement",
                  "movement_pp",
                  "evidence_count",
                  "last_recorded_at",
                  "habit_expected_since_boundary",
                  "habit_logs_since_boundary",
                  "performance_share"
                ],
                "additionalProperties": false
              },
              {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "objective_id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "title": {
                    "type": "string"
                  },
                  "description": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "metric_type": {
                    "type": "string",
                    "const": "performance"
                  },
                  "start_value": {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "UI label: Start. Metric baseline; habit baselines are derived rather than stored."
                  },
                  "target_value": {
                    "type": "number"
                  },
                  "unit": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "UI label: Unit. Used by Number and Performance results."
                  },
                  "cadence": {
                    "type": "null"
                  },
                  "per": {
                    "type": "null"
                  },
                  "since": {
                    "type": "string",
                    "format": "date",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                    "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                  },
                  "status": {
                    "type": "string",
                    "enum": [
                      "in_progress",
                      "completed"
                    ],
                    "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                  },
                  "created_at": {
                    "type": "string",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                  },
                  "short_code": {
                    "type": "string",
                    "minLength": 1
                  },
                  "url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "current_value": {
                    "type": "number",
                    "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                  },
                  "boundary_value": {
                    "type": "number"
                  },
                  "progress_pct": {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "boundary_progress_pct": {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "movement": {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "movement_pp": {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "evidence_count": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 9007199254740991
                  },
                  "last_recorded_at": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "habit_expected_since_boundary": {
                    "anyOf": [
                      {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "habit_logs_since_boundary": {
                    "anyOf": [
                      {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "performance_share": {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                },
                "required": [
                  "id",
                  "objective_id",
                  "title",
                  "description",
                  "metric_type",
                  "start_value",
                  "target_value",
                  "unit",
                  "cadence",
                  "per",
                  "since",
                  "status",
                  "created_at",
                  "short_code",
                  "url",
                  "current_value",
                  "boundary_value",
                  "progress_pct",
                  "boundary_progress_pct",
                  "movement",
                  "movement_pp",
                  "evidence_count",
                  "last_recorded_at",
                  "habit_expected_since_boundary",
                  "habit_logs_since_boundary",
                  "performance_share"
                ],
                "additionalProperties": false
              }
            ]
          }
        },
        "next_cursor": {
          "anyOf": [
            {
              "type": "string",
              "minLength": 1
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "required": [
        "items",
        "next_cursor"
      ],
      "additionalProperties": false
    },
    "actions": {
      "type": "object",
      "properties": {
        "items": {
          "maxItems": 50,
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
              },
              "cycle_id": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
              },
              "objective_id": {
                "anyOf": [
                  {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "title": {
                "type": "string"
              },
              "description": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "due_at": {
                "anyOf": [
                  {
                    "type": "string",
                    "format": "date",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                    "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "UI label: Due. May be unset on a web draft; a set date cannot be cleared."
              },
              "status": {
                "type": "string",
                "enum": [
                  "open",
                  "in_progress",
                  "done"
                ],
                "description": "Action status: Open, In progress or Done. The To do UI group includes Open and In progress; Overdue is derived, not a status."
              },
              "sort_order": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Drag order within an action group; not a progress status."
              },
              "session_id": {
                "anyOf": [
                  {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "created_at": {
                "type": "string",
                "format": "date-time",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
              },
              "url": {
                "type": "string",
                "format": "uri"
              },
              "overdue": {
                "type": "boolean"
              },
              "done_since_boundary": {
                "type": "boolean"
              }
            },
            "required": [
              "id",
              "cycle_id",
              "objective_id",
              "title",
              "description",
              "due_at",
              "status",
              "sort_order",
              "session_id",
              "created_at",
              "url",
              "overdue",
              "done_since_boundary"
            ],
            "additionalProperties": false
          }
        },
        "next_cursor": {
          "anyOf": [
            {
              "type": "string",
              "minLength": 1
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "required": [
        "items",
        "next_cursor"
      ],
      "additionalProperties": false
    },
    "continuations": {
      "type": "object",
      "propertyNames": {
        "type": "string",
        "enum": [
          "cycles",
          "objectives",
          "results",
          "actions",
          "notes",
          "sessions",
          "result_logs",
          "habit_logs",
          "action_logs",
          "trend"
        ]
      },
      "additionalProperties": {
        "type": "string",
        "minLength": 1
      }
    }
  },
  "required": [
    "objective",
    "cycle",
    "results",
    "actions",
    "continuations"
  ],
  "additionalProperties": false
}
Public MCP input/output shapes for comparison
[
  {
    "tool": "objective_read",
    "collection": "objectives",
    "specification": "docs/feature-specs/F3-objectives.md#mcp-source-mapping--selected-target",
    "operation": "get",
    "binding": "planned",
    "mode": "adapted",
    "readiness": "contract-only",
    "services": [
      "objectives.get"
    ],
    "gap": null,
    "projection": "Project record.objective and changed on writes; list uses resolved cycle_id for continuations; get returns objective only.",
    "input": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "oneOf": [
        {
          "type": "object",
          "properties": {
            "cursor": {
              "type": "string",
              "minLength": 1
            },
            "limit": {
              "default": 20,
              "type": "integer",
              "minimum": 1,
              "maximum": 100
            },
            "cycle_id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "operation": {
              "type": "string",
              "const": "list"
            }
          },
          "required": [
            "operation"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "operation": {
              "type": "string",
              "const": "get"
            }
          },
          "required": [
            "id",
            "operation"
          ],
          "additionalProperties": false
        }
      ]
    },
    "output": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "items": {
              "maxItems": 100,
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "cycle_id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "title": {
                    "type": "string"
                  },
                  "description": {
                    "type": "string"
                  },
                  "deadline_at": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                        "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "UI label: Deadline; null when no deadline has been set."
                  },
                  "status": {
                    "type": "string",
                    "enum": [
                      "on_track",
                      "off_track",
                      "completed"
                    ],
                    "description": "Objective status: On track, Off track or Completed. Coaching judgment, independent of the derived Progress percentage."
                  },
                  "created_at": {
                    "type": "string",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                  },
                  "short_code": {
                    "type": "string",
                    "minLength": 1
                  },
                  "url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "progress_pct": {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "UI label: Progress. Derived from measurable results, independently of Status."
                  },
                  "boundary_progress_pct": {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "Historical progress at the resolved last-session boundary; not current Progress."
                  },
                  "movement_pp": {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                },
                "required": [
                  "id",
                  "cycle_id",
                  "title",
                  "description",
                  "deadline_at",
                  "status",
                  "created_at",
                  "short_code",
                  "url",
                  "progress_pct",
                  "boundary_progress_pct",
                  "movement_pp"
                ],
                "additionalProperties": false
              }
            },
            "next_cursor": {
              "anyOf": [
                {
                  "type": "string",
                  "minLength": 1
                },
                {
                  "type": "null"
                }
              ]
            },
            "continuation": {
              "anyOf": [
                {
                  "type": "object",
                  "properties": {
                    "tool": {
                      "type": "string",
                      "const": "objective_read"
                    },
                    "arguments": {
                      "type": "object",
                      "properties": {
                        "cursor": {
                          "type": "string",
                          "minLength": 1
                        },
                        "limit": {
                          "type": "integer",
                          "minimum": 1,
                          "maximum": 100
                        },
                        "cycle_id": {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                        },
                        "operation": {
                          "type": "string",
                          "const": "list"
                        }
                      },
                      "required": [
                        "cursor",
                        "limit",
                        "cycle_id",
                        "operation"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "required": [
                    "tool",
                    "arguments"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "null"
                }
              ]
            },
            "operation": {
              "type": "string",
              "const": "list"
            }
          },
          "required": [
            "items",
            "next_cursor",
            "continuation",
            "operation"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "operation": {
              "type": "string",
              "const": "get"
            },
            "objective": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "cycle_id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "title": {
                  "type": "string"
                },
                "description": {
                  "type": "string"
                },
                "deadline_at": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                      "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "UI label: Deadline; null when no deadline has been set."
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "on_track",
                    "off_track",
                    "completed"
                  ],
                  "description": "Objective status: On track, Off track or Completed. Coaching judgment, independent of the derived Progress percentage."
                },
                "created_at": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "short_code": {
                  "type": "string",
                  "minLength": 1
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                },
                "progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "UI label: Progress. Derived from measurable results, independently of Status."
                },
                "boundary_progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "Historical progress at the resolved last-session boundary; not current Progress."
                },
                "movement_pp": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "id",
                "cycle_id",
                "title",
                "description",
                "deadline_at",
                "status",
                "created_at",
                "short_code",
                "url",
                "progress_pct",
                "boundary_progress_pct",
                "movement_pp"
              ],
              "additionalProperties": false
            }
          },
          "required": [
            "operation",
            "objective"
          ],
          "additionalProperties": false
        }
      ]
    }
  }
]
objectives.update · write · contract-only

Feature declaration: updateObjective

Requirement: docs/feature-specs/F3-objectives.md · Access: entitled-write

Tables: objectives (write), cycles (read), results (read), actions (read)

Trusted context: authenticated actor

Retry: Inspect state after uncertain outcomes; never infer rollback from a response failure.

Expected errors: UNAUTHORIZED, BAD_REQUEST, FORBIDDEN, NOT_FOUND, CONFLICT, NOT_IMPLEMENTED, INTERNAL_SERVER_ERROR

API consumers

[
  {
    "operation": "objectives.update",
    "service": "objectives.update",
    "binding": "bound"
  }
]

MCP consumers

[
  {
    "tool": "objective_write",
    "collection": "objectives",
    "specification": "docs/feature-specs/F3-objectives.md#mcp-source-mapping--selected-target",
    "operation": "update",
    "binding": "planned",
    "mode": "adapted",
    "readiness": "contract-only",
    "services": [
      "objectives.update"
    ],
    "gap": null,
    "projection": "Project record.objective and changed on writes; list uses resolved cycle_id for continuations; get returns objective only."
  }
]

Service input

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
    },
    "title": {
      "type": "string"
    },
    "description": {
      "type": "string"
    },
    "deadline_at": {
      "description": "UI label: Deadline. Omit to preserve; a date sets or replaces it. A deadline cannot be cleared, so null is rejected.",
      "type": "string",
      "format": "date",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
    },
    "status": {
      "type": "string",
      "enum": [
        "on_track",
        "off_track",
        "completed"
      ],
      "description": "Objective status: On track, Off track or Completed. Coaching judgment, independent of the derived Progress percentage."
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}

Service output

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "record": {
      "type": "object",
      "properties": {
        "objective": {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "cycle_id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "title": {
              "type": "string"
            },
            "description": {
              "type": "string"
            },
            "deadline_at": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                  "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                },
                {
                  "type": "null"
                }
              ],
              "description": "UI label: Deadline; null when no deadline has been set."
            },
            "status": {
              "type": "string",
              "enum": [
                "on_track",
                "off_track",
                "completed"
              ],
              "description": "Objective status: On track, Off track or Completed. Coaching judgment, independent of the derived Progress percentage."
            },
            "created_at": {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
            },
            "short_code": {
              "type": "string",
              "minLength": 1
            },
            "url": {
              "type": "string",
              "format": "uri"
            },
            "progress_pct": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "null"
                }
              ],
              "description": "UI label: Progress. Derived from measurable results, independently of Status."
            },
            "boundary_progress_pct": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Historical progress at the resolved last-session boundary; not current Progress."
            },
            "movement_pp": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "id",
            "cycle_id",
            "title",
            "description",
            "deadline_at",
            "status",
            "created_at",
            "short_code",
            "url",
            "progress_pct",
            "boundary_progress_pct",
            "movement_pp"
          ],
          "additionalProperties": false
        },
        "cycle": {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "intention": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "UI label: Intention. Optional guiding focus; the cycle is identified by its date range, not a name."
            },
            "start_at": {
              "type": "string",
              "format": "date",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
              "description": "UI label: Starts."
            },
            "end_at": {
              "type": "string",
              "format": "date",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
              "description": "UI label: Ends."
            },
            "status": {
              "type": "string",
              "enum": [
                "active",
                "archived"
              ]
            },
            "created_at": {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
            },
            "url": {
              "type": "string",
              "format": "uri"
            },
            "achievement_pct": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "null"
                }
              ],
              "description": "UI label: Achievement. Derived from objective progress; unavailable when nothing is measurable."
            },
            "time_gone_pct": {
              "type": "number",
              "minimum": 0,
              "maximum": 100,
              "description": "UI label: Time gone. Derived percentage of the cycle elapsed."
            },
            "length_weeks": {
              "type": "integer",
              "minimum": -9007199254740991,
              "maximum": 9007199254740991,
              "description": "UI label: Length, in weeks; derived from Starts and Ends."
            }
          },
          "required": [
            "id",
            "intention",
            "start_at",
            "end_at",
            "status",
            "created_at",
            "url",
            "achievement_pct",
            "time_gone_pct",
            "length_weeks"
          ],
          "additionalProperties": false
        },
        "results": {
          "type": "object",
          "properties": {
            "items": {
              "maxItems": 50,
              "type": "array",
              "items": {
                "oneOf": [
                  {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      "objective_id": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      "title": {
                        "type": "string"
                      },
                      "description": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "metric_type": {
                        "type": "string",
                        "const": "number"
                      },
                      "start_value": {
                        "type": "number"
                      },
                      "target_value": {
                        "type": "number"
                      },
                      "unit": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "UI label: Unit. Used by Number and Performance results."
                      },
                      "cadence": {
                        "type": "null"
                      },
                      "per": {
                        "type": "null"
                      },
                      "since": {
                        "type": "null"
                      },
                      "status": {
                        "type": "string",
                        "enum": [
                          "in_progress",
                          "completed"
                        ],
                        "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                      },
                      "created_at": {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      "short_code": {
                        "type": "string",
                        "minLength": 1
                      },
                      "url": {
                        "type": "string",
                        "format": "uri"
                      },
                      "current_value": {
                        "type": "number",
                        "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                      },
                      "boundary_value": {
                        "type": "number"
                      },
                      "progress_pct": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "boundary_progress_pct": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "movement": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "movement_pp": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "evidence_count": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      },
                      "last_recorded_at": {
                        "anyOf": [
                          {
                            "type": "string",
                            "format": "date-time",
                            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "habit_expected_since_boundary": {
                        "anyOf": [
                          {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "habit_logs_since_boundary": {
                        "anyOf": [
                          {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "performance_share": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "required": [
                      "id",
                      "objective_id",
                      "title",
                      "description",
                      "metric_type",
                      "start_value",
                      "target_value",
                      "unit",
                      "cadence",
                      "per",
                      "since",
                      "status",
                      "created_at",
                      "short_code",
                      "url",
                      "current_value",
                      "boundary_value",
                      "progress_pct",
                      "boundary_progress_pct",
                      "movement",
                      "movement_pp",
                      "evidence_count",
                      "last_recorded_at",
                      "habit_expected_since_boundary",
                      "habit_logs_since_boundary",
                      "performance_share"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      "objective_id": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      "title": {
                        "type": "string"
                      },
                      "description": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "metric_type": {
                        "type": "string",
                        "const": "percentage"
                      },
                      "start_value": {
                        "type": "number",
                        "minimum": 0,
                        "maximum": 100
                      },
                      "target_value": {
                        "type": "number",
                        "minimum": 0,
                        "maximum": 100
                      },
                      "unit": {
                        "type": "null"
                      },
                      "cadence": {
                        "type": "null"
                      },
                      "per": {
                        "type": "null"
                      },
                      "since": {
                        "type": "null"
                      },
                      "status": {
                        "type": "string",
                        "enum": [
                          "in_progress",
                          "completed"
                        ],
                        "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                      },
                      "created_at": {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      "short_code": {
                        "type": "string",
                        "minLength": 1
                      },
                      "url": {
                        "type": "string",
                        "format": "uri"
                      },
                      "current_value": {
                        "type": "number",
                        "minimum": 0,
                        "maximum": 100
                      },
                      "boundary_value": {
                        "type": "number",
                        "minimum": 0,
                        "maximum": 100
                      },
                      "progress_pct": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "boundary_progress_pct": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "movement": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "movement_pp": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "evidence_count": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      },
                      "last_recorded_at": {
                        "anyOf": [
                          {
                            "type": "string",
                            "format": "date-time",
                            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "habit_expected_since_boundary": {
                        "anyOf": [
                          {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "habit_logs_since_boundary": {
                        "anyOf": [
                          {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "performance_share": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "required": [
                      "id",
                      "objective_id",
                      "title",
                      "description",
                      "metric_type",
                      "start_value",
                      "target_value",
                      "unit",
                      "cadence",
                      "per",
                      "since",
                      "status",
                      "created_at",
                      "short_code",
                      "url",
                      "current_value",
                      "boundary_value",
                      "progress_pct",
                      "boundary_progress_pct",
                      "movement",
                      "movement_pp",
                      "evidence_count",
                      "last_recorded_at",
                      "habit_expected_since_boundary",
                      "habit_logs_since_boundary",
                      "performance_share"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      "objective_id": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      "title": {
                        "type": "string"
                      },
                      "description": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "metric_type": {
                        "type": "string",
                        "const": "milestone"
                      },
                      "start_value": {
                        "type": "number",
                        "const": 0
                      },
                      "target_value": {
                        "type": "number",
                        "const": 1
                      },
                      "unit": {
                        "type": "null"
                      },
                      "cadence": {
                        "type": "null"
                      },
                      "per": {
                        "type": "null"
                      },
                      "since": {
                        "type": "null"
                      },
                      "status": {
                        "type": "string",
                        "enum": [
                          "in_progress",
                          "completed"
                        ],
                        "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                      },
                      "created_at": {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      "short_code": {
                        "type": "string",
                        "minLength": 1
                      },
                      "url": {
                        "type": "string",
                        "format": "uri"
                      },
                      "current_value": {
                        "anyOf": [
                          {
                            "type": "number",
                            "const": 0
                          },
                          {
                            "type": "number",
                            "const": 1
                          }
                        ]
                      },
                      "boundary_value": {
                        "anyOf": [
                          {
                            "type": "number",
                            "const": 0
                          },
                          {
                            "type": "number",
                            "const": 1
                          }
                        ]
                      },
                      "progress_pct": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "boundary_progress_pct": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "movement": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "movement_pp": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "evidence_count": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      },
                      "last_recorded_at": {
                        "anyOf": [
                          {
                            "type": "string",
                            "format": "date-time",
                            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "habit_expected_since_boundary": {
                        "anyOf": [
                          {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "habit_logs_since_boundary": {
                        "anyOf": [
                          {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "performance_share": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "required": [
                      "id",
                      "objective_id",
                      "title",
                      "description",
                      "metric_type",
                      "start_value",
                      "target_value",
                      "unit",
                      "cadence",
                      "per",
                      "since",
                      "status",
                      "created_at",
                      "short_code",
                      "url",
                      "current_value",
                      "boundary_value",
                      "progress_pct",
                      "boundary_progress_pct",
                      "movement",
                      "movement_pp",
                      "evidence_count",
                      "last_recorded_at",
                      "habit_expected_since_boundary",
                      "habit_logs_since_boundary",
                      "performance_share"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      "objective_id": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      "title": {
                        "type": "string"
                      },
                      "description": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "metric_type": {
                        "type": "string",
                        "const": "habit"
                      },
                      "start_value": {
                        "type": "number",
                        "const": 0
                      },
                      "target_value": {
                        "type": "number",
                        "const": 100
                      },
                      "unit": {
                        "type": "null"
                      },
                      "cadence": {
                        "type": "string",
                        "enum": [
                          "weekly",
                          "monthly"
                        ],
                        "description": "UI label: Cadence. Weekly or Monthly; per supplies the Times value."
                      },
                      "per": {
                        "type": "integer",
                        "exclusiveMinimum": 0,
                        "maximum": 9007199254740991
                      },
                      "since": {
                        "type": "string",
                        "format": "date",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                        "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                      },
                      "status": {
                        "type": "string",
                        "enum": [
                          "in_progress",
                          "completed"
                        ],
                        "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                      },
                      "created_at": {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      "short_code": {
                        "type": "string",
                        "minLength": 1
                      },
                      "url": {
                        "type": "string",
                        "format": "uri"
                      },
                      "current_value": {
                        "type": "number",
                        "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                      },
                      "boundary_value": {
                        "type": "number"
                      },
                      "progress_pct": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "boundary_progress_pct": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "movement": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "movement_pp": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "evidence_count": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      },
                      "last_recorded_at": {
                        "anyOf": [
                          {
                            "type": "string",
                            "format": "date-time",
                            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "habit_expected_since_boundary": {
                        "anyOf": [
                          {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "habit_logs_since_boundary": {
                        "anyOf": [
                          {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "performance_share": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "required": [
                      "id",
                      "objective_id",
                      "title",
                      "description",
                      "metric_type",
                      "start_value",
                      "target_value",
                      "unit",
                      "cadence",
                      "per",
                      "since",
                      "status",
                      "created_at",
                      "short_code",
                      "url",
                      "current_value",
                      "boundary_value",
                      "progress_pct",
                      "boundary_progress_pct",
                      "movement",
                      "movement_pp",
                      "evidence_count",
                      "last_recorded_at",
                      "habit_expected_since_boundary",
                      "habit_logs_since_boundary",
                      "performance_share"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      "objective_id": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      "title": {
                        "type": "string"
                      },
                      "description": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "metric_type": {
                        "type": "string",
                        "const": "performance"
                      },
                      "start_value": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "UI label: Start. Metric baseline; habit baselines are derived rather than stored."
                      },
                      "target_value": {
                        "type": "number"
                      },
                      "unit": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "UI label: Unit. Used by Number and Performance results."
                      },
                      "cadence": {
                        "type": "null"
                      },
                      "per": {
                        "type": "null"
                      },
                      "since": {
                        "type": "string",
                        "format": "date",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                        "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                      },
                      "status": {
                        "type": "string",
                        "enum": [
                          "in_progress",
                          "completed"
                        ],
                        "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                      },
                      "created_at": {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      "short_code": {
                        "type": "string",
                        "minLength": 1
                      },
                      "url": {
                        "type": "string",
                        "format": "uri"
                      },
                      "current_value": {
                        "type": "number",
                        "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                      },
                      "boundary_value": {
                        "type": "number"
                      },
                      "progress_pct": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "boundary_progress_pct": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "movement": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "movement_pp": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "evidence_count": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      },
                      "last_recorded_at": {
                        "anyOf": [
                          {
                            "type": "string",
                            "format": "date-time",
                            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "habit_expected_since_boundary": {
                        "anyOf": [
                          {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "habit_logs_since_boundary": {
                        "anyOf": [
                          {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "performance_share": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "required": [
                      "id",
                      "objective_id",
                      "title",
                      "description",
                      "metric_type",
                      "start_value",
                      "target_value",
                      "unit",
                      "cadence",
                      "per",
                      "since",
                      "status",
                      "created_at",
                      "short_code",
                      "url",
                      "current_value",
                      "boundary_value",
                      "progress_pct",
                      "boundary_progress_pct",
                      "movement",
                      "movement_pp",
                      "evidence_count",
                      "last_recorded_at",
                      "habit_expected_since_boundary",
                      "habit_logs_since_boundary",
                      "performance_share"
                    ],
                    "additionalProperties": false
                  }
                ]
              }
            },
            "next_cursor": {
              "anyOf": [
                {
                  "type": "string",
                  "minLength": 1
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "items",
            "next_cursor"
          ],
          "additionalProperties": false
        },
        "actions": {
          "type": "object",
          "properties": {
            "items": {
              "maxItems": 50,
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "cycle_id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "objective_id": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "title": {
                    "type": "string"
                  },
                  "description": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "due_at": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                        "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "UI label: Due. May be unset on a web draft; a set date cannot be cleared."
                  },
                  "status": {
                    "type": "string",
                    "enum": [
                      "open",
                      "in_progress",
                      "done"
                    ],
                    "description": "Action status: Open, In progress or Done. The To do UI group includes Open and In progress; Overdue is derived, not a status."
                  },
                  "sort_order": {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "Drag order within an action group; not a progress status."
                  },
                  "session_id": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "created_at": {
                    "type": "string",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                  },
                  "url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "overdue": {
                    "type": "boolean"
                  },
                  "done_since_boundary": {
                    "type": "boolean"
                  }
                },
                "required": [
                  "id",
                  "cycle_id",
                  "objective_id",
                  "title",
                  "description",
                  "due_at",
                  "status",
                  "sort_order",
                  "session_id",
                  "created_at",
                  "url",
                  "overdue",
                  "done_since_boundary"
                ],
                "additionalProperties": false
              }
            },
            "next_cursor": {
              "anyOf": [
                {
                  "type": "string",
                  "minLength": 1
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "items",
            "next_cursor"
          ],
          "additionalProperties": false
        },
        "continuations": {
          "type": "object",
          "propertyNames": {
            "type": "string",
            "enum": [
              "cycles",
              "objectives",
              "results",
              "actions",
              "notes",
              "sessions",
              "result_logs",
              "habit_logs",
              "action_logs",
              "trend"
            ]
          },
          "additionalProperties": {
            "type": "string",
            "minLength": 1
          }
        }
      },
      "required": [
        "objective",
        "cycle",
        "results",
        "actions",
        "continuations"
      ],
      "additionalProperties": false
    },
    "changed": {
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "entity": {
            "type": "string",
            "enum": [
              "user",
              "cycle",
              "objective",
              "result",
              "result_log",
              "action",
              "action_log",
              "session",
              "note",
              "habit_log"
            ]
          },
          "id": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
            "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
          }
        },
        "required": [
          "entity",
          "id"
        ],
        "additionalProperties": false
      }
    },
    "continuations": {
      "type": "object",
      "propertyNames": {
        "type": "string",
        "enum": [
          "cycles",
          "objectives",
          "results",
          "actions",
          "notes",
          "sessions",
          "result_logs",
          "habit_logs",
          "action_logs",
          "trend"
        ]
      },
      "additionalProperties": {
        "type": "string",
        "minLength": 1
      }
    }
  },
  "required": [
    "record",
    "changed",
    "continuations"
  ],
  "additionalProperties": false
}
Public MCP input/output shapes for comparison
[
  {
    "tool": "objective_write",
    "collection": "objectives",
    "specification": "docs/feature-specs/F3-objectives.md#mcp-source-mapping--selected-target",
    "operation": "update",
    "binding": "planned",
    "mode": "adapted",
    "readiness": "contract-only",
    "services": [
      "objectives.update"
    ],
    "gap": null,
    "projection": "Project record.objective and changed on writes; list uses resolved cycle_id for continuations; get returns objective only.",
    "input": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "oneOf": [
        {
          "type": "object",
          "properties": {
            "title": {
              "type": "string",
              "minLength": 1
            },
            "description": {
              "type": "string"
            },
            "deadline_at": {
              "description": "UI label: Deadline. Optional; omitted or null creates the objective with no deadline.",
              "anyOf": [
                {
                  "type": "string",
                  "format": "date",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                  "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                },
                {
                  "type": "null"
                }
              ]
            },
            "operation": {
              "type": "string",
              "const": "create"
            }
          },
          "required": [
            "title",
            "description",
            "operation"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "title": {
              "type": "string",
              "minLength": 1
            },
            "description": {
              "type": "string"
            },
            "deadline_at": {
              "description": "UI label: Deadline. Omit to preserve; a date sets or replaces it. A deadline cannot be cleared, so null is rejected.",
              "type": "string",
              "format": "date",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
            },
            "status": {
              "type": "string",
              "enum": [
                "on_track",
                "off_track",
                "completed"
              ],
              "description": "Objective status: On track, Off track or Completed. Coaching judgment, independent of the derived Progress percentage."
            },
            "operation": {
              "type": "string",
              "const": "update"
            }
          },
          "required": [
            "id",
            "operation"
          ],
          "additionalProperties": false
        }
      ]
    },
    "output": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "objective": {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "cycle_id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "title": {
              "type": "string"
            },
            "description": {
              "type": "string"
            },
            "deadline_at": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                  "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                },
                {
                  "type": "null"
                }
              ],
              "description": "UI label: Deadline; null when no deadline has been set."
            },
            "status": {
              "type": "string",
              "enum": [
                "on_track",
                "off_track",
                "completed"
              ],
              "description": "Objective status: On track, Off track or Completed. Coaching judgment, independent of the derived Progress percentage."
            },
            "created_at": {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
            },
            "short_code": {
              "type": "string",
              "minLength": 1
            },
            "url": {
              "type": "string",
              "format": "uri"
            },
            "progress_pct": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "null"
                }
              ],
              "description": "UI label: Progress. Derived from measurable results, independently of Status."
            },
            "boundary_progress_pct": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Historical progress at the resolved last-session boundary; not current Progress."
            },
            "movement_pp": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "id",
            "cycle_id",
            "title",
            "description",
            "deadline_at",
            "status",
            "created_at",
            "short_code",
            "url",
            "progress_pct",
            "boundary_progress_pct",
            "movement_pp"
          ],
          "additionalProperties": false
        },
        "changed": {
          "maxItems": 100,
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "entity": {
                "type": "string",
                "enum": [
                  "user",
                  "cycle",
                  "objective",
                  "result",
                  "result_log",
                  "action",
                  "action_log",
                  "session",
                  "note",
                  "habit_log"
                ]
              },
              "id": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
              }
            },
            "required": [
              "entity",
              "id"
            ],
            "additionalProperties": false
          }
        }
      },
      "required": [
        "objective",
        "changed"
      ],
      "additionalProperties": false
    }
  }
]
objectives.delete · delete · contract-only

Feature declaration: deleteObjective

Requirement: docs/feature-specs/F3-objectives.md · Access: entitled-write

Tables: objectives (delete)

Trusted context: authenticated actor

Retry: Inspect state after uncertain outcomes; never infer rollback from a response failure.

Expected errors: UNAUTHORIZED, BAD_REQUEST, FORBIDDEN, NOT_FOUND, CONFLICT, NOT_IMPLEMENTED, INTERNAL_SERVER_ERROR

API consumers

[
  {
    "operation": "objectives.delete",
    "service": "objectives.delete",
    "binding": "bound"
  }
]

MCP consumers

[
  {
    "tool": "objective_delete",
    "collection": "objectives",
    "specification": "docs/feature-specs/F3-objectives.md#mcp-source-mapping--selected-target",
    "operation": "commit",
    "binding": "planned",
    "mode": "adapted",
    "readiness": "contract-only",
    "services": [
      "objectives.delete"
    ],
    "gap": null,
    "projection": "Project record.objective and changed on writes; list uses resolved cycle_id for continuations; get returns objective only."
  }
]

Service input

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
    },
    "preview_id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "Server impact preview ID; trusted application approval must already exist."
    }
  },
  "required": [
    "id",
    "preview_id"
  ],
  "additionalProperties": false
}

Service output

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}
Public MCP input/output shapes for comparison
[
  {
    "tool": "objective_delete",
    "collection": "objectives",
    "specification": "docs/feature-specs/F3-objectives.md#mcp-source-mapping--selected-target",
    "operation": "commit",
    "binding": "planned",
    "mode": "adapted",
    "readiness": "contract-only",
    "services": [
      "objectives.delete"
    ],
    "gap": null,
    "projection": "Project record.objective and changed on writes; list uses resolved cycle_id for continuations; get returns objective only.",
    "input": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "oneOf": [
        {
          "type": "object",
          "properties": {
            "operation": {
              "type": "string",
              "const": "preview"
            },
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Exact owned record UUID. Resolve ambiguous targets before requesting impact."
            }
          },
          "required": [
            "operation",
            "id"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "operation": {
              "type": "string",
              "const": "commit"
            },
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "preview_id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Server preview ID for this target. Not consent: genuine approval must already be recorded by the trusted application."
            }
          },
          "required": [
            "operation",
            "id",
            "preview_id"
          ],
          "additionalProperties": false
        }
      ]
    },
    "output": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "oneOf": [
        {
          "type": "object",
          "properties": {
            "operation": {
              "type": "string",
              "const": "preview"
            },
            "preview_id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "expires_at": {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
            },
            "target": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "title": {
                  "type": "string"
                }
              },
              "required": [
                "id",
                "title"
              ],
              "additionalProperties": false
            },
            "deleted": {
              "type": "object",
              "properties": {
                "objectives": {
                  "type": "number",
                  "const": 1
                },
                "results": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "result_logs": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "habit_logs": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "actions": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "action_logs": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                }
              },
              "required": [
                "objectives",
                "results",
                "result_logs",
                "habit_logs",
                "actions",
                "action_logs"
              ],
              "additionalProperties": false
            },
            "approval": {
              "type": "object",
              "properties": {
                "status": {
                  "type": "string",
                  "const": "required"
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                }
              },
              "required": [
                "status",
                "url"
              ],
              "additionalProperties": false
            }
          },
          "required": [
            "operation",
            "preview_id",
            "expires_at",
            "target",
            "deleted",
            "approval"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "operation": {
              "type": "string",
              "const": "commit"
            },
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            }
          },
          "required": [
            "operation",
            "id"
          ],
          "additionalProperties": false
        }
      ]
    }
  }
]
results.history · read · contract-only

Feature declaration: readResultHistory

Requirement: docs/feature-specs/F4-results.md · Access: retained-read

Tables: results (read), result_logs (read), habit_logs (read)

Trusted context: authenticated actor

Retry: Safe to retry with the same resolved filters and cursor.

Expected errors: UNAUTHORIZED, BAD_REQUEST, FORBIDDEN, NOT_FOUND, CONFLICT, NOT_IMPLEMENTED, INTERNAL_SERVER_ERROR

API consumers

[]

MCP consumers

[
  {
    "tool": "result_read",
    "collection": "results",
    "specification": "docs/feature-specs/F4-results.md#mcp-source-mapping--selected-target",
    "operation": "history",
    "binding": "planned",
    "mode": "adapted",
    "readiness": "contract-only",
    "services": [
      "results.history"
    ],
    "gap": null,
    "projection": "Project record.result and changed on writes; history preserves its resolved window, kind and cursor; list preserves parent/attention filters."
  }
]

Service input

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "cursor": {
      "type": "string",
      "minLength": 1
    },
    "limit": {
      "default": 20,
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "result_id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
    },
    "kind": {
      "type": "string",
      "enum": [
        "result_logs",
        "habit_logs",
        "trend"
      ],
      "description": "Evidence stream to page; get returns current figures regardless of this window."
    },
    "window": {
      "type": "object",
      "properties": {
        "since": {
          "description": "Inclusive lower bound. Default: last completed session, falling back to active-cycle start. Date-only values use the profile timezone.",
          "anyOf": [
            {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                  "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                },
                {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                }
              ]
            },
            {
              "type": "string",
              "enum": [
                "last_session",
                "cycle_start"
              ]
            }
          ]
        },
        "until": {
          "description": "Exclusive upper bound; default is the server time captured on the first page.",
          "anyOf": [
            {
              "type": "string",
              "format": "date",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
              "description": "Calendar date as YYYY-MM-DD in the profile timezone."
            },
            {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
            }
          ]
        }
      },
      "additionalProperties": false
    }
  },
  "required": [
    "result_id",
    "kind"
  ],
  "additionalProperties": false
}

Service output

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "oneOf": [
    {
      "type": "object",
      "properties": {
        "items": {
          "maxItems": 100,
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
              },
              "result_id": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
              },
              "value": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "comment": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "session_id": {
                "anyOf": [
                  {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "recorded_at": {
                "type": "string",
                "format": "date-time",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
              }
            },
            "required": [
              "id",
              "result_id",
              "value",
              "comment",
              "session_id",
              "recorded_at"
            ],
            "additionalProperties": false,
            "description": "Result log stored in result_logs. The UI shows value entries under Updates and their non-empty comments under Comments. Value may be null for a comment-only habit entry; evidence and timestamps are immutable."
          }
        },
        "next_cursor": {
          "anyOf": [
            {
              "type": "string",
              "minLength": 1
            },
            {
              "type": "null"
            }
          ]
        },
        "kind": {
          "type": "string",
          "const": "result_logs"
        },
        "result_id": {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
        },
        "window": {
          "type": "object",
          "properties": {
            "since": {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
            },
            "until": {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
            }
          },
          "required": [
            "since",
            "until"
          ],
          "additionalProperties": false
        }
      },
      "required": [
        "items",
        "next_cursor",
        "kind",
        "result_id",
        "window"
      ],
      "additionalProperties": false
    },
    {
      "type": "object",
      "properties": {
        "items": {
          "maxItems": 100,
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
              },
              "result_id": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
              },
              "day": {
                "type": "string",
                "format": "date",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                "description": "Calendar date as YYYY-MM-DD in the profile timezone."
              },
              "session_id": {
                "anyOf": [
                  {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "created_at": {
                "type": "string",
                "format": "date-time",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
              }
            },
            "required": [
              "id",
              "result_id",
              "day",
              "session_id",
              "created_at"
            ],
            "additionalProperties": false,
            "description": "Habit log stored in habit_logs. The UI marks calendar days and lists them under Updates with the Marked column. One row per result/day; unmarking deletes the row. This is not append-only history."
          }
        },
        "next_cursor": {
          "anyOf": [
            {
              "type": "string",
              "minLength": 1
            },
            {
              "type": "null"
            }
          ]
        },
        "kind": {
          "type": "string",
          "const": "habit_logs"
        },
        "result_id": {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
        },
        "window": {
          "type": "object",
          "properties": {
            "since": {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
            },
            "until": {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
            }
          },
          "required": [
            "since",
            "until"
          ],
          "additionalProperties": false
        }
      },
      "required": [
        "items",
        "next_cursor",
        "kind",
        "result_id",
        "window"
      ],
      "additionalProperties": false
    },
    {
      "type": "object",
      "properties": {
        "items": {
          "maxItems": 100,
          "type": "array",
          "items": {
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "kind": {
                    "type": "string",
                    "const": "value"
                  },
                  "at": {
                    "type": "string",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                  },
                  "value": {
                    "type": "number"
                  },
                  "pace": {
                    "type": "number"
                  }
                },
                "required": [
                  "kind",
                  "at",
                  "value",
                  "pace"
                ],
                "additionalProperties": false
              },
              {
                "type": "object",
                "properties": {
                  "kind": {
                    "type": "string",
                    "const": "habit"
                  },
                  "from": {
                    "type": "string",
                    "format": "date",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                    "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                  },
                  "to": {
                    "type": "string",
                    "format": "date",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                    "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                  },
                  "actual": {
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991
                  },
                  "expected": {
                    "type": "number"
                  },
                  "expected_full": {
                    "type": "number"
                  }
                },
                "required": [
                  "kind",
                  "from",
                  "to",
                  "actual",
                  "expected",
                  "expected_full"
                ],
                "additionalProperties": false
              },
              {
                "type": "object",
                "properties": {
                  "kind": {
                    "type": "string",
                    "const": "performance"
                  },
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "at": {
                    "type": "string",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                  },
                  "value": {
                    "type": "number"
                  },
                  "target": {
                    "type": "number"
                  },
                  "gap": {
                    "type": "number"
                  },
                  "share": {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                },
                "required": [
                  "kind",
                  "id",
                  "at",
                  "value",
                  "target",
                  "gap",
                  "share"
                ],
                "additionalProperties": false
              }
            ]
          }
        },
        "next_cursor": {
          "anyOf": [
            {
              "type": "string",
              "minLength": 1
            },
            {
              "type": "null"
            }
          ]
        },
        "kind": {
          "type": "string",
          "const": "trend"
        },
        "result_id": {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
        },
        "window": {
          "type": "object",
          "properties": {
            "since": {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
            },
            "until": {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
            }
          },
          "required": [
            "since",
            "until"
          ],
          "additionalProperties": false
        }
      },
      "required": [
        "items",
        "next_cursor",
        "kind",
        "result_id",
        "window"
      ],
      "additionalProperties": false
    }
  ]
}
Public MCP input/output shapes for comparison
[
  {
    "tool": "result_read",
    "collection": "results",
    "specification": "docs/feature-specs/F4-results.md#mcp-source-mapping--selected-target",
    "operation": "history",
    "binding": "planned",
    "mode": "adapted",
    "readiness": "contract-only",
    "services": [
      "results.history"
    ],
    "gap": null,
    "projection": "Project record.result and changed on writes; history preserves its resolved window, kind and cursor; list preserves parent/attention filters.",
    "input": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "oneOf": [
        {
          "type": "object",
          "properties": {
            "cursor": {
              "type": "string",
              "minLength": 1
            },
            "limit": {
              "default": 20,
              "type": "integer",
              "minimum": 1,
              "maximum": 100
            },
            "objective_id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "cycle_id": {
              "description": "List results across one cycle instead of a single objective. Supply exactly one parent selector.",
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
            },
            "attention": {
              "description": "Optional briefing subset: no evidence ever, no update in the window, or habit with no mark in the window.",
              "type": "string",
              "enum": [
                "never_updated",
                "silent",
                "unmarked"
              ]
            },
            "window": {
              "description": "Required for silent/unmarked attention. Use exact server-resolved briefing bounds; current result figures remain current.",
              "type": "object",
              "properties": {
                "since": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "until": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                }
              },
              "required": [
                "since",
                "until"
              ],
              "additionalProperties": false
            },
            "operation": {
              "type": "string",
              "const": "list"
            }
          },
          "required": [
            "operation"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "operation": {
              "type": "string",
              "const": "get"
            }
          },
          "required": [
            "id",
            "operation"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "cursor": {
              "type": "string",
              "minLength": 1
            },
            "limit": {
              "default": 20,
              "type": "integer",
              "minimum": 1,
              "maximum": 100
            },
            "result_id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "operation": {
              "type": "string",
              "const": "history"
            },
            "kind": {
              "type": "string",
              "enum": [
                "result_logs",
                "habit_logs",
                "trend"
              ],
              "description": "Evidence stream to page; get returns current figures regardless of this window."
            },
            "window": {
              "type": "object",
              "properties": {
                "since": {
                  "description": "Inclusive lower bound. Default: last completed session, falling back to active-cycle start. Date-only values use the profile timezone.",
                  "anyOf": [
                    {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "date",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                          "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                        },
                        {
                          "type": "string",
                          "format": "date-time",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                        }
                      ]
                    },
                    {
                      "type": "string",
                      "enum": [
                        "last_session",
                        "cycle_start"
                      ]
                    }
                  ]
                },
                "until": {
                  "description": "Exclusive upper bound; default is the server time captured on the first page.",
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                      "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                    },
                    {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    }
                  ]
                }
              },
              "additionalProperties": false
            }
          },
          "required": [
            "result_id",
            "operation",
            "kind"
          ],
          "additionalProperties": false
        }
      ]
    },
    "output": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "items": {
              "maxItems": 100,
              "type": "array",
              "items": {
                "oneOf": [
                  {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      "objective_id": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      "title": {
                        "type": "string"
                      },
                      "description": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "metric_type": {
                        "type": "string",
                        "const": "number"
                      },
                      "start_value": {
                        "type": "number"
                      },
                      "target_value": {
                        "type": "number"
                      },
                      "unit": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "UI label: Unit. Used by Number and Performance results."
                      },
                      "cadence": {
                        "type": "null"
                      },
                      "per": {
                        "type": "null"
                      },
                      "since": {
                        "type": "null"
                      },
                      "status": {
                        "type": "string",
                        "enum": [
                          "in_progress",
                          "completed"
                        ],
                        "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                      },
                      "created_at": {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      "short_code": {
                        "type": "string",
                        "minLength": 1
                      },
                      "url": {
                        "type": "string",
                        "format": "uri"
                      },
                      "current_value": {
                        "type": "number",
                        "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                      },
                      "boundary_value": {
                        "type": "number"
                      },
                      "progress_pct": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "boundary_progress_pct": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "movement": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "movement_pp": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "evidence_count": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      },
                      "last_recorded_at": {
                        "anyOf": [
                          {
                            "type": "string",
                            "format": "date-time",
                            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "habit_expected_since_boundary": {
                        "anyOf": [
                          {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "habit_logs_since_boundary": {
                        "anyOf": [
                          {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "performance_share": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "required": [
                      "id",
                      "objective_id",
                      "title",
                      "description",
                      "metric_type",
                      "start_value",
                      "target_value",
                      "unit",
                      "cadence",
                      "per",
                      "since",
                      "status",
                      "created_at",
                      "short_code",
                      "url",
                      "current_value",
                      "boundary_value",
                      "progress_pct",
                      "boundary_progress_pct",
                      "movement",
                      "movement_pp",
                      "evidence_count",
                      "last_recorded_at",
                      "habit_expected_since_boundary",
                      "habit_logs_since_boundary",
                      "performance_share"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      "objective_id": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      "title": {
                        "type": "string"
                      },
                      "description": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "metric_type": {
                        "type": "string",
                        "const": "percentage"
                      },
                      "start_value": {
                        "type": "number",
                        "minimum": 0,
                        "maximum": 100
                      },
                      "target_value": {
                        "type": "number",
                        "minimum": 0,
                        "maximum": 100
                      },
                      "unit": {
                        "type": "null"
                      },
                      "cadence": {
                        "type": "null"
                      },
                      "per": {
                        "type": "null"
                      },
                      "since": {
                        "type": "null"
                      },
                      "status": {
                        "type": "string",
                        "enum": [
                          "in_progress",
                          "completed"
                        ],
                        "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                      },
                      "created_at": {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      "short_code": {
                        "type": "string",
                        "minLength": 1
                      },
                      "url": {
                        "type": "string",
                        "format": "uri"
                      },
                      "current_value": {
                        "type": "number",
                        "minimum": 0,
                        "maximum": 100
                      },
                      "boundary_value": {
                        "type": "number",
                        "minimum": 0,
                        "maximum": 100
                      },
                      "progress_pct": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "boundary_progress_pct": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "movement": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "movement_pp": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "evidence_count": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      },
                      "last_recorded_at": {
                        "anyOf": [
                          {
                            "type": "string",
                            "format": "date-time",
                            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "habit_expected_since_boundary": {
                        "anyOf": [
                          {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "habit_logs_since_boundary": {
                        "anyOf": [
                          {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "performance_share": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "required": [
                      "id",
                      "objective_id",
                      "title",
                      "description",
                      "metric_type",
                      "start_value",
                      "target_value",
                      "unit",
                      "cadence",
                      "per",
                      "since",
                      "status",
                      "created_at",
                      "short_code",
                      "url",
                      "current_value",
                      "boundary_value",
                      "progress_pct",
                      "boundary_progress_pct",
                      "movement",
                      "movement_pp",
                      "evidence_count",
                      "last_recorded_at",
                      "habit_expected_since_boundary",
                      "habit_logs_since_boundary",
                      "performance_share"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      "objective_id": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      "title": {
                        "type": "string"
                      },
                      "description": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "metric_type": {
                        "type": "string",
                        "const": "milestone"
                      },
                      "start_value": {
                        "type": "number",
                        "const": 0
                      },
                      "target_value": {
                        "type": "number",
                        "const": 1
                      },
                      "unit": {
                        "type": "null"
                      },
                      "cadence": {
                        "type": "null"
                      },
                      "per": {
                        "type": "null"
                      },
                      "since": {
                        "type": "null"
                      },
                      "status": {
                        "type": "string",
                        "enum": [
                          "in_progress",
                          "completed"
                        ],
                        "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                      },
                      "created_at": {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      "short_code": {
                        "type": "string",
                        "minLength": 1
                      },
                      "url": {
                        "type": "string",
                        "format": "uri"
                      },
                      "current_value": {
                        "anyOf": [
                          {
                            "type": "number",
                            "const": 0
                          },
                          {
                            "type": "number",
                            "const": 1
                          }
                        ]
                      },
                      "boundary_value": {
                        "anyOf": [
                          {
                            "type": "number",
                            "const": 0
                          },
                          {
                            "type": "number",
                            "const": 1
                          }
                        ]
                      },
                      "progress_pct": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "boundary_progress_pct": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "movement": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "movement_pp": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "evidence_count": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      },
                      "last_recorded_at": {
                        "anyOf": [
                          {
                            "type": "string",
                            "format": "date-time",
                            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "habit_expected_since_boundary": {
                        "anyOf": [
                          {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "habit_logs_since_boundary": {
                        "anyOf": [
                          {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "performance_share": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "required": [
                      "id",
                      "objective_id",
                      "title",
                      "description",
                      "metric_type",
                      "start_value",
                      "target_value",
                      "unit",
                      "cadence",
                      "per",
                      "since",
                      "status",
                      "created_at",
                      "short_code",
                      "url",
                      "current_value",
                      "boundary_value",
                      "progress_pct",
                      "boundary_progress_pct",
                      "movement",
                      "movement_pp",
                      "evidence_count",
                      "last_recorded_at",
                      "habit_expected_since_boundary",
                      "habit_logs_since_boundary",
                      "performance_share"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      "objective_id": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      "title": {
                        "type": "string"
                      },
                      "description": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "metric_type": {
                        "type": "string",
                        "const": "habit"
                      },
                      "start_value": {
                        "type": "number",
                        "const": 0
                      },
                      "target_value": {
                        "type": "number",
                        "const": 100
                      },
                      "unit": {
                        "type": "null"
                      },
                      "cadence": {
                        "type": "string",
                        "enum": [
                          "weekly",
                          "monthly"
                        ],
                        "description": "UI label: Cadence. Weekly or Monthly; per supplies the Times value."
                      },
                      "per": {
                        "type": "integer",
                        "exclusiveMinimum": 0,
                        "maximum": 9007199254740991
                      },
                      "since": {
                        "type": "string",
                        "format": "date",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                        "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                      },
                      "status": {
                        "type": "string",
                        "enum": [
                          "in_progress",
                          "completed"
                        ],
                        "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                      },
                      "created_at": {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      "short_code": {
                        "type": "string",
                        "minLength": 1
                      },
                      "url": {
                        "type": "string",
                        "format": "uri"
                      },
                      "current_value": {
                        "type": "number",
                        "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                      },
                      "boundary_value": {
                        "type": "number"
                      },
                      "progress_pct": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "boundary_progress_pct": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "movement": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "movement_pp": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "evidence_count": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      },
                      "last_recorded_at": {
                        "anyOf": [
                          {
                            "type": "string",
                            "format": "date-time",
                            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "habit_expected_since_boundary": {
                        "anyOf": [
                          {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "habit_logs_since_boundary": {
                        "anyOf": [
                          {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "performance_share": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "required": [
                      "id",
                      "objective_id",
                      "title",
                      "description",
                      "metric_type",
                      "start_value",
                      "target_value",
                      "unit",
                      "cadence",
                      "per",
                      "since",
                      "status",
                      "created_at",
                      "short_code",
                      "url",
                      "current_value",
                      "boundary_value",
                      "progress_pct",
                      "boundary_progress_pct",
                      "movement",
                      "movement_pp",
                      "evidence_count",
                      "last_recorded_at",
                      "habit_expected_since_boundary",
                      "habit_logs_since_boundary",
                      "performance_share"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      "objective_id": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      "title": {
                        "type": "string"
                      },
                      "description": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "metric_type": {
                        "type": "string",
                        "const": "performance"
                      },
                      "start_value": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "UI label: Start. Metric baseline; habit baselines are derived rather than stored."
                      },
                      "target_value": {
                        "type": "number"
                      },
                      "unit": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "UI label: Unit. Used by Number and Performance results."
                      },
                      "cadence": {
                        "type": "null"
                      },
                      "per": {
                        "type": "null"
                      },
                      "since": {
                        "type": "string",
                        "format": "date",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                        "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                      },
                      "status": {
                        "type": "string",
                        "enum": [
                          "in_progress",
                          "completed"
                        ],
                        "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                      },
                      "created_at": {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      "short_code": {
                        "type": "string",
                        "minLength": 1
                      },
                      "url": {
                        "type": "string",
                        "format": "uri"
                      },
                      "current_value": {
                        "type": "number",
                        "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                      },
                      "boundary_value": {
                        "type": "number"
                      },
                      "progress_pct": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "boundary_progress_pct": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "movement": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "movement_pp": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "evidence_count": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      },
                      "last_recorded_at": {
                        "anyOf": [
                          {
                            "type": "string",
                            "format": "date-time",
                            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "habit_expected_since_boundary": {
                        "anyOf": [
                          {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "habit_logs_since_boundary": {
                        "anyOf": [
                          {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "performance_share": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "required": [
                      "id",
                      "objective_id",
                      "title",
                      "description",
                      "metric_type",
                      "start_value",
                      "target_value",
                      "unit",
                      "cadence",
                      "per",
                      "since",
                      "status",
                      "created_at",
                      "short_code",
                      "url",
                      "current_value",
                      "boundary_value",
                      "progress_pct",
                      "boundary_progress_pct",
                      "movement",
                      "movement_pp",
                      "evidence_count",
                      "last_recorded_at",
                      "habit_expected_since_boundary",
                      "habit_logs_since_boundary",
                      "performance_share"
                    ],
                    "additionalProperties": false
                  }
                ]
              }
            },
            "next_cursor": {
              "anyOf": [
                {
                  "type": "string",
                  "minLength": 1
                },
                {
                  "type": "null"
                }
              ]
            },
            "continuation": {
              "anyOf": [
                {
                  "type": "object",
                  "properties": {
                    "tool": {
                      "type": "string",
                      "const": "result_read"
                    },
                    "arguments": {
                      "type": "object",
                      "properties": {
                        "cursor": {
                          "type": "string",
                          "minLength": 1
                        },
                        "limit": {
                          "type": "integer",
                          "minimum": 1,
                          "maximum": 100
                        },
                        "objective_id": {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                        },
                        "cycle_id": {
                          "description": "List results across one cycle instead of a single objective. Supply exactly one parent selector.",
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                        },
                        "attention": {
                          "description": "Optional briefing subset: no evidence ever, no update in the window, or habit with no mark in the window.",
                          "type": "string",
                          "enum": [
                            "never_updated",
                            "silent",
                            "unmarked"
                          ]
                        },
                        "window": {
                          "description": "Required for silent/unmarked attention. Use exact server-resolved briefing bounds; current result figures remain current.",
                          "type": "object",
                          "properties": {
                            "since": {
                              "type": "string",
                              "format": "date-time",
                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                            },
                            "until": {
                              "type": "string",
                              "format": "date-time",
                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                            }
                          },
                          "required": [
                            "since",
                            "until"
                          ],
                          "additionalProperties": false
                        },
                        "operation": {
                          "type": "string",
                          "const": "list"
                        }
                      },
                      "required": [
                        "cursor",
                        "limit",
                        "operation"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "required": [
                    "tool",
                    "arguments"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "null"
                }
              ]
            },
            "operation": {
              "type": "string",
              "const": "list"
            }
          },
          "required": [
            "items",
            "next_cursor",
            "continuation",
            "operation"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "operation": {
              "type": "string",
              "const": "get"
            },
            "result": {
              "oneOf": [
                {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    "objective_id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    "title": {
                      "type": "string"
                    },
                    "description": {
                      "anyOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "metric_type": {
                      "type": "string",
                      "const": "number"
                    },
                    "start_value": {
                      "type": "number"
                    },
                    "target_value": {
                      "type": "number"
                    },
                    "unit": {
                      "anyOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "null"
                        }
                      ],
                      "description": "UI label: Unit. Used by Number and Performance results."
                    },
                    "cadence": {
                      "type": "null"
                    },
                    "per": {
                      "type": "null"
                    },
                    "since": {
                      "type": "null"
                    },
                    "status": {
                      "type": "string",
                      "enum": [
                        "in_progress",
                        "completed"
                      ],
                      "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                    },
                    "created_at": {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    "short_code": {
                      "type": "string",
                      "minLength": 1
                    },
                    "url": {
                      "type": "string",
                      "format": "uri"
                    },
                    "current_value": {
                      "type": "number",
                      "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                    },
                    "boundary_value": {
                      "type": "number"
                    },
                    "progress_pct": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "boundary_progress_pct": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "movement": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "movement_pp": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "evidence_count": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    "last_recorded_at": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "date-time",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "habit_expected_since_boundary": {
                      "anyOf": [
                        {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "habit_logs_since_boundary": {
                      "anyOf": [
                        {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "performance_share": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "id",
                    "objective_id",
                    "title",
                    "description",
                    "metric_type",
                    "start_value",
                    "target_value",
                    "unit",
                    "cadence",
                    "per",
                    "since",
                    "status",
                    "created_at",
                    "short_code",
                    "url",
                    "current_value",
                    "boundary_value",
                    "progress_pct",
                    "boundary_progress_pct",
                    "movement",
                    "movement_pp",
                    "evidence_count",
                    "last_recorded_at",
                    "habit_expected_since_boundary",
                    "habit_logs_since_boundary",
                    "performance_share"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    "objective_id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    "title": {
                      "type": "string"
                    },
                    "description": {
                      "anyOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "metric_type": {
                      "type": "string",
                      "const": "percentage"
                    },
                    "start_value": {
                      "type": "number",
                      "minimum": 0,
                      "maximum": 100
                    },
                    "target_value": {
                      "type": "number",
                      "minimum": 0,
                      "maximum": 100
                    },
                    "unit": {
                      "type": "null"
                    },
                    "cadence": {
                      "type": "null"
                    },
                    "per": {
                      "type": "null"
                    },
                    "since": {
                      "type": "null"
                    },
                    "status": {
                      "type": "string",
                      "enum": [
                        "in_progress",
                        "completed"
                      ],
                      "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                    },
                    "created_at": {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    "short_code": {
                      "type": "string",
                      "minLength": 1
                    },
                    "url": {
                      "type": "string",
                      "format": "uri"
                    },
                    "current_value": {
                      "type": "number",
                      "minimum": 0,
                      "maximum": 100
                    },
                    "boundary_value": {
                      "type": "number",
                      "minimum": 0,
                      "maximum": 100
                    },
                    "progress_pct": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "boundary_progress_pct": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "movement": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "movement_pp": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "evidence_count": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    "last_recorded_at": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "date-time",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "habit_expected_since_boundary": {
                      "anyOf": [
                        {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "habit_logs_since_boundary": {
                      "anyOf": [
                        {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "performance_share": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "id",
                    "objective_id",
                    "title",
                    "description",
                    "metric_type",
                    "start_value",
                    "target_value",
                    "unit",
                    "cadence",
                    "per",
                    "since",
                    "status",
                    "created_at",
                    "short_code",
                    "url",
                    "current_value",
                    "boundary_value",
                    "progress_pct",
                    "boundary_progress_pct",
                    "movement",
                    "movement_pp",
                    "evidence_count",
                    "last_recorded_at",
                    "habit_expected_since_boundary",
                    "habit_logs_since_boundary",
                    "performance_share"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    "objective_id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    "title": {
                      "type": "string"
                    },
                    "description": {
                      "anyOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "metric_type": {
                      "type": "string",
                      "const": "milestone"
                    },
                    "start_value": {
                      "type": "number",
                      "const": 0
                    },
                    "target_value": {
                      "type": "number",
                      "const": 1
                    },
                    "unit": {
                      "type": "null"
                    },
                    "cadence": {
                      "type": "null"
                    },
                    "per": {
                      "type": "null"
                    },
                    "since": {
                      "type": "null"
                    },
                    "status": {
                      "type": "string",
                      "enum": [
                        "in_progress",
                        "completed"
                      ],
                      "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                    },
                    "created_at": {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    "short_code": {
                      "type": "string",
                      "minLength": 1
                    },
                    "url": {
                      "type": "string",
                      "format": "uri"
                    },
                    "current_value": {
                      "anyOf": [
                        {
                          "type": "number",
                          "const": 0
                        },
                        {
                          "type": "number",
                          "const": 1
                        }
                      ]
                    },
                    "boundary_value": {
                      "anyOf": [
                        {
                          "type": "number",
                          "const": 0
                        },
                        {
                          "type": "number",
                          "const": 1
                        }
                      ]
                    },
                    "progress_pct": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "boundary_progress_pct": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "movement": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "movement_pp": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "evidence_count": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    "last_recorded_at": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "date-time",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "habit_expected_since_boundary": {
                      "anyOf": [
                        {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "habit_logs_since_boundary": {
                      "anyOf": [
                        {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "performance_share": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "id",
                    "objective_id",
                    "title",
                    "description",
                    "metric_type",
                    "start_value",
                    "target_value",
                    "unit",
                    "cadence",
                    "per",
                    "since",
                    "status",
                    "created_at",
                    "short_code",
                    "url",
                    "current_value",
                    "boundary_value",
                    "progress_pct",
                    "boundary_progress_pct",
                    "movement",
                    "movement_pp",
                    "evidence_count",
                    "last_recorded_at",
                    "habit_expected_since_boundary",
                    "habit_logs_since_boundary",
                    "performance_share"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    "objective_id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    "title": {
                      "type": "string"
                    },
                    "description": {
                      "anyOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "metric_type": {
                      "type": "string",
                      "const": "habit"
                    },
                    "start_value": {
                      "type": "number",
                      "const": 0
                    },
                    "target_value": {
                      "type": "number",
                      "const": 100
                    },
                    "unit": {
                      "type": "null"
                    },
                    "cadence": {
                      "type": "string",
                      "enum": [
                        "weekly",
                        "monthly"
                      ],
                      "description": "UI label: Cadence. Weekly or Monthly; per supplies the Times value."
                    },
                    "per": {
                      "type": "integer",
                      "exclusiveMinimum": 0,
                      "maximum": 9007199254740991
                    },
                    "since": {
                      "type": "string",
                      "format": "date",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                      "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                    },
                    "status": {
                      "type": "string",
                      "enum": [
                        "in_progress",
                        "completed"
                      ],
                      "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                    },
                    "created_at": {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    "short_code": {
                      "type": "string",
                      "minLength": 1
                    },
                    "url": {
                      "type": "string",
                      "format": "uri"
                    },
                    "current_value": {
                      "type": "number",
                      "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                    },
                    "boundary_value": {
                      "type": "number"
                    },
                    "progress_pct": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "boundary_progress_pct": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "movement": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "movement_pp": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "evidence_count": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    "last_recorded_at": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "date-time",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "habit_expected_since_boundary": {
                      "anyOf": [
                        {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "habit_logs_since_boundary": {
                      "anyOf": [
                        {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "performance_share": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "id",
                    "objective_id",
                    "title",
                    "description",
                    "metric_type",
                    "start_value",
                    "target_value",
                    "unit",
                    "cadence",
                    "per",
                    "since",
                    "status",
                    "created_at",
                    "short_code",
                    "url",
                    "current_value",
                    "boundary_value",
                    "progress_pct",
                    "boundary_progress_pct",
                    "movement",
                    "movement_pp",
                    "evidence_count",
                    "last_recorded_at",
                    "habit_expected_since_boundary",
                    "habit_logs_since_boundary",
                    "performance_share"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    "objective_id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    "title": {
                      "type": "string"
                    },
                    "description": {
                      "anyOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "metric_type": {
                      "type": "string",
                      "const": "performance"
                    },
                    "start_value": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ],
                      "description": "UI label: Start. Metric baseline; habit baselines are derived rather than stored."
                    },
                    "target_value": {
                      "type": "number"
                    },
                    "unit": {
                      "anyOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "null"
                        }
                      ],
                      "description": "UI label: Unit. Used by Number and Performance results."
                    },
                    "cadence": {
                      "type": "null"
                    },
                    "per": {
                      "type": "null"
                    },
                    "since": {
                      "type": "string",
                      "format": "date",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                      "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                    },
                    "status": {
                      "type": "string",
                      "enum": [
                        "in_progress",
                        "completed"
                      ],
                      "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                    },
                    "created_at": {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    "short_code": {
                      "type": "string",
                      "minLength": 1
                    },
                    "url": {
                      "type": "string",
                      "format": "uri"
                    },
                    "current_value": {
                      "type": "number",
                      "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                    },
                    "boundary_value": {
                      "type": "number"
                    },
                    "progress_pct": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "boundary_progress_pct": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "movement": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "movement_pp": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "evidence_count": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    "last_recorded_at": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "date-time",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "habit_expected_since_boundary": {
                      "anyOf": [
                        {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "habit_logs_since_boundary": {
                      "anyOf": [
                        {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "performance_share": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "id",
                    "objective_id",
                    "title",
                    "description",
                    "metric_type",
                    "start_value",
                    "target_value",
                    "unit",
                    "cadence",
                    "per",
                    "since",
                    "status",
                    "created_at",
                    "short_code",
                    "url",
                    "current_value",
                    "boundary_value",
                    "progress_pct",
                    "boundary_progress_pct",
                    "movement",
                    "movement_pp",
                    "evidence_count",
                    "last_recorded_at",
                    "habit_expected_since_boundary",
                    "habit_logs_since_boundary",
                    "performance_share"
                  ],
                  "additionalProperties": false
                }
              ]
            }
          },
          "required": [
            "operation",
            "result"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "items": {
              "maxItems": 100,
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "result_id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "value": {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "comment": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "session_id": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "recorded_at": {
                    "type": "string",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                  }
                },
                "required": [
                  "id",
                  "result_id",
                  "value",
                  "comment",
                  "session_id",
                  "recorded_at"
                ],
                "additionalProperties": false,
                "description": "Result log stored in result_logs. The UI shows value entries under Updates and their non-empty comments under Comments. Value may be null for a comment-only habit entry; evidence and timestamps are immutable."
              }
            },
            "next_cursor": {
              "anyOf": [
                {
                  "type": "string",
                  "minLength": 1
                },
                {
                  "type": "null"
                }
              ]
            },
            "continuation": {
              "anyOf": [
                {
                  "type": "object",
                  "properties": {
                    "tool": {
                      "type": "string",
                      "const": "result_read"
                    },
                    "arguments": {
                      "type": "object",
                      "properties": {
                        "cursor": {
                          "type": "string",
                          "minLength": 1
                        },
                        "limit": {
                          "type": "integer",
                          "minimum": 1,
                          "maximum": 100
                        },
                        "result_id": {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                        },
                        "operation": {
                          "type": "string",
                          "const": "history"
                        },
                        "kind": {
                          "type": "string",
                          "const": "result_logs"
                        },
                        "window": {
                          "type": "object",
                          "properties": {
                            "since": {
                              "type": "string",
                              "format": "date-time",
                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                            },
                            "until": {
                              "type": "string",
                              "format": "date-time",
                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                            }
                          },
                          "required": [
                            "since",
                            "until"
                          ],
                          "additionalProperties": false
                        }
                      },
                      "required": [
                        "cursor",
                        "limit",
                        "result_id",
                        "operation",
                        "kind",
                        "window"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "required": [
                    "tool",
                    "arguments"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "null"
                }
              ]
            },
            "operation": {
              "type": "string",
              "const": "history"
            },
            "kind": {
              "type": "string",
              "const": "result_logs"
            },
            "result_id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "window": {
              "type": "object",
              "properties": {
                "since": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "until": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                }
              },
              "required": [
                "since",
                "until"
              ],
              "additionalProperties": false
            }
          },
          "required": [
            "items",
            "next_cursor",
            "continuation",
            "operation",
            "kind",
            "result_id",
            "window"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "items": {
              "maxItems": 100,
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "result_id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "day": {
                    "type": "string",
                    "format": "date",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                    "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                  },
                  "session_id": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "created_at": {
                    "type": "string",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                  }
                },
                "required": [
                  "id",
                  "result_id",
                  "day",
                  "session_id",
                  "created_at"
                ],
                "additionalProperties": false,
                "description": "Habit log stored in habit_logs. The UI marks calendar days and lists them under Updates with the Marked column. One row per result/day; unmarking deletes the row. This is not append-only history."
              }
            },
            "next_cursor": {
              "anyOf": [
                {
                  "type": "string",
                  "minLength": 1
                },
                {
                  "type": "null"
                }
              ]
            },
            "continuation": {
              "anyOf": [
                {
                  "type": "object",
                  "properties": {
                    "tool": {
                      "type": "string",
                      "const": "result_read"
                    },
                    "arguments": {
                      "type": "object",
                      "properties": {
                        "cursor": {
                          "type": "string",
                          "minLength": 1
                        },
                        "limit": {
                          "type": "integer",
                          "minimum": 1,
                          "maximum": 100
                        },
                        "result_id": {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                        },
                        "operation": {
                          "type": "string",
                          "const": "history"
                        },
                        "kind": {
                          "type": "string",
                          "const": "habit_logs"
                        },
                        "window": {
                          "type": "object",
                          "properties": {
                            "since": {
                              "type": "string",
                              "format": "date-time",
                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                            },
                            "until": {
                              "type": "string",
                              "format": "date-time",
                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                            }
                          },
                          "required": [
                            "since",
                            "until"
                          ],
                          "additionalProperties": false
                        }
                      },
                      "required": [
                        "cursor",
                        "limit",
                        "result_id",
                        "operation",
                        "kind",
                        "window"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "required": [
                    "tool",
                    "arguments"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "null"
                }
              ]
            },
            "operation": {
              "type": "string",
              "const": "history"
            },
            "kind": {
              "type": "string",
              "const": "habit_logs"
            },
            "result_id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "window": {
              "type": "object",
              "properties": {
                "since": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "until": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                }
              },
              "required": [
                "since",
                "until"
              ],
              "additionalProperties": false
            }
          },
          "required": [
            "items",
            "next_cursor",
            "continuation",
            "operation",
            "kind",
            "result_id",
            "window"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "items": {
              "maxItems": 100,
              "type": "array",
              "items": {
                "oneOf": [
                  {
                    "type": "object",
                    "properties": {
                      "kind": {
                        "type": "string",
                        "const": "value"
                      },
                      "at": {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      "value": {
                        "type": "number"
                      },
                      "pace": {
                        "type": "number"
                      }
                    },
                    "required": [
                      "kind",
                      "at",
                      "value",
                      "pace"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "kind": {
                        "type": "string",
                        "const": "habit"
                      },
                      "from": {
                        "type": "string",
                        "format": "date",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                        "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                      },
                      "to": {
                        "type": "string",
                        "format": "date",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                        "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                      },
                      "actual": {
                        "type": "integer",
                        "minimum": -9007199254740991,
                        "maximum": 9007199254740991
                      },
                      "expected": {
                        "type": "number"
                      },
                      "expected_full": {
                        "type": "number"
                      }
                    },
                    "required": [
                      "kind",
                      "from",
                      "to",
                      "actual",
                      "expected",
                      "expected_full"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "kind": {
                        "type": "string",
                        "const": "performance"
                      },
                      "id": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      "at": {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      "value": {
                        "type": "number"
                      },
                      "target": {
                        "type": "number"
                      },
                      "gap": {
                        "type": "number"
                      },
                      "share": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "required": [
                      "kind",
                      "id",
                      "at",
                      "value",
                      "target",
                      "gap",
                      "share"
                    ],
                    "additionalProperties": false
                  }
                ]
              }
            },
            "next_cursor": {
              "anyOf": [
                {
                  "type": "string",
                  "minLength": 1
                },
                {
                  "type": "null"
                }
              ]
            },
            "continuation": {
              "anyOf": [
                {
                  "type": "object",
                  "properties": {
                    "tool": {
                      "type": "string",
                      "const": "result_read"
                    },
                    "arguments": {
                      "type": "object",
                      "properties": {
                        "cursor": {
                          "type": "string",
                          "minLength": 1
                        },
                        "limit": {
                          "type": "integer",
                          "minimum": 1,
                          "maximum": 100
                        },
                        "result_id": {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                        },
                        "operation": {
                          "type": "string",
                          "const": "history"
                        },
                        "kind": {
                          "type": "string",
                          "const": "trend"
                        },
                        "window": {
                          "type": "object",
                          "properties": {
                            "since": {
                              "type": "string",
                              "format": "date-time",
                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                            },
                            "until": {
                              "type": "string",
                              "format": "date-time",
                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                            }
                          },
                          "required": [
                            "since",
                            "until"
                          ],
                          "additionalProperties": false
                        }
                      },
                      "required": [
                        "cursor",
                        "limit",
                        "result_id",
                        "operation",
                        "kind",
                        "window"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "required": [
                    "tool",
                    "arguments"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "null"
                }
              ]
            },
            "operation": {
              "type": "string",
              "const": "history"
            },
            "kind": {
              "type": "string",
              "const": "trend"
            },
            "result_id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "window": {
              "type": "object",
              "properties": {
                "since": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "until": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                }
              },
              "required": [
                "since",
                "until"
              ],
              "additionalProperties": false
            }
          },
          "required": [
            "items",
            "next_cursor",
            "continuation",
            "operation",
            "kind",
            "result_id",
            "window"
          ],
          "additionalProperties": false
        }
      ]
    }
  }
]
results.preview_deletion · write · contract-only

Feature declaration: previewResultDeletion

Requirement: docs/feature-specs/F4-results.md · Access: entitled-write

Tables: results (read), result_logs (read), habit_logs (read)

Trusted context: authenticated actor

Retry: Preview does not authorize deletion. Commit rechecks actor, target, impact, expiry and application approval; incomplete impact fails closed.

Expected errors: UNAUTHORIZED, BAD_REQUEST, FORBIDDEN, NOT_FOUND, CONFLICT, NOT_IMPLEMENTED, INTERNAL_SERVER_ERROR

API consumers

[
  {
    "operation": "results.preview_deletion",
    "service": "results.preview_deletion",
    "binding": "bound"
  }
]

MCP consumers

[
  {
    "tool": "result_delete",
    "collection": "results",
    "specification": "docs/feature-specs/F4-results.md#mcp-source-mapping--selected-target",
    "operation": "preview",
    "binding": "planned",
    "mode": "adapted",
    "readiness": "contract-only",
    "services": [
      "results.preview_deletion"
    ],
    "gap": null,
    "projection": "Project record.result and changed on writes; history preserves its resolved window, kind and cursor; list preserves parent/attention filters."
  }
]

Service input

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}

Service output

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "operation": {
      "type": "string",
      "const": "preview"
    },
    "preview_id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
    },
    "expires_at": {
      "type": "string",
      "format": "date-time",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
    },
    "target": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
        },
        "title": {
          "type": "string"
        }
      },
      "required": [
        "id",
        "title"
      ],
      "additionalProperties": false
    },
    "deleted": {
      "type": "object",
      "properties": {
        "results": {
          "type": "number",
          "const": 1
        },
        "result_logs": {
          "type": "integer",
          "minimum": 0,
          "maximum": 9007199254740991
        },
        "habit_logs": {
          "type": "integer",
          "minimum": 0,
          "maximum": 9007199254740991
        }
      },
      "required": [
        "results",
        "result_logs",
        "habit_logs"
      ],
      "additionalProperties": false
    },
    "approval": {
      "type": "object",
      "properties": {
        "status": {
          "type": "string",
          "const": "required"
        },
        "url": {
          "type": "string",
          "format": "uri"
        }
      },
      "required": [
        "status",
        "url"
      ],
      "additionalProperties": false
    }
  },
  "required": [
    "operation",
    "preview_id",
    "expires_at",
    "target",
    "deleted",
    "approval"
  ],
  "additionalProperties": false
}
Public MCP input/output shapes for comparison
[
  {
    "tool": "result_delete",
    "collection": "results",
    "specification": "docs/feature-specs/F4-results.md#mcp-source-mapping--selected-target",
    "operation": "preview",
    "binding": "planned",
    "mode": "adapted",
    "readiness": "contract-only",
    "services": [
      "results.preview_deletion"
    ],
    "gap": null,
    "projection": "Project record.result and changed on writes; history preserves its resolved window, kind and cursor; list preserves parent/attention filters.",
    "input": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "oneOf": [
        {
          "type": "object",
          "properties": {
            "operation": {
              "type": "string",
              "const": "preview"
            },
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Exact owned record UUID. Resolve ambiguous targets before requesting impact."
            }
          },
          "required": [
            "operation",
            "id"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "operation": {
              "type": "string",
              "const": "commit"
            },
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "preview_id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Server preview ID for this target. Not consent: genuine approval must already be recorded by the trusted application."
            }
          },
          "required": [
            "operation",
            "id",
            "preview_id"
          ],
          "additionalProperties": false
        }
      ]
    },
    "output": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "oneOf": [
        {
          "type": "object",
          "properties": {
            "operation": {
              "type": "string",
              "const": "preview"
            },
            "preview_id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "expires_at": {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
            },
            "target": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "title": {
                  "type": "string"
                }
              },
              "required": [
                "id",
                "title"
              ],
              "additionalProperties": false
            },
            "deleted": {
              "type": "object",
              "properties": {
                "results": {
                  "type": "number",
                  "const": 1
                },
                "result_logs": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "habit_logs": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                }
              },
              "required": [
                "results",
                "result_logs",
                "habit_logs"
              ],
              "additionalProperties": false
            },
            "approval": {
              "type": "object",
              "properties": {
                "status": {
                  "type": "string",
                  "const": "required"
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                }
              },
              "required": [
                "status",
                "url"
              ],
              "additionalProperties": false
            }
          },
          "required": [
            "operation",
            "preview_id",
            "expires_at",
            "target",
            "deleted",
            "approval"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "operation": {
              "type": "string",
              "const": "commit"
            },
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            }
          },
          "required": [
            "operation",
            "id"
          ],
          "additionalProperties": false
        }
      ]
    }
  }
]
results.create · write · contract-only

Feature declaration: createResult

Requirement: docs/feature-specs/F4-results.md · Access: entitled-write

Tables: results (write), cycles (read), objectives (read), result_logs (read), habit_logs (read), idempotency_keys (write)

Trusted context: authenticated actor

Retry: API requires client-key replay; unkeyed MCP calls must inspect state after an uncertain outcome.

Expected errors: UNAUTHORIZED, BAD_REQUEST, FORBIDDEN, NOT_FOUND, CONFLICT, NOT_IMPLEMENTED, INTERNAL_SERVER_ERROR

API consumers

[
  {
    "operation": "results.create",
    "service": "results.create",
    "binding": "bound"
  }
]

MCP consumers

[
  {
    "tool": "result_write",
    "collection": "results",
    "specification": "docs/feature-specs/F4-results.md#mcp-source-mapping--selected-target",
    "operation": "create",
    "binding": "planned",
    "mode": "adapted",
    "readiness": "contract-only",
    "services": [
      "results.create"
    ],
    "gap": null,
    "projection": "Project record.result and changed on writes; history preserves its resolved window, kind and cursor; list preserves parent/attention filters."
  }
]

Service input

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "anyOf": [
    {
      "oneOf": [
        {
          "type": "object",
          "properties": {
            "objective_id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "title": {
              "type": "string"
            },
            "description": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ]
            },
            "metric_type": {
              "type": "string",
              "const": "number"
            },
            "start_value": {
              "type": "number"
            },
            "target_value": {
              "type": "number"
            },
            "unit": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ]
            },
            "idempotency_key": {
              "type": "string",
              "minLength": 1,
              "maxLength": 255
            }
          },
          "required": [
            "objective_id",
            "title",
            "metric_type",
            "target_value",
            "idempotency_key"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "objective_id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "title": {
              "type": "string"
            },
            "description": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ]
            },
            "metric_type": {
              "type": "string",
              "const": "percentage"
            },
            "start_value": {
              "type": "number",
              "minimum": 0,
              "maximum": 100
            },
            "target_value": {
              "type": "number",
              "minimum": 0,
              "maximum": 100
            },
            "idempotency_key": {
              "type": "string",
              "minLength": 1,
              "maxLength": 255
            }
          },
          "required": [
            "objective_id",
            "title",
            "metric_type",
            "target_value",
            "idempotency_key"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "objective_id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "title": {
              "type": "string"
            },
            "description": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ]
            },
            "metric_type": {
              "type": "string",
              "const": "milestone"
            },
            "idempotency_key": {
              "type": "string",
              "minLength": 1,
              "maxLength": 255
            }
          },
          "required": [
            "objective_id",
            "title",
            "metric_type",
            "idempotency_key"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "objective_id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "title": {
              "type": "string"
            },
            "description": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ]
            },
            "metric_type": {
              "type": "string",
              "const": "habit"
            },
            "cadence": {
              "type": "string",
              "enum": [
                "weekly",
                "monthly"
              ],
              "description": "UI label: Cadence. Weekly or Monthly; per supplies the Times value."
            },
            "per": {
              "type": "integer",
              "minimum": 1,
              "maximum": 9007199254740991,
              "description": "UI label: Times per selected Cadence."
            },
            "since": {
              "type": "string",
              "format": "date",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
              "description": "Calendar date as YYYY-MM-DD in the profile timezone."
            },
            "idempotency_key": {
              "type": "string",
              "minLength": 1,
              "maxLength": 255
            }
          },
          "required": [
            "objective_id",
            "title",
            "metric_type",
            "cadence",
            "per",
            "idempotency_key"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "objective_id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "title": {
              "type": "string"
            },
            "description": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ]
            },
            "metric_type": {
              "type": "string",
              "const": "performance"
            },
            "start_value": {
              "type": "number"
            },
            "target_value": {
              "type": "number"
            },
            "unit": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ]
            },
            "since": {
              "type": "string",
              "format": "date",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
              "description": "Calendar date as YYYY-MM-DD in the profile timezone."
            },
            "idempotency_key": {
              "type": "string",
              "minLength": 1,
              "maxLength": 255
            }
          },
          "required": [
            "objective_id",
            "title",
            "metric_type",
            "target_value",
            "idempotency_key"
          ],
          "additionalProperties": false
        }
      ]
    },
    {
      "oneOf": [
        {
          "type": "object",
          "properties": {
            "objective_id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "title": {
              "type": "string"
            },
            "description": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ]
            },
            "metric_type": {
              "type": "string",
              "const": "number"
            },
            "start_value": {
              "type": "number"
            },
            "target_value": {
              "type": "number"
            },
            "unit": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "objective_id",
            "title",
            "metric_type",
            "target_value"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "objective_id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "title": {
              "type": "string"
            },
            "description": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ]
            },
            "metric_type": {
              "type": "string",
              "const": "percentage"
            },
            "start_value": {
              "type": "number",
              "minimum": 0,
              "maximum": 100
            },
            "target_value": {
              "type": "number",
              "minimum": 0,
              "maximum": 100
            }
          },
          "required": [
            "objective_id",
            "title",
            "metric_type",
            "target_value"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "objective_id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "title": {
              "type": "string"
            },
            "description": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ]
            },
            "metric_type": {
              "type": "string",
              "const": "milestone"
            }
          },
          "required": [
            "objective_id",
            "title",
            "metric_type"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "objective_id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "title": {
              "type": "string"
            },
            "description": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ]
            },
            "metric_type": {
              "type": "string",
              "const": "habit"
            },
            "cadence": {
              "type": "string",
              "enum": [
                "weekly",
                "monthly"
              ],
              "description": "UI label: Cadence. Weekly or Monthly; per supplies the Times value."
            },
            "per": {
              "type": "integer",
              "minimum": 1,
              "maximum": 9007199254740991,
              "description": "UI label: Times per selected Cadence."
            },
            "since": {
              "type": "string",
              "format": "date",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
              "description": "Calendar date as YYYY-MM-DD in the profile timezone."
            }
          },
          "required": [
            "objective_id",
            "title",
            "metric_type",
            "cadence",
            "per"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "objective_id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "title": {
              "type": "string"
            },
            "description": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ]
            },
            "metric_type": {
              "type": "string",
              "const": "performance"
            },
            "start_value": {
              "type": "number"
            },
            "target_value": {
              "type": "number"
            },
            "unit": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ]
            },
            "since": {
              "type": "string",
              "format": "date",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
              "description": "Calendar date as YYYY-MM-DD in the profile timezone."
            }
          },
          "required": [
            "objective_id",
            "title",
            "metric_type",
            "target_value"
          ],
          "additionalProperties": false
        }
      ]
    }
  ]
}

Service output

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "record": {
      "type": "object",
      "properties": {
        "result": {
          "oneOf": [
            {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "objective_id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "title": {
                  "type": "string"
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "metric_type": {
                  "type": "string",
                  "const": "number"
                },
                "start_value": {
                  "type": "number"
                },
                "target_value": {
                  "type": "number"
                },
                "unit": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "UI label: Unit. Used by Number and Performance results."
                },
                "cadence": {
                  "type": "null"
                },
                "per": {
                  "type": "null"
                },
                "since": {
                  "type": "null"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "in_progress",
                    "completed"
                  ],
                  "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                },
                "created_at": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "short_code": {
                  "type": "string",
                  "minLength": 1
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                },
                "current_value": {
                  "type": "number",
                  "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                },
                "boundary_value": {
                  "type": "number"
                },
                "progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "boundary_progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "movement": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "movement_pp": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "evidence_count": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "last_recorded_at": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "habit_expected_since_boundary": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "habit_logs_since_boundary": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "performance_share": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "id",
                "objective_id",
                "title",
                "description",
                "metric_type",
                "start_value",
                "target_value",
                "unit",
                "cadence",
                "per",
                "since",
                "status",
                "created_at",
                "short_code",
                "url",
                "current_value",
                "boundary_value",
                "progress_pct",
                "boundary_progress_pct",
                "movement",
                "movement_pp",
                "evidence_count",
                "last_recorded_at",
                "habit_expected_since_boundary",
                "habit_logs_since_boundary",
                "performance_share"
              ],
              "additionalProperties": false
            },
            {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "objective_id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "title": {
                  "type": "string"
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "metric_type": {
                  "type": "string",
                  "const": "percentage"
                },
                "start_value": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 100
                },
                "target_value": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 100
                },
                "unit": {
                  "type": "null"
                },
                "cadence": {
                  "type": "null"
                },
                "per": {
                  "type": "null"
                },
                "since": {
                  "type": "null"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "in_progress",
                    "completed"
                  ],
                  "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                },
                "created_at": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "short_code": {
                  "type": "string",
                  "minLength": 1
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                },
                "current_value": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 100
                },
                "boundary_value": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 100
                },
                "progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "boundary_progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "movement": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "movement_pp": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "evidence_count": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "last_recorded_at": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "habit_expected_since_boundary": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "habit_logs_since_boundary": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "performance_share": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "id",
                "objective_id",
                "title",
                "description",
                "metric_type",
                "start_value",
                "target_value",
                "unit",
                "cadence",
                "per",
                "since",
                "status",
                "created_at",
                "short_code",
                "url",
                "current_value",
                "boundary_value",
                "progress_pct",
                "boundary_progress_pct",
                "movement",
                "movement_pp",
                "evidence_count",
                "last_recorded_at",
                "habit_expected_since_boundary",
                "habit_logs_since_boundary",
                "performance_share"
              ],
              "additionalProperties": false
            },
            {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "objective_id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "title": {
                  "type": "string"
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "metric_type": {
                  "type": "string",
                  "const": "milestone"
                },
                "start_value": {
                  "type": "number",
                  "const": 0
                },
                "target_value": {
                  "type": "number",
                  "const": 1
                },
                "unit": {
                  "type": "null"
                },
                "cadence": {
                  "type": "null"
                },
                "per": {
                  "type": "null"
                },
                "since": {
                  "type": "null"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "in_progress",
                    "completed"
                  ],
                  "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                },
                "created_at": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "short_code": {
                  "type": "string",
                  "minLength": 1
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                },
                "current_value": {
                  "anyOf": [
                    {
                      "type": "number",
                      "const": 0
                    },
                    {
                      "type": "number",
                      "const": 1
                    }
                  ]
                },
                "boundary_value": {
                  "anyOf": [
                    {
                      "type": "number",
                      "const": 0
                    },
                    {
                      "type": "number",
                      "const": 1
                    }
                  ]
                },
                "progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "boundary_progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "movement": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "movement_pp": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "evidence_count": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "last_recorded_at": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "habit_expected_since_boundary": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "habit_logs_since_boundary": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "performance_share": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "id",
                "objective_id",
                "title",
                "description",
                "metric_type",
                "start_value",
                "target_value",
                "unit",
                "cadence",
                "per",
                "since",
                "status",
                "created_at",
                "short_code",
                "url",
                "current_value",
                "boundary_value",
                "progress_pct",
                "boundary_progress_pct",
                "movement",
                "movement_pp",
                "evidence_count",
                "last_recorded_at",
                "habit_expected_since_boundary",
                "habit_logs_since_boundary",
                "performance_share"
              ],
              "additionalProperties": false
            },
            {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "objective_id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "title": {
                  "type": "string"
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "metric_type": {
                  "type": "string",
                  "const": "habit"
                },
                "start_value": {
                  "type": "number",
                  "const": 0
                },
                "target_value": {
                  "type": "number",
                  "const": 100
                },
                "unit": {
                  "type": "null"
                },
                "cadence": {
                  "type": "string",
                  "enum": [
                    "weekly",
                    "monthly"
                  ],
                  "description": "UI label: Cadence. Weekly or Monthly; per supplies the Times value."
                },
                "per": {
                  "type": "integer",
                  "exclusiveMinimum": 0,
                  "maximum": 9007199254740991
                },
                "since": {
                  "type": "string",
                  "format": "date",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                  "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "in_progress",
                    "completed"
                  ],
                  "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                },
                "created_at": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "short_code": {
                  "type": "string",
                  "minLength": 1
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                },
                "current_value": {
                  "type": "number",
                  "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                },
                "boundary_value": {
                  "type": "number"
                },
                "progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "boundary_progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "movement": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "movement_pp": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "evidence_count": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "last_recorded_at": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "habit_expected_since_boundary": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "habit_logs_since_boundary": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "performance_share": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "id",
                "objective_id",
                "title",
                "description",
                "metric_type",
                "start_value",
                "target_value",
                "unit",
                "cadence",
                "per",
                "since",
                "status",
                "created_at",
                "short_code",
                "url",
                "current_value",
                "boundary_value",
                "progress_pct",
                "boundary_progress_pct",
                "movement",
                "movement_pp",
                "evidence_count",
                "last_recorded_at",
                "habit_expected_since_boundary",
                "habit_logs_since_boundary",
                "performance_share"
              ],
              "additionalProperties": false
            },
            {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "objective_id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "title": {
                  "type": "string"
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "metric_type": {
                  "type": "string",
                  "const": "performance"
                },
                "start_value": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "UI label: Start. Metric baseline; habit baselines are derived rather than stored."
                },
                "target_value": {
                  "type": "number"
                },
                "unit": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "UI label: Unit. Used by Number and Performance results."
                },
                "cadence": {
                  "type": "null"
                },
                "per": {
                  "type": "null"
                },
                "since": {
                  "type": "string",
                  "format": "date",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                  "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "in_progress",
                    "completed"
                  ],
                  "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                },
                "created_at": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "short_code": {
                  "type": "string",
                  "minLength": 1
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                },
                "current_value": {
                  "type": "number",
                  "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                },
                "boundary_value": {
                  "type": "number"
                },
                "progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "boundary_progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "movement": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "movement_pp": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "evidence_count": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "last_recorded_at": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "habit_expected_since_boundary": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "habit_logs_since_boundary": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "performance_share": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "id",
                "objective_id",
                "title",
                "description",
                "metric_type",
                "start_value",
                "target_value",
                "unit",
                "cadence",
                "per",
                "since",
                "status",
                "created_at",
                "short_code",
                "url",
                "current_value",
                "boundary_value",
                "progress_pct",
                "boundary_progress_pct",
                "movement",
                "movement_pp",
                "evidence_count",
                "last_recorded_at",
                "habit_expected_since_boundary",
                "habit_logs_since_boundary",
                "performance_share"
              ],
              "additionalProperties": false
            }
          ]
        },
        "parents": {
          "type": "object",
          "properties": {
            "cycle": {
              "anyOf": [
                {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    "intention": {
                      "anyOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "null"
                        }
                      ],
                      "description": "UI label: Intention. Optional guiding focus; the cycle is identified by its date range, not a name."
                    },
                    "start_at": {
                      "type": "string",
                      "format": "date",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                      "description": "UI label: Starts."
                    },
                    "end_at": {
                      "type": "string",
                      "format": "date",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                      "description": "UI label: Ends."
                    },
                    "status": {
                      "type": "string",
                      "enum": [
                        "active",
                        "archived"
                      ]
                    },
                    "created_at": {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    "url": {
                      "type": "string",
                      "format": "uri"
                    },
                    "achievement_pct": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ],
                      "description": "UI label: Achievement. Derived from objective progress; unavailable when nothing is measurable."
                    },
                    "time_gone_pct": {
                      "type": "number",
                      "minimum": 0,
                      "maximum": 100,
                      "description": "UI label: Time gone. Derived percentage of the cycle elapsed."
                    },
                    "length_weeks": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991,
                      "description": "UI label: Length, in weeks; derived from Starts and Ends."
                    }
                  },
                  "required": [
                    "id",
                    "intention",
                    "start_at",
                    "end_at",
                    "status",
                    "created_at",
                    "url",
                    "achievement_pct",
                    "time_gone_pct",
                    "length_weeks"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "null"
                }
              ]
            },
            "objectives": {
              "type": "object",
              "properties": {
                "items": {
                  "maxItems": 50,
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      "cycle_id": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      "title": {
                        "type": "string"
                      },
                      "description": {
                        "type": "string"
                      },
                      "deadline_at": {
                        "anyOf": [
                          {
                            "type": "string",
                            "format": "date",
                            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                            "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "UI label: Deadline; null when no deadline has been set."
                      },
                      "status": {
                        "type": "string",
                        "enum": [
                          "on_track",
                          "off_track",
                          "completed"
                        ],
                        "description": "Objective status: On track, Off track or Completed. Coaching judgment, independent of the derived Progress percentage."
                      },
                      "created_at": {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      "short_code": {
                        "type": "string",
                        "minLength": 1
                      },
                      "url": {
                        "type": "string",
                        "format": "uri"
                      },
                      "progress_pct": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "UI label: Progress. Derived from measurable results, independently of Status."
                      },
                      "boundary_progress_pct": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "Historical progress at the resolved last-session boundary; not current Progress."
                      },
                      "movement_pp": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "required": [
                      "id",
                      "cycle_id",
                      "title",
                      "description",
                      "deadline_at",
                      "status",
                      "created_at",
                      "short_code",
                      "url",
                      "progress_pct",
                      "boundary_progress_pct",
                      "movement_pp"
                    ],
                    "additionalProperties": false
                  }
                },
                "next_cursor": {
                  "anyOf": [
                    {
                      "type": "string",
                      "minLength": 1
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "items",
                "next_cursor"
              ],
              "additionalProperties": false
            }
          },
          "required": [
            "cycle",
            "objectives"
          ],
          "additionalProperties": false
        },
        "result_logs": {
          "type": "object",
          "properties": {
            "items": {
              "maxItems": 100,
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "result_id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "value": {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "comment": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "session_id": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "recorded_at": {
                    "type": "string",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                  }
                },
                "required": [
                  "id",
                  "result_id",
                  "value",
                  "comment",
                  "session_id",
                  "recorded_at"
                ],
                "additionalProperties": false,
                "description": "Result log stored in result_logs. The UI shows value entries under Updates and their non-empty comments under Comments. Value may be null for a comment-only habit entry; evidence and timestamps are immutable."
              }
            },
            "next_cursor": {
              "anyOf": [
                {
                  "type": "string",
                  "minLength": 1
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "items",
            "next_cursor"
          ],
          "additionalProperties": false
        },
        "habit_logs": {
          "type": "object",
          "properties": {
            "items": {
              "maxItems": 100,
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "result_id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "day": {
                    "type": "string",
                    "format": "date",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                    "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                  },
                  "session_id": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "created_at": {
                    "type": "string",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                  }
                },
                "required": [
                  "id",
                  "result_id",
                  "day",
                  "session_id",
                  "created_at"
                ],
                "additionalProperties": false,
                "description": "Habit log stored in habit_logs. The UI marks calendar days and lists them under Updates with the Marked column. One row per result/day; unmarking deletes the row. This is not append-only history."
              }
            },
            "next_cursor": {
              "anyOf": [
                {
                  "type": "string",
                  "minLength": 1
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "items",
            "next_cursor"
          ],
          "additionalProperties": false
        },
        "trend": {
          "type": "object",
          "properties": {
            "items": {
              "maxItems": 100,
              "type": "array",
              "items": {
                "oneOf": [
                  {
                    "type": "object",
                    "properties": {
                      "kind": {
                        "type": "string",
                        "const": "value"
                      },
                      "at": {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      "value": {
                        "type": "number"
                      },
                      "pace": {
                        "type": "number"
                      }
                    },
                    "required": [
                      "kind",
                      "at",
                      "value",
                      "pace"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "kind": {
                        "type": "string",
                        "const": "habit"
                      },
                      "from": {
                        "type": "string",
                        "format": "date",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                        "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                      },
                      "to": {
                        "type": "string",
                        "format": "date",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                        "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                      },
                      "actual": {
                        "type": "integer",
                        "minimum": -9007199254740991,
                        "maximum": 9007199254740991
                      },
                      "expected": {
                        "type": "number"
                      },
                      "expected_full": {
                        "type": "number"
                      }
                    },
                    "required": [
                      "kind",
                      "from",
                      "to",
                      "actual",
                      "expected",
                      "expected_full"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "kind": {
                        "type": "string",
                        "const": "performance"
                      },
                      "id": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      "at": {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      "value": {
                        "type": "number"
                      },
                      "target": {
                        "type": "number"
                      },
                      "gap": {
                        "type": "number"
                      },
                      "share": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "required": [
                      "kind",
                      "id",
                      "at",
                      "value",
                      "target",
                      "gap",
                      "share"
                    ],
                    "additionalProperties": false
                  }
                ]
              }
            },
            "next_cursor": {
              "anyOf": [
                {
                  "type": "string",
                  "minLength": 1
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "items",
            "next_cursor"
          ],
          "additionalProperties": false
        },
        "continuations": {
          "type": "object",
          "propertyNames": {
            "type": "string",
            "enum": [
              "cycles",
              "objectives",
              "results",
              "actions",
              "notes",
              "sessions",
              "result_logs",
              "habit_logs",
              "action_logs",
              "trend"
            ]
          },
          "additionalProperties": {
            "type": "string",
            "minLength": 1
          }
        }
      },
      "required": [
        "result",
        "parents",
        "result_logs",
        "habit_logs",
        "trend",
        "continuations"
      ],
      "additionalProperties": false
    },
    "changed": {
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "entity": {
            "type": "string",
            "enum": [
              "user",
              "cycle",
              "objective",
              "result",
              "result_log",
              "action",
              "action_log",
              "session",
              "note",
              "habit_log"
            ]
          },
          "id": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
            "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
          }
        },
        "required": [
          "entity",
          "id"
        ],
        "additionalProperties": false
      }
    },
    "continuations": {
      "type": "object",
      "propertyNames": {
        "type": "string",
        "enum": [
          "cycles",
          "objectives",
          "results",
          "actions",
          "notes",
          "sessions",
          "result_logs",
          "habit_logs",
          "action_logs",
          "trend"
        ]
      },
      "additionalProperties": {
        "type": "string",
        "minLength": 1
      }
    }
  },
  "required": [
    "record",
    "changed",
    "continuations"
  ],
  "additionalProperties": false
}
Public MCP input/output shapes for comparison
[
  {
    "tool": "result_write",
    "collection": "results",
    "specification": "docs/feature-specs/F4-results.md#mcp-source-mapping--selected-target",
    "operation": "create",
    "binding": "planned",
    "mode": "adapted",
    "readiness": "contract-only",
    "services": [
      "results.create"
    ],
    "gap": null,
    "projection": "Project record.result and changed on writes; history preserves its resolved window, kind and cursor; list preserves parent/attention filters.",
    "input": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "oneOf": [
        {
          "oneOf": [
            {
              "type": "object",
              "properties": {
                "objective_id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "title": {
                  "type": "string",
                  "minLength": 1
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "metric_type": {
                  "type": "string",
                  "const": "number"
                },
                "start_value": {
                  "type": "number"
                },
                "target_value": {
                  "type": "number"
                },
                "unit": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "operation": {
                  "type": "string",
                  "const": "create"
                }
              },
              "required": [
                "objective_id",
                "title",
                "metric_type",
                "target_value",
                "operation"
              ],
              "additionalProperties": false
            },
            {
              "type": "object",
              "properties": {
                "objective_id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "title": {
                  "type": "string",
                  "minLength": 1
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "metric_type": {
                  "type": "string",
                  "const": "percentage"
                },
                "start_value": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 100
                },
                "target_value": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 100
                },
                "operation": {
                  "type": "string",
                  "const": "create"
                }
              },
              "required": [
                "objective_id",
                "title",
                "metric_type",
                "target_value",
                "operation"
              ],
              "additionalProperties": false
            },
            {
              "type": "object",
              "properties": {
                "objective_id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "title": {
                  "type": "string",
                  "minLength": 1
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "metric_type": {
                  "type": "string",
                  "const": "milestone"
                },
                "operation": {
                  "type": "string",
                  "const": "create"
                }
              },
              "required": [
                "objective_id",
                "title",
                "metric_type",
                "operation"
              ],
              "additionalProperties": false
            },
            {
              "type": "object",
              "properties": {
                "objective_id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "title": {
                  "type": "string",
                  "minLength": 1
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "metric_type": {
                  "type": "string",
                  "const": "habit"
                },
                "cadence": {
                  "type": "string",
                  "enum": [
                    "weekly",
                    "monthly"
                  ],
                  "description": "UI label: Cadence. Weekly or Monthly; per supplies the Times value."
                },
                "per": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 9007199254740991,
                  "description": "UI label: Times per selected Cadence."
                },
                "since": {
                  "type": "string",
                  "format": "date",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                  "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                },
                "operation": {
                  "type": "string",
                  "const": "create"
                }
              },
              "required": [
                "objective_id",
                "title",
                "metric_type",
                "cadence",
                "per",
                "operation"
              ],
              "additionalProperties": false
            },
            {
              "type": "object",
              "properties": {
                "objective_id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "title": {
                  "type": "string",
                  "minLength": 1
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "metric_type": {
                  "type": "string",
                  "const": "performance"
                },
                "start_value": {
                  "type": "number"
                },
                "target_value": {
                  "type": "number"
                },
                "unit": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "since": {
                  "type": "string",
                  "format": "date",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                  "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                },
                "operation": {
                  "type": "string",
                  "const": "create"
                }
              },
              "required": [
                "objective_id",
                "title",
                "metric_type",
                "target_value",
                "operation"
              ],
              "additionalProperties": false
            }
          ]
        },
        {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "title": {
              "type": "string",
              "minLength": 1
            },
            "description": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ]
            },
            "objective_id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "metric_type": {
              "type": "string",
              "enum": [
                "number",
                "percentage",
                "milestone",
                "habit",
                "performance"
              ],
              "description": "UI label: Type. Number, Percentage, Milestone, Habit or Performance."
            },
            "target_value": {
              "type": "number"
            },
            "start_value": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "null"
                }
              ]
            },
            "unit": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ]
            },
            "cadence": {
              "type": "string",
              "enum": [
                "weekly",
                "monthly"
              ],
              "description": "UI label: Cadence. Weekly or Monthly; per supplies the Times value."
            },
            "per": {
              "type": "integer",
              "minimum": 1,
              "maximum": 9007199254740991,
              "description": "UI label: Times per selected Cadence."
            },
            "since": {
              "type": "string",
              "format": "date",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
              "description": "Calendar date as YYYY-MM-DD in the profile timezone."
            },
            "status": {
              "type": "string",
              "enum": [
                "in_progress",
                "completed"
              ],
              "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
            },
            "operation": {
              "type": "string",
              "const": "update"
            }
          },
          "required": [
            "id",
            "operation"
          ],
          "additionalProperties": false
        }
      ]
    },
    "output": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "result": {
          "oneOf": [
            {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "objective_id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "title": {
                  "type": "string"
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "metric_type": {
                  "type": "string",
                  "const": "number"
                },
                "start_value": {
                  "type": "number"
                },
                "target_value": {
                  "type": "number"
                },
                "unit": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "UI label: Unit. Used by Number and Performance results."
                },
                "cadence": {
                  "type": "null"
                },
                "per": {
                  "type": "null"
                },
                "since": {
                  "type": "null"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "in_progress",
                    "completed"
                  ],
                  "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                },
                "created_at": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "short_code": {
                  "type": "string",
                  "minLength": 1
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                },
                "current_value": {
                  "type": "number",
                  "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                },
                "boundary_value": {
                  "type": "number"
                },
                "progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "boundary_progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "movement": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "movement_pp": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "evidence_count": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "last_recorded_at": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "habit_expected_since_boundary": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "habit_logs_since_boundary": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "performance_share": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "id",
                "objective_id",
                "title",
                "description",
                "metric_type",
                "start_value",
                "target_value",
                "unit",
                "cadence",
                "per",
                "since",
                "status",
                "created_at",
                "short_code",
                "url",
                "current_value",
                "boundary_value",
                "progress_pct",
                "boundary_progress_pct",
                "movement",
                "movement_pp",
                "evidence_count",
                "last_recorded_at",
                "habit_expected_since_boundary",
                "habit_logs_since_boundary",
                "performance_share"
              ],
              "additionalProperties": false
            },
            {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "objective_id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "title": {
                  "type": "string"
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "metric_type": {
                  "type": "string",
                  "const": "percentage"
                },
                "start_value": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 100
                },
                "target_value": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 100
                },
                "unit": {
                  "type": "null"
                },
                "cadence": {
                  "type": "null"
                },
                "per": {
                  "type": "null"
                },
                "since": {
                  "type": "null"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "in_progress",
                    "completed"
                  ],
                  "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                },
                "created_at": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "short_code": {
                  "type": "string",
                  "minLength": 1
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                },
                "current_value": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 100
                },
                "boundary_value": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 100
                },
                "progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "boundary_progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "movement": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "movement_pp": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "evidence_count": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "last_recorded_at": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "habit_expected_since_boundary": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "habit_logs_since_boundary": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "performance_share": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "id",
                "objective_id",
                "title",
                "description",
                "metric_type",
                "start_value",
                "target_value",
                "unit",
                "cadence",
                "per",
                "since",
                "status",
                "created_at",
                "short_code",
                "url",
                "current_value",
                "boundary_value",
                "progress_pct",
                "boundary_progress_pct",
                "movement",
                "movement_pp",
                "evidence_count",
                "last_recorded_at",
                "habit_expected_since_boundary",
                "habit_logs_since_boundary",
                "performance_share"
              ],
              "additionalProperties": false
            },
            {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "objective_id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "title": {
                  "type": "string"
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "metric_type": {
                  "type": "string",
                  "const": "milestone"
                },
                "start_value": {
                  "type": "number",
                  "const": 0
                },
                "target_value": {
                  "type": "number",
                  "const": 1
                },
                "unit": {
                  "type": "null"
                },
                "cadence": {
                  "type": "null"
                },
                "per": {
                  "type": "null"
                },
                "since": {
                  "type": "null"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "in_progress",
                    "completed"
                  ],
                  "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                },
                "created_at": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "short_code": {
                  "type": "string",
                  "minLength": 1
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                },
                "current_value": {
                  "anyOf": [
                    {
                      "type": "number",
                      "const": 0
                    },
                    {
                      "type": "number",
                      "const": 1
                    }
                  ]
                },
                "boundary_value": {
                  "anyOf": [
                    {
                      "type": "number",
                      "const": 0
                    },
                    {
                      "type": "number",
                      "const": 1
                    }
                  ]
                },
                "progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "boundary_progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "movement": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "movement_pp": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "evidence_count": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "last_recorded_at": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "habit_expected_since_boundary": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "habit_logs_since_boundary": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "performance_share": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "id",
                "objective_id",
                "title",
                "description",
                "metric_type",
                "start_value",
                "target_value",
                "unit",
                "cadence",
                "per",
                "since",
                "status",
                "created_at",
                "short_code",
                "url",
                "current_value",
                "boundary_value",
                "progress_pct",
                "boundary_progress_pct",
                "movement",
                "movement_pp",
                "evidence_count",
                "last_recorded_at",
                "habit_expected_since_boundary",
                "habit_logs_since_boundary",
                "performance_share"
              ],
              "additionalProperties": false
            },
            {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "objective_id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "title": {
                  "type": "string"
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "metric_type": {
                  "type": "string",
                  "const": "habit"
                },
                "start_value": {
                  "type": "number",
                  "const": 0
                },
                "target_value": {
                  "type": "number",
                  "const": 100
                },
                "unit": {
                  "type": "null"
                },
                "cadence": {
                  "type": "string",
                  "enum": [
                    "weekly",
                    "monthly"
                  ],
                  "description": "UI label: Cadence. Weekly or Monthly; per supplies the Times value."
                },
                "per": {
                  "type": "integer",
                  "exclusiveMinimum": 0,
                  "maximum": 9007199254740991
                },
                "since": {
                  "type": "string",
                  "format": "date",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                  "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "in_progress",
                    "completed"
                  ],
                  "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                },
                "created_at": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "short_code": {
                  "type": "string",
                  "minLength": 1
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                },
                "current_value": {
                  "type": "number",
                  "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                },
                "boundary_value": {
                  "type": "number"
                },
                "progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "boundary_progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "movement": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "movement_pp": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "evidence_count": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "last_recorded_at": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "habit_expected_since_boundary": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "habit_logs_since_boundary": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "performance_share": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "id",
                "objective_id",
                "title",
                "description",
                "metric_type",
                "start_value",
                "target_value",
                "unit",
                "cadence",
                "per",
                "since",
                "status",
                "created_at",
                "short_code",
                "url",
                "current_value",
                "boundary_value",
                "progress_pct",
                "boundary_progress_pct",
                "movement",
                "movement_pp",
                "evidence_count",
                "last_recorded_at",
                "habit_expected_since_boundary",
                "habit_logs_since_boundary",
                "performance_share"
              ],
              "additionalProperties": false
            },
            {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "objective_id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "title": {
                  "type": "string"
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "metric_type": {
                  "type": "string",
                  "const": "performance"
                },
                "start_value": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "UI label: Start. Metric baseline; habit baselines are derived rather than stored."
                },
                "target_value": {
                  "type": "number"
                },
                "unit": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "UI label: Unit. Used by Number and Performance results."
                },
                "cadence": {
                  "type": "null"
                },
                "per": {
                  "type": "null"
                },
                "since": {
                  "type": "string",
                  "format": "date",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                  "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "in_progress",
                    "completed"
                  ],
                  "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                },
                "created_at": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "short_code": {
                  "type": "string",
                  "minLength": 1
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                },
                "current_value": {
                  "type": "number",
                  "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                },
                "boundary_value": {
                  "type": "number"
                },
                "progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "boundary_progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "movement": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "movement_pp": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "evidence_count": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "last_recorded_at": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "habit_expected_since_boundary": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "habit_logs_since_boundary": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "performance_share": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "id",
                "objective_id",
                "title",
                "description",
                "metric_type",
                "start_value",
                "target_value",
                "unit",
                "cadence",
                "per",
                "since",
                "status",
                "created_at",
                "short_code",
                "url",
                "current_value",
                "boundary_value",
                "progress_pct",
                "boundary_progress_pct",
                "movement",
                "movement_pp",
                "evidence_count",
                "last_recorded_at",
                "habit_expected_since_boundary",
                "habit_logs_since_boundary",
                "performance_share"
              ],
              "additionalProperties": false
            }
          ]
        },
        "changed": {
          "maxItems": 100,
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "entity": {
                "type": "string",
                "enum": [
                  "user",
                  "cycle",
                  "objective",
                  "result",
                  "result_log",
                  "action",
                  "action_log",
                  "session",
                  "note",
                  "habit_log"
                ]
              },
              "id": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
              }
            },
            "required": [
              "entity",
              "id"
            ],
            "additionalProperties": false
          }
        }
      },
      "required": [
        "result",
        "changed"
      ],
      "additionalProperties": false
    }
  }
]
results.list · read · contract-only

Feature declaration: listResults

Requirement: docs/feature-specs/F4-results.md · Access: retained-read

Tables: results (read), cycles (read)

Trusted context: authenticated actor

Retry: Safe to retry with the same resolved filters and cursor.

Expected errors: UNAUTHORIZED, BAD_REQUEST, FORBIDDEN, NOT_FOUND, CONFLICT, NOT_IMPLEMENTED, INTERNAL_SERVER_ERROR

API consumers

[
  {
    "operation": "results.list",
    "service": "results.list",
    "binding": "bound"
  }
]

MCP consumers

[
  {
    "tool": "result_read",
    "collection": "results",
    "specification": "docs/feature-specs/F4-results.md#mcp-source-mapping--selected-target",
    "operation": "list",
    "binding": "planned",
    "mode": "adapted",
    "readiness": "contract-only",
    "services": [
      "results.list"
    ],
    "gap": null,
    "projection": "Project record.result and changed on writes; history preserves its resolved window, kind and cursor; list preserves parent/attention filters."
  }
]

Service input

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "cursor": {
      "type": "string",
      "minLength": 1
    },
    "limit": {
      "default": 20,
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "objective_id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
    },
    "cycle_id": {
      "description": "List results across one cycle instead of a single objective. Supply exactly one parent selector.",
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "attention": {
      "description": "Optional briefing subset: no evidence ever, no update in the window, or habit with no mark in the window.",
      "type": "string",
      "enum": [
        "never_updated",
        "silent",
        "unmarked"
      ]
    },
    "window": {
      "description": "Required for silent/unmarked attention. Use exact server-resolved briefing bounds; current result figures remain current.",
      "type": "object",
      "properties": {
        "since": {
          "type": "string",
          "format": "date-time",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
        },
        "until": {
          "type": "string",
          "format": "date-time",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
        }
      },
      "required": [
        "since",
        "until"
      ],
      "additionalProperties": false
    }
  },
  "additionalProperties": false
}

Service output

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "items": {
      "maxItems": 100,
      "type": "array",
      "items": {
        "oneOf": [
          {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
              },
              "objective_id": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
              },
              "title": {
                "type": "string"
              },
              "description": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "metric_type": {
                "type": "string",
                "const": "number"
              },
              "start_value": {
                "type": "number"
              },
              "target_value": {
                "type": "number"
              },
              "unit": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "UI label: Unit. Used by Number and Performance results."
              },
              "cadence": {
                "type": "null"
              },
              "per": {
                "type": "null"
              },
              "since": {
                "type": "null"
              },
              "status": {
                "type": "string",
                "enum": [
                  "in_progress",
                  "completed"
                ],
                "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
              },
              "created_at": {
                "type": "string",
                "format": "date-time",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
              },
              "short_code": {
                "type": "string",
                "minLength": 1
              },
              "url": {
                "type": "string",
                "format": "uri"
              },
              "current_value": {
                "type": "number",
                "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
              },
              "boundary_value": {
                "type": "number"
              },
              "progress_pct": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "boundary_progress_pct": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "movement": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "movement_pp": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "evidence_count": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "last_recorded_at": {
                "anyOf": [
                  {
                    "type": "string",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "habit_expected_since_boundary": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 9007199254740991
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "habit_logs_since_boundary": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 9007199254740991
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "performance_share": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "required": [
              "id",
              "objective_id",
              "title",
              "description",
              "metric_type",
              "start_value",
              "target_value",
              "unit",
              "cadence",
              "per",
              "since",
              "status",
              "created_at",
              "short_code",
              "url",
              "current_value",
              "boundary_value",
              "progress_pct",
              "boundary_progress_pct",
              "movement",
              "movement_pp",
              "evidence_count",
              "last_recorded_at",
              "habit_expected_since_boundary",
              "habit_logs_since_boundary",
              "performance_share"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
              },
              "objective_id": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
              },
              "title": {
                "type": "string"
              },
              "description": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "metric_type": {
                "type": "string",
                "const": "percentage"
              },
              "start_value": {
                "type": "number",
                "minimum": 0,
                "maximum": 100
              },
              "target_value": {
                "type": "number",
                "minimum": 0,
                "maximum": 100
              },
              "unit": {
                "type": "null"
              },
              "cadence": {
                "type": "null"
              },
              "per": {
                "type": "null"
              },
              "since": {
                "type": "null"
              },
              "status": {
                "type": "string",
                "enum": [
                  "in_progress",
                  "completed"
                ],
                "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
              },
              "created_at": {
                "type": "string",
                "format": "date-time",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
              },
              "short_code": {
                "type": "string",
                "minLength": 1
              },
              "url": {
                "type": "string",
                "format": "uri"
              },
              "current_value": {
                "type": "number",
                "minimum": 0,
                "maximum": 100
              },
              "boundary_value": {
                "type": "number",
                "minimum": 0,
                "maximum": 100
              },
              "progress_pct": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "boundary_progress_pct": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "movement": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "movement_pp": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "evidence_count": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "last_recorded_at": {
                "anyOf": [
                  {
                    "type": "string",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "habit_expected_since_boundary": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 9007199254740991
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "habit_logs_since_boundary": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 9007199254740991
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "performance_share": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "required": [
              "id",
              "objective_id",
              "title",
              "description",
              "metric_type",
              "start_value",
              "target_value",
              "unit",
              "cadence",
              "per",
              "since",
              "status",
              "created_at",
              "short_code",
              "url",
              "current_value",
              "boundary_value",
              "progress_pct",
              "boundary_progress_pct",
              "movement",
              "movement_pp",
              "evidence_count",
              "last_recorded_at",
              "habit_expected_since_boundary",
              "habit_logs_since_boundary",
              "performance_share"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
              },
              "objective_id": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
              },
              "title": {
                "type": "string"
              },
              "description": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "metric_type": {
                "type": "string",
                "const": "milestone"
              },
              "start_value": {
                "type": "number",
                "const": 0
              },
              "target_value": {
                "type": "number",
                "const": 1
              },
              "unit": {
                "type": "null"
              },
              "cadence": {
                "type": "null"
              },
              "per": {
                "type": "null"
              },
              "since": {
                "type": "null"
              },
              "status": {
                "type": "string",
                "enum": [
                  "in_progress",
                  "completed"
                ],
                "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
              },
              "created_at": {
                "type": "string",
                "format": "date-time",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
              },
              "short_code": {
                "type": "string",
                "minLength": 1
              },
              "url": {
                "type": "string",
                "format": "uri"
              },
              "current_value": {
                "anyOf": [
                  {
                    "type": "number",
                    "const": 0
                  },
                  {
                    "type": "number",
                    "const": 1
                  }
                ]
              },
              "boundary_value": {
                "anyOf": [
                  {
                    "type": "number",
                    "const": 0
                  },
                  {
                    "type": "number",
                    "const": 1
                  }
                ]
              },
              "progress_pct": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "boundary_progress_pct": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "movement": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "movement_pp": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "evidence_count": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "last_recorded_at": {
                "anyOf": [
                  {
                    "type": "string",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "habit_expected_since_boundary": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 9007199254740991
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "habit_logs_since_boundary": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 9007199254740991
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "performance_share": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "required": [
              "id",
              "objective_id",
              "title",
              "description",
              "metric_type",
              "start_value",
              "target_value",
              "unit",
              "cadence",
              "per",
              "since",
              "status",
              "created_at",
              "short_code",
              "url",
              "current_value",
              "boundary_value",
              "progress_pct",
              "boundary_progress_pct",
              "movement",
              "movement_pp",
              "evidence_count",
              "last_recorded_at",
              "habit_expected_since_boundary",
              "habit_logs_since_boundary",
              "performance_share"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
              },
              "objective_id": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
              },
              "title": {
                "type": "string"
              },
              "description": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "metric_type": {
                "type": "string",
                "const": "habit"
              },
              "start_value": {
                "type": "number",
                "const": 0
              },
              "target_value": {
                "type": "number",
                "const": 100
              },
              "unit": {
                "type": "null"
              },
              "cadence": {
                "type": "string",
                "enum": [
                  "weekly",
                  "monthly"
                ],
                "description": "UI label: Cadence. Weekly or Monthly; per supplies the Times value."
              },
              "per": {
                "type": "integer",
                "exclusiveMinimum": 0,
                "maximum": 9007199254740991
              },
              "since": {
                "type": "string",
                "format": "date",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                "description": "Calendar date as YYYY-MM-DD in the profile timezone."
              },
              "status": {
                "type": "string",
                "enum": [
                  "in_progress",
                  "completed"
                ],
                "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
              },
              "created_at": {
                "type": "string",
                "format": "date-time",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
              },
              "short_code": {
                "type": "string",
                "minLength": 1
              },
              "url": {
                "type": "string",
                "format": "uri"
              },
              "current_value": {
                "type": "number",
                "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
              },
              "boundary_value": {
                "type": "number"
              },
              "progress_pct": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "boundary_progress_pct": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "movement": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "movement_pp": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "evidence_count": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "last_recorded_at": {
                "anyOf": [
                  {
                    "type": "string",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "habit_expected_since_boundary": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 9007199254740991
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "habit_logs_since_boundary": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 9007199254740991
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "performance_share": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "required": [
              "id",
              "objective_id",
              "title",
              "description",
              "metric_type",
              "start_value",
              "target_value",
              "unit",
              "cadence",
              "per",
              "since",
              "status",
              "created_at",
              "short_code",
              "url",
              "current_value",
              "boundary_value",
              "progress_pct",
              "boundary_progress_pct",
              "movement",
              "movement_pp",
              "evidence_count",
              "last_recorded_at",
              "habit_expected_since_boundary",
              "habit_logs_since_boundary",
              "performance_share"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
              },
              "objective_id": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
              },
              "title": {
                "type": "string"
              },
              "description": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "metric_type": {
                "type": "string",
                "const": "performance"
              },
              "start_value": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "UI label: Start. Metric baseline; habit baselines are derived rather than stored."
              },
              "target_value": {
                "type": "number"
              },
              "unit": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "UI label: Unit. Used by Number and Performance results."
              },
              "cadence": {
                "type": "null"
              },
              "per": {
                "type": "null"
              },
              "since": {
                "type": "string",
                "format": "date",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                "description": "Calendar date as YYYY-MM-DD in the profile timezone."
              },
              "status": {
                "type": "string",
                "enum": [
                  "in_progress",
                  "completed"
                ],
                "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
              },
              "created_at": {
                "type": "string",
                "format": "date-time",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
              },
              "short_code": {
                "type": "string",
                "minLength": 1
              },
              "url": {
                "type": "string",
                "format": "uri"
              },
              "current_value": {
                "type": "number",
                "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
              },
              "boundary_value": {
                "type": "number"
              },
              "progress_pct": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "boundary_progress_pct": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "movement": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "movement_pp": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "evidence_count": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "last_recorded_at": {
                "anyOf": [
                  {
                    "type": "string",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "habit_expected_since_boundary": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 9007199254740991
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "habit_logs_since_boundary": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 9007199254740991
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "performance_share": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "required": [
              "id",
              "objective_id",
              "title",
              "description",
              "metric_type",
              "start_value",
              "target_value",
              "unit",
              "cadence",
              "per",
              "since",
              "status",
              "created_at",
              "short_code",
              "url",
              "current_value",
              "boundary_value",
              "progress_pct",
              "boundary_progress_pct",
              "movement",
              "movement_pp",
              "evidence_count",
              "last_recorded_at",
              "habit_expected_since_boundary",
              "habit_logs_since_boundary",
              "performance_share"
            ],
            "additionalProperties": false
          }
        ]
      }
    },
    "next_cursor": {
      "anyOf": [
        {
          "type": "string",
          "minLength": 1
        },
        {
          "type": "null"
        }
      ]
    }
  },
  "required": [
    "items",
    "next_cursor"
  ],
  "additionalProperties": false
}
Public MCP input/output shapes for comparison
[
  {
    "tool": "result_read",
    "collection": "results",
    "specification": "docs/feature-specs/F4-results.md#mcp-source-mapping--selected-target",
    "operation": "list",
    "binding": "planned",
    "mode": "adapted",
    "readiness": "contract-only",
    "services": [
      "results.list"
    ],
    "gap": null,
    "projection": "Project record.result and changed on writes; history preserves its resolved window, kind and cursor; list preserves parent/attention filters.",
    "input": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "oneOf": [
        {
          "type": "object",
          "properties": {
            "cursor": {
              "type": "string",
              "minLength": 1
            },
            "limit": {
              "default": 20,
              "type": "integer",
              "minimum": 1,
              "maximum": 100
            },
            "objective_id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "cycle_id": {
              "description": "List results across one cycle instead of a single objective. Supply exactly one parent selector.",
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
            },
            "attention": {
              "description": "Optional briefing subset: no evidence ever, no update in the window, or habit with no mark in the window.",
              "type": "string",
              "enum": [
                "never_updated",
                "silent",
                "unmarked"
              ]
            },
            "window": {
              "description": "Required for silent/unmarked attention. Use exact server-resolved briefing bounds; current result figures remain current.",
              "type": "object",
              "properties": {
                "since": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "until": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                }
              },
              "required": [
                "since",
                "until"
              ],
              "additionalProperties": false
            },
            "operation": {
              "type": "string",
              "const": "list"
            }
          },
          "required": [
            "operation"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "operation": {
              "type": "string",
              "const": "get"
            }
          },
          "required": [
            "id",
            "operation"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "cursor": {
              "type": "string",
              "minLength": 1
            },
            "limit": {
              "default": 20,
              "type": "integer",
              "minimum": 1,
              "maximum": 100
            },
            "result_id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "operation": {
              "type": "string",
              "const": "history"
            },
            "kind": {
              "type": "string",
              "enum": [
                "result_logs",
                "habit_logs",
                "trend"
              ],
              "description": "Evidence stream to page; get returns current figures regardless of this window."
            },
            "window": {
              "type": "object",
              "properties": {
                "since": {
                  "description": "Inclusive lower bound. Default: last completed session, falling back to active-cycle start. Date-only values use the profile timezone.",
                  "anyOf": [
                    {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "date",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                          "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                        },
                        {
                          "type": "string",
                          "format": "date-time",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                        }
                      ]
                    },
                    {
                      "type": "string",
                      "enum": [
                        "last_session",
                        "cycle_start"
                      ]
                    }
                  ]
                },
                "until": {
                  "description": "Exclusive upper bound; default is the server time captured on the first page.",
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                      "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                    },
                    {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    }
                  ]
                }
              },
              "additionalProperties": false
            }
          },
          "required": [
            "result_id",
            "operation",
            "kind"
          ],
          "additionalProperties": false
        }
      ]
    },
    "output": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "items": {
              "maxItems": 100,
              "type": "array",
              "items": {
                "oneOf": [
                  {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      "objective_id": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      "title": {
                        "type": "string"
                      },
                      "description": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "metric_type": {
                        "type": "string",
                        "const": "number"
                      },
                      "start_value": {
                        "type": "number"
                      },
                      "target_value": {
                        "type": "number"
                      },
                      "unit": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "UI label: Unit. Used by Number and Performance results."
                      },
                      "cadence": {
                        "type": "null"
                      },
                      "per": {
                        "type": "null"
                      },
                      "since": {
                        "type": "null"
                      },
                      "status": {
                        "type": "string",
                        "enum": [
                          "in_progress",
                          "completed"
                        ],
                        "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                      },
                      "created_at": {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      "short_code": {
                        "type": "string",
                        "minLength": 1
                      },
                      "url": {
                        "type": "string",
                        "format": "uri"
                      },
                      "current_value": {
                        "type": "number",
                        "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                      },
                      "boundary_value": {
                        "type": "number"
                      },
                      "progress_pct": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "boundary_progress_pct": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "movement": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "movement_pp": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "evidence_count": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      },
                      "last_recorded_at": {
                        "anyOf": [
                          {
                            "type": "string",
                            "format": "date-time",
                            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "habit_expected_since_boundary": {
                        "anyOf": [
                          {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "habit_logs_since_boundary": {
                        "anyOf": [
                          {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "performance_share": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "required": [
                      "id",
                      "objective_id",
                      "title",
                      "description",
                      "metric_type",
                      "start_value",
                      "target_value",
                      "unit",
                      "cadence",
                      "per",
                      "since",
                      "status",
                      "created_at",
                      "short_code",
                      "url",
                      "current_value",
                      "boundary_value",
                      "progress_pct",
                      "boundary_progress_pct",
                      "movement",
                      "movement_pp",
                      "evidence_count",
                      "last_recorded_at",
                      "habit_expected_since_boundary",
                      "habit_logs_since_boundary",
                      "performance_share"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      "objective_id": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      "title": {
                        "type": "string"
                      },
                      "description": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "metric_type": {
                        "type": "string",
                        "const": "percentage"
                      },
                      "start_value": {
                        "type": "number",
                        "minimum": 0,
                        "maximum": 100
                      },
                      "target_value": {
                        "type": "number",
                        "minimum": 0,
                        "maximum": 100
                      },
                      "unit": {
                        "type": "null"
                      },
                      "cadence": {
                        "type": "null"
                      },
                      "per": {
                        "type": "null"
                      },
                      "since": {
                        "type": "null"
                      },
                      "status": {
                        "type": "string",
                        "enum": [
                          "in_progress",
                          "completed"
                        ],
                        "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                      },
                      "created_at": {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      "short_code": {
                        "type": "string",
                        "minLength": 1
                      },
                      "url": {
                        "type": "string",
                        "format": "uri"
                      },
                      "current_value": {
                        "type": "number",
                        "minimum": 0,
                        "maximum": 100
                      },
                      "boundary_value": {
                        "type": "number",
                        "minimum": 0,
                        "maximum": 100
                      },
                      "progress_pct": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "boundary_progress_pct": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "movement": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "movement_pp": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "evidence_count": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      },
                      "last_recorded_at": {
                        "anyOf": [
                          {
                            "type": "string",
                            "format": "date-time",
                            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "habit_expected_since_boundary": {
                        "anyOf": [
                          {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "habit_logs_since_boundary": {
                        "anyOf": [
                          {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "performance_share": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "required": [
                      "id",
                      "objective_id",
                      "title",
                      "description",
                      "metric_type",
                      "start_value",
                      "target_value",
                      "unit",
                      "cadence",
                      "per",
                      "since",
                      "status",
                      "created_at",
                      "short_code",
                      "url",
                      "current_value",
                      "boundary_value",
                      "progress_pct",
                      "boundary_progress_pct",
                      "movement",
                      "movement_pp",
                      "evidence_count",
                      "last_recorded_at",
                      "habit_expected_since_boundary",
                      "habit_logs_since_boundary",
                      "performance_share"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      "objective_id": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      "title": {
                        "type": "string"
                      },
                      "description": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "metric_type": {
                        "type": "string",
                        "const": "milestone"
                      },
                      "start_value": {
                        "type": "number",
                        "const": 0
                      },
                      "target_value": {
                        "type": "number",
                        "const": 1
                      },
                      "unit": {
                        "type": "null"
                      },
                      "cadence": {
                        "type": "null"
                      },
                      "per": {
                        "type": "null"
                      },
                      "since": {
                        "type": "null"
                      },
                      "status": {
                        "type": "string",
                        "enum": [
                          "in_progress",
                          "completed"
                        ],
                        "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                      },
                      "created_at": {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      "short_code": {
                        "type": "string",
                        "minLength": 1
                      },
                      "url": {
                        "type": "string",
                        "format": "uri"
                      },
                      "current_value": {
                        "anyOf": [
                          {
                            "type": "number",
                            "const": 0
                          },
                          {
                            "type": "number",
                            "const": 1
                          }
                        ]
                      },
                      "boundary_value": {
                        "anyOf": [
                          {
                            "type": "number",
                            "const": 0
                          },
                          {
                            "type": "number",
                            "const": 1
                          }
                        ]
                      },
                      "progress_pct": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "boundary_progress_pct": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "movement": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "movement_pp": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "evidence_count": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      },
                      "last_recorded_at": {
                        "anyOf": [
                          {
                            "type": "string",
                            "format": "date-time",
                            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "habit_expected_since_boundary": {
                        "anyOf": [
                          {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "habit_logs_since_boundary": {
                        "anyOf": [
                          {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "performance_share": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "required": [
                      "id",
                      "objective_id",
                      "title",
                      "description",
                      "metric_type",
                      "start_value",
                      "target_value",
                      "unit",
                      "cadence",
                      "per",
                      "since",
                      "status",
                      "created_at",
                      "short_code",
                      "url",
                      "current_value",
                      "boundary_value",
                      "progress_pct",
                      "boundary_progress_pct",
                      "movement",
                      "movement_pp",
                      "evidence_count",
                      "last_recorded_at",
                      "habit_expected_since_boundary",
                      "habit_logs_since_boundary",
                      "performance_share"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      "objective_id": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      "title": {
                        "type": "string"
                      },
                      "description": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "metric_type": {
                        "type": "string",
                        "const": "habit"
                      },
                      "start_value": {
                        "type": "number",
                        "const": 0
                      },
                      "target_value": {
                        "type": "number",
                        "const": 100
                      },
                      "unit": {
                        "type": "null"
                      },
                      "cadence": {
                        "type": "string",
                        "enum": [
                          "weekly",
                          "monthly"
                        ],
                        "description": "UI label: Cadence. Weekly or Monthly; per supplies the Times value."
                      },
                      "per": {
                        "type": "integer",
                        "exclusiveMinimum": 0,
                        "maximum": 9007199254740991
                      },
                      "since": {
                        "type": "string",
                        "format": "date",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                        "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                      },
                      "status": {
                        "type": "string",
                        "enum": [
                          "in_progress",
                          "completed"
                        ],
                        "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                      },
                      "created_at": {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      "short_code": {
                        "type": "string",
                        "minLength": 1
                      },
                      "url": {
                        "type": "string",
                        "format": "uri"
                      },
                      "current_value": {
                        "type": "number",
                        "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                      },
                      "boundary_value": {
                        "type": "number"
                      },
                      "progress_pct": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "boundary_progress_pct": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "movement": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "movement_pp": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "evidence_count": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      },
                      "last_recorded_at": {
                        "anyOf": [
                          {
                            "type": "string",
                            "format": "date-time",
                            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "habit_expected_since_boundary": {
                        "anyOf": [
                          {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "habit_logs_since_boundary": {
                        "anyOf": [
                          {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "performance_share": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "required": [
                      "id",
                      "objective_id",
                      "title",
                      "description",
                      "metric_type",
                      "start_value",
                      "target_value",
                      "unit",
                      "cadence",
                      "per",
                      "since",
                      "status",
                      "created_at",
                      "short_code",
                      "url",
                      "current_value",
                      "boundary_value",
                      "progress_pct",
                      "boundary_progress_pct",
                      "movement",
                      "movement_pp",
                      "evidence_count",
                      "last_recorded_at",
                      "habit_expected_since_boundary",
                      "habit_logs_since_boundary",
                      "performance_share"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      "objective_id": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      "title": {
                        "type": "string"
                      },
                      "description": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "metric_type": {
                        "type": "string",
                        "const": "performance"
                      },
                      "start_value": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "UI label: Start. Metric baseline; habit baselines are derived rather than stored."
                      },
                      "target_value": {
                        "type": "number"
                      },
                      "unit": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "UI label: Unit. Used by Number and Performance results."
                      },
                      "cadence": {
                        "type": "null"
                      },
                      "per": {
                        "type": "null"
                      },
                      "since": {
                        "type": "string",
                        "format": "date",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                        "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                      },
                      "status": {
                        "type": "string",
                        "enum": [
                          "in_progress",
                          "completed"
                        ],
                        "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                      },
                      "created_at": {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      "short_code": {
                        "type": "string",
                        "minLength": 1
                      },
                      "url": {
                        "type": "string",
                        "format": "uri"
                      },
                      "current_value": {
                        "type": "number",
                        "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                      },
                      "boundary_value": {
                        "type": "number"
                      },
                      "progress_pct": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "boundary_progress_pct": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "movement": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "movement_pp": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "evidence_count": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      },
                      "last_recorded_at": {
                        "anyOf": [
                          {
                            "type": "string",
                            "format": "date-time",
                            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "habit_expected_since_boundary": {
                        "anyOf": [
                          {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "habit_logs_since_boundary": {
                        "anyOf": [
                          {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "performance_share": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "required": [
                      "id",
                      "objective_id",
                      "title",
                      "description",
                      "metric_type",
                      "start_value",
                      "target_value",
                      "unit",
                      "cadence",
                      "per",
                      "since",
                      "status",
                      "created_at",
                      "short_code",
                      "url",
                      "current_value",
                      "boundary_value",
                      "progress_pct",
                      "boundary_progress_pct",
                      "movement",
                      "movement_pp",
                      "evidence_count",
                      "last_recorded_at",
                      "habit_expected_since_boundary",
                      "habit_logs_since_boundary",
                      "performance_share"
                    ],
                    "additionalProperties": false
                  }
                ]
              }
            },
            "next_cursor": {
              "anyOf": [
                {
                  "type": "string",
                  "minLength": 1
                },
                {
                  "type": "null"
                }
              ]
            },
            "continuation": {
              "anyOf": [
                {
                  "type": "object",
                  "properties": {
                    "tool": {
                      "type": "string",
                      "const": "result_read"
                    },
                    "arguments": {
                      "type": "object",
                      "properties": {
                        "cursor": {
                          "type": "string",
                          "minLength": 1
                        },
                        "limit": {
                          "type": "integer",
                          "minimum": 1,
                          "maximum": 100
                        },
                        "objective_id": {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                        },
                        "cycle_id": {
                          "description": "List results across one cycle instead of a single objective. Supply exactly one parent selector.",
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                        },
                        "attention": {
                          "description": "Optional briefing subset: no evidence ever, no update in the window, or habit with no mark in the window.",
                          "type": "string",
                          "enum": [
                            "never_updated",
                            "silent",
                            "unmarked"
                          ]
                        },
                        "window": {
                          "description": "Required for silent/unmarked attention. Use exact server-resolved briefing bounds; current result figures remain current.",
                          "type": "object",
                          "properties": {
                            "since": {
                              "type": "string",
                              "format": "date-time",
                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                            },
                            "until": {
                              "type": "string",
                              "format": "date-time",
                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                            }
                          },
                          "required": [
                            "since",
                            "until"
                          ],
                          "additionalProperties": false
                        },
                        "operation": {
                          "type": "string",
                          "const": "list"
                        }
                      },
                      "required": [
                        "cursor",
                        "limit",
                        "operation"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "required": [
                    "tool",
                    "arguments"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "null"
                }
              ]
            },
            "operation": {
              "type": "string",
              "const": "list"
            }
          },
          "required": [
            "items",
            "next_cursor",
            "continuation",
            "operation"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "operation": {
              "type": "string",
              "const": "get"
            },
            "result": {
              "oneOf": [
                {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    "objective_id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    "title": {
                      "type": "string"
                    },
                    "description": {
                      "anyOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "metric_type": {
                      "type": "string",
                      "const": "number"
                    },
                    "start_value": {
                      "type": "number"
                    },
                    "target_value": {
                      "type": "number"
                    },
                    "unit": {
                      "anyOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "null"
                        }
                      ],
                      "description": "UI label: Unit. Used by Number and Performance results."
                    },
                    "cadence": {
                      "type": "null"
                    },
                    "per": {
                      "type": "null"
                    },
                    "since": {
                      "type": "null"
                    },
                    "status": {
                      "type": "string",
                      "enum": [
                        "in_progress",
                        "completed"
                      ],
                      "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                    },
                    "created_at": {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    "short_code": {
                      "type": "string",
                      "minLength": 1
                    },
                    "url": {
                      "type": "string",
                      "format": "uri"
                    },
                    "current_value": {
                      "type": "number",
                      "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                    },
                    "boundary_value": {
                      "type": "number"
                    },
                    "progress_pct": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "boundary_progress_pct": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "movement": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "movement_pp": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "evidence_count": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    "last_recorded_at": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "date-time",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "habit_expected_since_boundary": {
                      "anyOf": [
                        {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "habit_logs_since_boundary": {
                      "anyOf": [
                        {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "performance_share": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "id",
                    "objective_id",
                    "title",
                    "description",
                    "metric_type",
                    "start_value",
                    "target_value",
                    "unit",
                    "cadence",
                    "per",
                    "since",
                    "status",
                    "created_at",
                    "short_code",
                    "url",
                    "current_value",
                    "boundary_value",
                    "progress_pct",
                    "boundary_progress_pct",
                    "movement",
                    "movement_pp",
                    "evidence_count",
                    "last_recorded_at",
                    "habit_expected_since_boundary",
                    "habit_logs_since_boundary",
                    "performance_share"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    "objective_id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    "title": {
                      "type": "string"
                    },
                    "description": {
                      "anyOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "metric_type": {
                      "type": "string",
                      "const": "percentage"
                    },
                    "start_value": {
                      "type": "number",
                      "minimum": 0,
                      "maximum": 100
                    },
                    "target_value": {
                      "type": "number",
                      "minimum": 0,
                      "maximum": 100
                    },
                    "unit": {
                      "type": "null"
                    },
                    "cadence": {
                      "type": "null"
                    },
                    "per": {
                      "type": "null"
                    },
                    "since": {
                      "type": "null"
                    },
                    "status": {
                      "type": "string",
                      "enum": [
                        "in_progress",
                        "completed"
                      ],
                      "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                    },
                    "created_at": {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    "short_code": {
                      "type": "string",
                      "minLength": 1
                    },
                    "url": {
                      "type": "string",
                      "format": "uri"
                    },
                    "current_value": {
                      "type": "number",
                      "minimum": 0,
                      "maximum": 100
                    },
                    "boundary_value": {
                      "type": "number",
                      "minimum": 0,
                      "maximum": 100
                    },
                    "progress_pct": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "boundary_progress_pct": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "movement": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "movement_pp": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "evidence_count": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    "last_recorded_at": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "date-time",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "habit_expected_since_boundary": {
                      "anyOf": [
                        {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "habit_logs_since_boundary": {
                      "anyOf": [
                        {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "performance_share": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "id",
                    "objective_id",
                    "title",
                    "description",
                    "metric_type",
                    "start_value",
                    "target_value",
                    "unit",
                    "cadence",
                    "per",
                    "since",
                    "status",
                    "created_at",
                    "short_code",
                    "url",
                    "current_value",
                    "boundary_value",
                    "progress_pct",
                    "boundary_progress_pct",
                    "movement",
                    "movement_pp",
                    "evidence_count",
                    "last_recorded_at",
                    "habit_expected_since_boundary",
                    "habit_logs_since_boundary",
                    "performance_share"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    "objective_id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    "title": {
                      "type": "string"
                    },
                    "description": {
                      "anyOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "metric_type": {
                      "type": "string",
                      "const": "milestone"
                    },
                    "start_value": {
                      "type": "number",
                      "const": 0
                    },
                    "target_value": {
                      "type": "number",
                      "const": 1
                    },
                    "unit": {
                      "type": "null"
                    },
                    "cadence": {
                      "type": "null"
                    },
                    "per": {
                      "type": "null"
                    },
                    "since": {
                      "type": "null"
                    },
                    "status": {
                      "type": "string",
                      "enum": [
                        "in_progress",
                        "completed"
                      ],
                      "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                    },
                    "created_at": {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    "short_code": {
                      "type": "string",
                      "minLength": 1
                    },
                    "url": {
                      "type": "string",
                      "format": "uri"
                    },
                    "current_value": {
                      "anyOf": [
                        {
                          "type": "number",
                          "const": 0
                        },
                        {
                          "type": "number",
                          "const": 1
                        }
                      ]
                    },
                    "boundary_value": {
                      "anyOf": [
                        {
                          "type": "number",
                          "const": 0
                        },
                        {
                          "type": "number",
                          "const": 1
                        }
                      ]
                    },
                    "progress_pct": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "boundary_progress_pct": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "movement": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "movement_pp": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "evidence_count": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    "last_recorded_at": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "date-time",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "habit_expected_since_boundary": {
                      "anyOf": [
                        {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "habit_logs_since_boundary": {
                      "anyOf": [
                        {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "performance_share": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "id",
                    "objective_id",
                    "title",
                    "description",
                    "metric_type",
                    "start_value",
                    "target_value",
                    "unit",
                    "cadence",
                    "per",
                    "since",
                    "status",
                    "created_at",
                    "short_code",
                    "url",
                    "current_value",
                    "boundary_value",
                    "progress_pct",
                    "boundary_progress_pct",
                    "movement",
                    "movement_pp",
                    "evidence_count",
                    "last_recorded_at",
                    "habit_expected_since_boundary",
                    "habit_logs_since_boundary",
                    "performance_share"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    "objective_id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    "title": {
                      "type": "string"
                    },
                    "description": {
                      "anyOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "metric_type": {
                      "type": "string",
                      "const": "habit"
                    },
                    "start_value": {
                      "type": "number",
                      "const": 0
                    },
                    "target_value": {
                      "type": "number",
                      "const": 100
                    },
                    "unit": {
                      "type": "null"
                    },
                    "cadence": {
                      "type": "string",
                      "enum": [
                        "weekly",
                        "monthly"
                      ],
                      "description": "UI label: Cadence. Weekly or Monthly; per supplies the Times value."
                    },
                    "per": {
                      "type": "integer",
                      "exclusiveMinimum": 0,
                      "maximum": 9007199254740991
                    },
                    "since": {
                      "type": "string",
                      "format": "date",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                      "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                    },
                    "status": {
                      "type": "string",
                      "enum": [
                        "in_progress",
                        "completed"
                      ],
                      "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                    },
                    "created_at": {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    "short_code": {
                      "type": "string",
                      "minLength": 1
                    },
                    "url": {
                      "type": "string",
                      "format": "uri"
                    },
                    "current_value": {
                      "type": "number",
                      "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                    },
                    "boundary_value": {
                      "type": "number"
                    },
                    "progress_pct": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "boundary_progress_pct": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "movement": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "movement_pp": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "evidence_count": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    "last_recorded_at": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "date-time",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "habit_expected_since_boundary": {
                      "anyOf": [
                        {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "habit_logs_since_boundary": {
                      "anyOf": [
                        {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "performance_share": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "id",
                    "objective_id",
                    "title",
                    "description",
                    "metric_type",
                    "start_value",
                    "target_value",
                    "unit",
                    "cadence",
                    "per",
                    "since",
                    "status",
                    "created_at",
                    "short_code",
                    "url",
                    "current_value",
                    "boundary_value",
                    "progress_pct",
                    "boundary_progress_pct",
                    "movement",
                    "movement_pp",
                    "evidence_count",
                    "last_recorded_at",
                    "habit_expected_since_boundary",
                    "habit_logs_since_boundary",
                    "performance_share"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    "objective_id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    "title": {
                      "type": "string"
                    },
                    "description": {
                      "anyOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "metric_type": {
                      "type": "string",
                      "const": "performance"
                    },
                    "start_value": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ],
                      "description": "UI label: Start. Metric baseline; habit baselines are derived rather than stored."
                    },
                    "target_value": {
                      "type": "number"
                    },
                    "unit": {
                      "anyOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "null"
                        }
                      ],
                      "description": "UI label: Unit. Used by Number and Performance results."
                    },
                    "cadence": {
                      "type": "null"
                    },
                    "per": {
                      "type": "null"
                    },
                    "since": {
                      "type": "string",
                      "format": "date",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                      "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                    },
                    "status": {
                      "type": "string",
                      "enum": [
                        "in_progress",
                        "completed"
                      ],
                      "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                    },
                    "created_at": {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    "short_code": {
                      "type": "string",
                      "minLength": 1
                    },
                    "url": {
                      "type": "string",
                      "format": "uri"
                    },
                    "current_value": {
                      "type": "number",
                      "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                    },
                    "boundary_value": {
                      "type": "number"
                    },
                    "progress_pct": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "boundary_progress_pct": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "movement": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "movement_pp": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "evidence_count": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    "last_recorded_at": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "date-time",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "habit_expected_since_boundary": {
                      "anyOf": [
                        {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "habit_logs_since_boundary": {
                      "anyOf": [
                        {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "performance_share": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "id",
                    "objective_id",
                    "title",
                    "description",
                    "metric_type",
                    "start_value",
                    "target_value",
                    "unit",
                    "cadence",
                    "per",
                    "since",
                    "status",
                    "created_at",
                    "short_code",
                    "url",
                    "current_value",
                    "boundary_value",
                    "progress_pct",
                    "boundary_progress_pct",
                    "movement",
                    "movement_pp",
                    "evidence_count",
                    "last_recorded_at",
                    "habit_expected_since_boundary",
                    "habit_logs_since_boundary",
                    "performance_share"
                  ],
                  "additionalProperties": false
                }
              ]
            }
          },
          "required": [
            "operation",
            "result"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "items": {
              "maxItems": 100,
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "result_id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "value": {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "comment": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "session_id": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "recorded_at": {
                    "type": "string",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                  }
                },
                "required": [
                  "id",
                  "result_id",
                  "value",
                  "comment",
                  "session_id",
                  "recorded_at"
                ],
                "additionalProperties": false,
                "description": "Result log stored in result_logs. The UI shows value entries under Updates and their non-empty comments under Comments. Value may be null for a comment-only habit entry; evidence and timestamps are immutable."
              }
            },
            "next_cursor": {
              "anyOf": [
                {
                  "type": "string",
                  "minLength": 1
                },
                {
                  "type": "null"
                }
              ]
            },
            "continuation": {
              "anyOf": [
                {
                  "type": "object",
                  "properties": {
                    "tool": {
                      "type": "string",
                      "const": "result_read"
                    },
                    "arguments": {
                      "type": "object",
                      "properties": {
                        "cursor": {
                          "type": "string",
                          "minLength": 1
                        },
                        "limit": {
                          "type": "integer",
                          "minimum": 1,
                          "maximum": 100
                        },
                        "result_id": {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                        },
                        "operation": {
                          "type": "string",
                          "const": "history"
                        },
                        "kind": {
                          "type": "string",
                          "const": "result_logs"
                        },
                        "window": {
                          "type": "object",
                          "properties": {
                            "since": {
                              "type": "string",
                              "format": "date-time",
                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                            },
                            "until": {
                              "type": "string",
                              "format": "date-time",
                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                            }
                          },
                          "required": [
                            "since",
                            "until"
                          ],
                          "additionalProperties": false
                        }
                      },
                      "required": [
                        "cursor",
                        "limit",
                        "result_id",
                        "operation",
                        "kind",
                        "window"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "required": [
                    "tool",
                    "arguments"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "null"
                }
              ]
            },
            "operation": {
              "type": "string",
              "const": "history"
            },
            "kind": {
              "type": "string",
              "const": "result_logs"
            },
            "result_id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "window": {
              "type": "object",
              "properties": {
                "since": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "until": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                }
              },
              "required": [
                "since",
                "until"
              ],
              "additionalProperties": false
            }
          },
          "required": [
            "items",
            "next_cursor",
            "continuation",
            "operation",
            "kind",
            "result_id",
            "window"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "items": {
              "maxItems": 100,
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "result_id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "day": {
                    "type": "string",
                    "format": "date",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                    "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                  },
                  "session_id": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "created_at": {
                    "type": "string",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                  }
                },
                "required": [
                  "id",
                  "result_id",
                  "day",
                  "session_id",
                  "created_at"
                ],
                "additionalProperties": false,
                "description": "Habit log stored in habit_logs. The UI marks calendar days and lists them under Updates with the Marked column. One row per result/day; unmarking deletes the row. This is not append-only history."
              }
            },
            "next_cursor": {
              "anyOf": [
                {
                  "type": "string",
                  "minLength": 1
                },
                {
                  "type": "null"
                }
              ]
            },
            "continuation": {
              "anyOf": [
                {
                  "type": "object",
                  "properties": {
                    "tool": {
                      "type": "string",
                      "const": "result_read"
                    },
                    "arguments": {
                      "type": "object",
                      "properties": {
                        "cursor": {
                          "type": "string",
                          "minLength": 1
                        },
                        "limit": {
                          "type": "integer",
                          "minimum": 1,
                          "maximum": 100
                        },
                        "result_id": {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                        },
                        "operation": {
                          "type": "string",
                          "const": "history"
                        },
                        "kind": {
                          "type": "string",
                          "const": "habit_logs"
                        },
                        "window": {
                          "type": "object",
                          "properties": {
                            "since": {
                              "type": "string",
                              "format": "date-time",
                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                            },
                            "until": {
                              "type": "string",
                              "format": "date-time",
                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                            }
                          },
                          "required": [
                            "since",
                            "until"
                          ],
                          "additionalProperties": false
                        }
                      },
                      "required": [
                        "cursor",
                        "limit",
                        "result_id",
                        "operation",
                        "kind",
                        "window"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "required": [
                    "tool",
                    "arguments"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "null"
                }
              ]
            },
            "operation": {
              "type": "string",
              "const": "history"
            },
            "kind": {
              "type": "string",
              "const": "habit_logs"
            },
            "result_id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "window": {
              "type": "object",
              "properties": {
                "since": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "until": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                }
              },
              "required": [
                "since",
                "until"
              ],
              "additionalProperties": false
            }
          },
          "required": [
            "items",
            "next_cursor",
            "continuation",
            "operation",
            "kind",
            "result_id",
            "window"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "items": {
              "maxItems": 100,
              "type": "array",
              "items": {
                "oneOf": [
                  {
                    "type": "object",
                    "properties": {
                      "kind": {
                        "type": "string",
                        "const": "value"
                      },
                      "at": {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      "value": {
                        "type": "number"
                      },
                      "pace": {
                        "type": "number"
                      }
                    },
                    "required": [
                      "kind",
                      "at",
                      "value",
                      "pace"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "kind": {
                        "type": "string",
                        "const": "habit"
                      },
                      "from": {
                        "type": "string",
                        "format": "date",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                        "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                      },
                      "to": {
                        "type": "string",
                        "format": "date",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                        "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                      },
                      "actual": {
                        "type": "integer",
                        "minimum": -9007199254740991,
                        "maximum": 9007199254740991
                      },
                      "expected": {
                        "type": "number"
                      },
                      "expected_full": {
                        "type": "number"
                      }
                    },
                    "required": [
                      "kind",
                      "from",
                      "to",
                      "actual",
                      "expected",
                      "expected_full"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "kind": {
                        "type": "string",
                        "const": "performance"
                      },
                      "id": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      "at": {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      "value": {
                        "type": "number"
                      },
                      "target": {
                        "type": "number"
                      },
                      "gap": {
                        "type": "number"
                      },
                      "share": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "required": [
                      "kind",
                      "id",
                      "at",
                      "value",
                      "target",
                      "gap",
                      "share"
                    ],
                    "additionalProperties": false
                  }
                ]
              }
            },
            "next_cursor": {
              "anyOf": [
                {
                  "type": "string",
                  "minLength": 1
                },
                {
                  "type": "null"
                }
              ]
            },
            "continuation": {
              "anyOf": [
                {
                  "type": "object",
                  "properties": {
                    "tool": {
                      "type": "string",
                      "const": "result_read"
                    },
                    "arguments": {
                      "type": "object",
                      "properties": {
                        "cursor": {
                          "type": "string",
                          "minLength": 1
                        },
                        "limit": {
                          "type": "integer",
                          "minimum": 1,
                          "maximum": 100
                        },
                        "result_id": {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                        },
                        "operation": {
                          "type": "string",
                          "const": "history"
                        },
                        "kind": {
                          "type": "string",
                          "const": "trend"
                        },
                        "window": {
                          "type": "object",
                          "properties": {
                            "since": {
                              "type": "string",
                              "format": "date-time",
                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                            },
                            "until": {
                              "type": "string",
                              "format": "date-time",
                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                            }
                          },
                          "required": [
                            "since",
                            "until"
                          ],
                          "additionalProperties": false
                        }
                      },
                      "required": [
                        "cursor",
                        "limit",
                        "result_id",
                        "operation",
                        "kind",
                        "window"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "required": [
                    "tool",
                    "arguments"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "null"
                }
              ]
            },
            "operation": {
              "type": "string",
              "const": "history"
            },
            "kind": {
              "type": "string",
              "const": "trend"
            },
            "result_id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "window": {
              "type": "object",
              "properties": {
                "since": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "until": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                }
              },
              "required": [
                "since",
                "until"
              ],
              "additionalProperties": false
            }
          },
          "required": [
            "items",
            "next_cursor",
            "continuation",
            "operation",
            "kind",
            "result_id",
            "window"
          ],
          "additionalProperties": false
        }
      ]
    }
  }
]
results.get · read · contract-only

Feature declaration: getResult

Requirement: docs/feature-specs/F4-results.md · Access: retained-read

Tables: results (read), cycles (read), objectives (read), result_logs (read), habit_logs (read)

Trusted context: authenticated actor

Retry: Safe to retry with the same resolved filters and cursor.

Expected errors: UNAUTHORIZED, BAD_REQUEST, FORBIDDEN, NOT_FOUND, CONFLICT, NOT_IMPLEMENTED, INTERNAL_SERVER_ERROR

API consumers

[
  {
    "operation": "results.get",
    "service": "results.get",
    "binding": "bound"
  }
]

MCP consumers

[
  {
    "tool": "result_read",
    "collection": "results",
    "specification": "docs/feature-specs/F4-results.md#mcp-source-mapping--selected-target",
    "operation": "get",
    "binding": "planned",
    "mode": "adapted",
    "readiness": "contract-only",
    "services": [
      "results.get"
    ],
    "gap": null,
    "projection": "Project record.result and changed on writes; history preserves its resolved window, kind and cursor; list preserves parent/attention filters."
  }
]

Service input

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}

Service output

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "result": {
      "oneOf": [
        {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "objective_id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "title": {
              "type": "string"
            },
            "description": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ]
            },
            "metric_type": {
              "type": "string",
              "const": "number"
            },
            "start_value": {
              "type": "number"
            },
            "target_value": {
              "type": "number"
            },
            "unit": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "UI label: Unit. Used by Number and Performance results."
            },
            "cadence": {
              "type": "null"
            },
            "per": {
              "type": "null"
            },
            "since": {
              "type": "null"
            },
            "status": {
              "type": "string",
              "enum": [
                "in_progress",
                "completed"
              ],
              "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
            },
            "created_at": {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
            },
            "short_code": {
              "type": "string",
              "minLength": 1
            },
            "url": {
              "type": "string",
              "format": "uri"
            },
            "current_value": {
              "type": "number",
              "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
            },
            "boundary_value": {
              "type": "number"
            },
            "progress_pct": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "null"
                }
              ]
            },
            "boundary_progress_pct": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "null"
                }
              ]
            },
            "movement": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "null"
                }
              ]
            },
            "movement_pp": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "null"
                }
              ]
            },
            "evidence_count": {
              "type": "integer",
              "minimum": 0,
              "maximum": 9007199254740991
            },
            "last_recorded_at": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                {
                  "type": "null"
                }
              ]
            },
            "habit_expected_since_boundary": {
              "anyOf": [
                {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                {
                  "type": "null"
                }
              ]
            },
            "habit_logs_since_boundary": {
              "anyOf": [
                {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                {
                  "type": "null"
                }
              ]
            },
            "performance_share": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "id",
            "objective_id",
            "title",
            "description",
            "metric_type",
            "start_value",
            "target_value",
            "unit",
            "cadence",
            "per",
            "since",
            "status",
            "created_at",
            "short_code",
            "url",
            "current_value",
            "boundary_value",
            "progress_pct",
            "boundary_progress_pct",
            "movement",
            "movement_pp",
            "evidence_count",
            "last_recorded_at",
            "habit_expected_since_boundary",
            "habit_logs_since_boundary",
            "performance_share"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "objective_id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "title": {
              "type": "string"
            },
            "description": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ]
            },
            "metric_type": {
              "type": "string",
              "const": "percentage"
            },
            "start_value": {
              "type": "number",
              "minimum": 0,
              "maximum": 100
            },
            "target_value": {
              "type": "number",
              "minimum": 0,
              "maximum": 100
            },
            "unit": {
              "type": "null"
            },
            "cadence": {
              "type": "null"
            },
            "per": {
              "type": "null"
            },
            "since": {
              "type": "null"
            },
            "status": {
              "type": "string",
              "enum": [
                "in_progress",
                "completed"
              ],
              "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
            },
            "created_at": {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
            },
            "short_code": {
              "type": "string",
              "minLength": 1
            },
            "url": {
              "type": "string",
              "format": "uri"
            },
            "current_value": {
              "type": "number",
              "minimum": 0,
              "maximum": 100
            },
            "boundary_value": {
              "type": "number",
              "minimum": 0,
              "maximum": 100
            },
            "progress_pct": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "null"
                }
              ]
            },
            "boundary_progress_pct": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "null"
                }
              ]
            },
            "movement": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "null"
                }
              ]
            },
            "movement_pp": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "null"
                }
              ]
            },
            "evidence_count": {
              "type": "integer",
              "minimum": 0,
              "maximum": 9007199254740991
            },
            "last_recorded_at": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                {
                  "type": "null"
                }
              ]
            },
            "habit_expected_since_boundary": {
              "anyOf": [
                {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                {
                  "type": "null"
                }
              ]
            },
            "habit_logs_since_boundary": {
              "anyOf": [
                {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                {
                  "type": "null"
                }
              ]
            },
            "performance_share": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "id",
            "objective_id",
            "title",
            "description",
            "metric_type",
            "start_value",
            "target_value",
            "unit",
            "cadence",
            "per",
            "since",
            "status",
            "created_at",
            "short_code",
            "url",
            "current_value",
            "boundary_value",
            "progress_pct",
            "boundary_progress_pct",
            "movement",
            "movement_pp",
            "evidence_count",
            "last_recorded_at",
            "habit_expected_since_boundary",
            "habit_logs_since_boundary",
            "performance_share"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "objective_id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "title": {
              "type": "string"
            },
            "description": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ]
            },
            "metric_type": {
              "type": "string",
              "const": "milestone"
            },
            "start_value": {
              "type": "number",
              "const": 0
            },
            "target_value": {
              "type": "number",
              "const": 1
            },
            "unit": {
              "type": "null"
            },
            "cadence": {
              "type": "null"
            },
            "per": {
              "type": "null"
            },
            "since": {
              "type": "null"
            },
            "status": {
              "type": "string",
              "enum": [
                "in_progress",
                "completed"
              ],
              "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
            },
            "created_at": {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
            },
            "short_code": {
              "type": "string",
              "minLength": 1
            },
            "url": {
              "type": "string",
              "format": "uri"
            },
            "current_value": {
              "anyOf": [
                {
                  "type": "number",
                  "const": 0
                },
                {
                  "type": "number",
                  "const": 1
                }
              ]
            },
            "boundary_value": {
              "anyOf": [
                {
                  "type": "number",
                  "const": 0
                },
                {
                  "type": "number",
                  "const": 1
                }
              ]
            },
            "progress_pct": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "null"
                }
              ]
            },
            "boundary_progress_pct": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "null"
                }
              ]
            },
            "movement": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "null"
                }
              ]
            },
            "movement_pp": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "null"
                }
              ]
            },
            "evidence_count": {
              "type": "integer",
              "minimum": 0,
              "maximum": 9007199254740991
            },
            "last_recorded_at": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                {
                  "type": "null"
                }
              ]
            },
            "habit_expected_since_boundary": {
              "anyOf": [
                {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                {
                  "type": "null"
                }
              ]
            },
            "habit_logs_since_boundary": {
              "anyOf": [
                {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                {
                  "type": "null"
                }
              ]
            },
            "performance_share": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "id",
            "objective_id",
            "title",
            "description",
            "metric_type",
            "start_value",
            "target_value",
            "unit",
            "cadence",
            "per",
            "since",
            "status",
            "created_at",
            "short_code",
            "url",
            "current_value",
            "boundary_value",
            "progress_pct",
            "boundary_progress_pct",
            "movement",
            "movement_pp",
            "evidence_count",
            "last_recorded_at",
            "habit_expected_since_boundary",
            "habit_logs_since_boundary",
            "performance_share"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "objective_id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "title": {
              "type": "string"
            },
            "description": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ]
            },
            "metric_type": {
              "type": "string",
              "const": "habit"
            },
            "start_value": {
              "type": "number",
              "const": 0
            },
            "target_value": {
              "type": "number",
              "const": 100
            },
            "unit": {
              "type": "null"
            },
            "cadence": {
              "type": "string",
              "enum": [
                "weekly",
                "monthly"
              ],
              "description": "UI label: Cadence. Weekly or Monthly; per supplies the Times value."
            },
            "per": {
              "type": "integer",
              "exclusiveMinimum": 0,
              "maximum": 9007199254740991
            },
            "since": {
              "type": "string",
              "format": "date",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
              "description": "Calendar date as YYYY-MM-DD in the profile timezone."
            },
            "status": {
              "type": "string",
              "enum": [
                "in_progress",
                "completed"
              ],
              "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
            },
            "created_at": {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
            },
            "short_code": {
              "type": "string",
              "minLength": 1
            },
            "url": {
              "type": "string",
              "format": "uri"
            },
            "current_value": {
              "type": "number",
              "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
            },
            "boundary_value": {
              "type": "number"
            },
            "progress_pct": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "null"
                }
              ]
            },
            "boundary_progress_pct": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "null"
                }
              ]
            },
            "movement": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "null"
                }
              ]
            },
            "movement_pp": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "null"
                }
              ]
            },
            "evidence_count": {
              "type": "integer",
              "minimum": 0,
              "maximum": 9007199254740991
            },
            "last_recorded_at": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                {
                  "type": "null"
                }
              ]
            },
            "habit_expected_since_boundary": {
              "anyOf": [
                {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                {
                  "type": "null"
                }
              ]
            },
            "habit_logs_since_boundary": {
              "anyOf": [
                {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                {
                  "type": "null"
                }
              ]
            },
            "performance_share": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "id",
            "objective_id",
            "title",
            "description",
            "metric_type",
            "start_value",
            "target_value",
            "unit",
            "cadence",
            "per",
            "since",
            "status",
            "created_at",
            "short_code",
            "url",
            "current_value",
            "boundary_value",
            "progress_pct",
            "boundary_progress_pct",
            "movement",
            "movement_pp",
            "evidence_count",
            "last_recorded_at",
            "habit_expected_since_boundary",
            "habit_logs_since_boundary",
            "performance_share"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "objective_id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "title": {
              "type": "string"
            },
            "description": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ]
            },
            "metric_type": {
              "type": "string",
              "const": "performance"
            },
            "start_value": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "null"
                }
              ],
              "description": "UI label: Start. Metric baseline; habit baselines are derived rather than stored."
            },
            "target_value": {
              "type": "number"
            },
            "unit": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "UI label: Unit. Used by Number and Performance results."
            },
            "cadence": {
              "type": "null"
            },
            "per": {
              "type": "null"
            },
            "since": {
              "type": "string",
              "format": "date",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
              "description": "Calendar date as YYYY-MM-DD in the profile timezone."
            },
            "status": {
              "type": "string",
              "enum": [
                "in_progress",
                "completed"
              ],
              "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
            },
            "created_at": {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
            },
            "short_code": {
              "type": "string",
              "minLength": 1
            },
            "url": {
              "type": "string",
              "format": "uri"
            },
            "current_value": {
              "type": "number",
              "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
            },
            "boundary_value": {
              "type": "number"
            },
            "progress_pct": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "null"
                }
              ]
            },
            "boundary_progress_pct": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "null"
                }
              ]
            },
            "movement": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "null"
                }
              ]
            },
            "movement_pp": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "null"
                }
              ]
            },
            "evidence_count": {
              "type": "integer",
              "minimum": 0,
              "maximum": 9007199254740991
            },
            "last_recorded_at": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                {
                  "type": "null"
                }
              ]
            },
            "habit_expected_since_boundary": {
              "anyOf": [
                {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                {
                  "type": "null"
                }
              ]
            },
            "habit_logs_since_boundary": {
              "anyOf": [
                {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                {
                  "type": "null"
                }
              ]
            },
            "performance_share": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "id",
            "objective_id",
            "title",
            "description",
            "metric_type",
            "start_value",
            "target_value",
            "unit",
            "cadence",
            "per",
            "since",
            "status",
            "created_at",
            "short_code",
            "url",
            "current_value",
            "boundary_value",
            "progress_pct",
            "boundary_progress_pct",
            "movement",
            "movement_pp",
            "evidence_count",
            "last_recorded_at",
            "habit_expected_since_boundary",
            "habit_logs_since_boundary",
            "performance_share"
          ],
          "additionalProperties": false
        }
      ]
    },
    "parents": {
      "type": "object",
      "properties": {
        "cycle": {
          "anyOf": [
            {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "intention": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "UI label: Intention. Optional guiding focus; the cycle is identified by its date range, not a name."
                },
                "start_at": {
                  "type": "string",
                  "format": "date",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                  "description": "UI label: Starts."
                },
                "end_at": {
                  "type": "string",
                  "format": "date",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                  "description": "UI label: Ends."
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "active",
                    "archived"
                  ]
                },
                "created_at": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                },
                "achievement_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "UI label: Achievement. Derived from objective progress; unavailable when nothing is measurable."
                },
                "time_gone_pct": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 100,
                  "description": "UI label: Time gone. Derived percentage of the cycle elapsed."
                },
                "length_weeks": {
                  "type": "integer",
                  "minimum": -9007199254740991,
                  "maximum": 9007199254740991,
                  "description": "UI label: Length, in weeks; derived from Starts and Ends."
                }
              },
              "required": [
                "id",
                "intention",
                "start_at",
                "end_at",
                "status",
                "created_at",
                "url",
                "achievement_pct",
                "time_gone_pct",
                "length_weeks"
              ],
              "additionalProperties": false
            },
            {
              "type": "null"
            }
          ]
        },
        "objectives": {
          "type": "object",
          "properties": {
            "items": {
              "maxItems": 50,
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "cycle_id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "title": {
                    "type": "string"
                  },
                  "description": {
                    "type": "string"
                  },
                  "deadline_at": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                        "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "UI label: Deadline; null when no deadline has been set."
                  },
                  "status": {
                    "type": "string",
                    "enum": [
                      "on_track",
                      "off_track",
                      "completed"
                    ],
                    "description": "Objective status: On track, Off track or Completed. Coaching judgment, independent of the derived Progress percentage."
                  },
                  "created_at": {
                    "type": "string",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                  },
                  "short_code": {
                    "type": "string",
                    "minLength": 1
                  },
                  "url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "progress_pct": {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "UI label: Progress. Derived from measurable results, independently of Status."
                  },
                  "boundary_progress_pct": {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "Historical progress at the resolved last-session boundary; not current Progress."
                  },
                  "movement_pp": {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                },
                "required": [
                  "id",
                  "cycle_id",
                  "title",
                  "description",
                  "deadline_at",
                  "status",
                  "created_at",
                  "short_code",
                  "url",
                  "progress_pct",
                  "boundary_progress_pct",
                  "movement_pp"
                ],
                "additionalProperties": false
              }
            },
            "next_cursor": {
              "anyOf": [
                {
                  "type": "string",
                  "minLength": 1
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "items",
            "next_cursor"
          ],
          "additionalProperties": false
        }
      },
      "required": [
        "cycle",
        "objectives"
      ],
      "additionalProperties": false
    },
    "result_logs": {
      "type": "object",
      "properties": {
        "items": {
          "maxItems": 100,
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
              },
              "result_id": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
              },
              "value": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "comment": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "session_id": {
                "anyOf": [
                  {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "recorded_at": {
                "type": "string",
                "format": "date-time",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
              }
            },
            "required": [
              "id",
              "result_id",
              "value",
              "comment",
              "session_id",
              "recorded_at"
            ],
            "additionalProperties": false,
            "description": "Result log stored in result_logs. The UI shows value entries under Updates and their non-empty comments under Comments. Value may be null for a comment-only habit entry; evidence and timestamps are immutable."
          }
        },
        "next_cursor": {
          "anyOf": [
            {
              "type": "string",
              "minLength": 1
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "required": [
        "items",
        "next_cursor"
      ],
      "additionalProperties": false
    },
    "habit_logs": {
      "type": "object",
      "properties": {
        "items": {
          "maxItems": 100,
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
              },
              "result_id": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
              },
              "day": {
                "type": "string",
                "format": "date",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                "description": "Calendar date as YYYY-MM-DD in the profile timezone."
              },
              "session_id": {
                "anyOf": [
                  {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "created_at": {
                "type": "string",
                "format": "date-time",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
              }
            },
            "required": [
              "id",
              "result_id",
              "day",
              "session_id",
              "created_at"
            ],
            "additionalProperties": false,
            "description": "Habit log stored in habit_logs. The UI marks calendar days and lists them under Updates with the Marked column. One row per result/day; unmarking deletes the row. This is not append-only history."
          }
        },
        "next_cursor": {
          "anyOf": [
            {
              "type": "string",
              "minLength": 1
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "required": [
        "items",
        "next_cursor"
      ],
      "additionalProperties": false
    },
    "trend": {
      "type": "object",
      "properties": {
        "items": {
          "maxItems": 100,
          "type": "array",
          "items": {
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "kind": {
                    "type": "string",
                    "const": "value"
                  },
                  "at": {
                    "type": "string",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                  },
                  "value": {
                    "type": "number"
                  },
                  "pace": {
                    "type": "number"
                  }
                },
                "required": [
                  "kind",
                  "at",
                  "value",
                  "pace"
                ],
                "additionalProperties": false
              },
              {
                "type": "object",
                "properties": {
                  "kind": {
                    "type": "string",
                    "const": "habit"
                  },
                  "from": {
                    "type": "string",
                    "format": "date",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                    "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                  },
                  "to": {
                    "type": "string",
                    "format": "date",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                    "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                  },
                  "actual": {
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991
                  },
                  "expected": {
                    "type": "number"
                  },
                  "expected_full": {
                    "type": "number"
                  }
                },
                "required": [
                  "kind",
                  "from",
                  "to",
                  "actual",
                  "expected",
                  "expected_full"
                ],
                "additionalProperties": false
              },
              {
                "type": "object",
                "properties": {
                  "kind": {
                    "type": "string",
                    "const": "performance"
                  },
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "at": {
                    "type": "string",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                  },
                  "value": {
                    "type": "number"
                  },
                  "target": {
                    "type": "number"
                  },
                  "gap": {
                    "type": "number"
                  },
                  "share": {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                },
                "required": [
                  "kind",
                  "id",
                  "at",
                  "value",
                  "target",
                  "gap",
                  "share"
                ],
                "additionalProperties": false
              }
            ]
          }
        },
        "next_cursor": {
          "anyOf": [
            {
              "type": "string",
              "minLength": 1
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "required": [
        "items",
        "next_cursor"
      ],
      "additionalProperties": false
    },
    "continuations": {
      "type": "object",
      "propertyNames": {
        "type": "string",
        "enum": [
          "cycles",
          "objectives",
          "results",
          "actions",
          "notes",
          "sessions",
          "result_logs",
          "habit_logs",
          "action_logs",
          "trend"
        ]
      },
      "additionalProperties": {
        "type": "string",
        "minLength": 1
      }
    }
  },
  "required": [
    "result",
    "parents",
    "result_logs",
    "habit_logs",
    "trend",
    "continuations"
  ],
  "additionalProperties": false
}
Public MCP input/output shapes for comparison
[
  {
    "tool": "result_read",
    "collection": "results",
    "specification": "docs/feature-specs/F4-results.md#mcp-source-mapping--selected-target",
    "operation": "get",
    "binding": "planned",
    "mode": "adapted",
    "readiness": "contract-only",
    "services": [
      "results.get"
    ],
    "gap": null,
    "projection": "Project record.result and changed on writes; history preserves its resolved window, kind and cursor; list preserves parent/attention filters.",
    "input": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "oneOf": [
        {
          "type": "object",
          "properties": {
            "cursor": {
              "type": "string",
              "minLength": 1
            },
            "limit": {
              "default": 20,
              "type": "integer",
              "minimum": 1,
              "maximum": 100
            },
            "objective_id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "cycle_id": {
              "description": "List results across one cycle instead of a single objective. Supply exactly one parent selector.",
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
            },
            "attention": {
              "description": "Optional briefing subset: no evidence ever, no update in the window, or habit with no mark in the window.",
              "type": "string",
              "enum": [
                "never_updated",
                "silent",
                "unmarked"
              ]
            },
            "window": {
              "description": "Required for silent/unmarked attention. Use exact server-resolved briefing bounds; current result figures remain current.",
              "type": "object",
              "properties": {
                "since": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "until": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                }
              },
              "required": [
                "since",
                "until"
              ],
              "additionalProperties": false
            },
            "operation": {
              "type": "string",
              "const": "list"
            }
          },
          "required": [
            "operation"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "operation": {
              "type": "string",
              "const": "get"
            }
          },
          "required": [
            "id",
            "operation"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "cursor": {
              "type": "string",
              "minLength": 1
            },
            "limit": {
              "default": 20,
              "type": "integer",
              "minimum": 1,
              "maximum": 100
            },
            "result_id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "operation": {
              "type": "string",
              "const": "history"
            },
            "kind": {
              "type": "string",
              "enum": [
                "result_logs",
                "habit_logs",
                "trend"
              ],
              "description": "Evidence stream to page; get returns current figures regardless of this window."
            },
            "window": {
              "type": "object",
              "properties": {
                "since": {
                  "description": "Inclusive lower bound. Default: last completed session, falling back to active-cycle start. Date-only values use the profile timezone.",
                  "anyOf": [
                    {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "date",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                          "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                        },
                        {
                          "type": "string",
                          "format": "date-time",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                        }
                      ]
                    },
                    {
                      "type": "string",
                      "enum": [
                        "last_session",
                        "cycle_start"
                      ]
                    }
                  ]
                },
                "until": {
                  "description": "Exclusive upper bound; default is the server time captured on the first page.",
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                      "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                    },
                    {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    }
                  ]
                }
              },
              "additionalProperties": false
            }
          },
          "required": [
            "result_id",
            "operation",
            "kind"
          ],
          "additionalProperties": false
        }
      ]
    },
    "output": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "items": {
              "maxItems": 100,
              "type": "array",
              "items": {
                "oneOf": [
                  {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      "objective_id": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      "title": {
                        "type": "string"
                      },
                      "description": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "metric_type": {
                        "type": "string",
                        "const": "number"
                      },
                      "start_value": {
                        "type": "number"
                      },
                      "target_value": {
                        "type": "number"
                      },
                      "unit": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "UI label: Unit. Used by Number and Performance results."
                      },
                      "cadence": {
                        "type": "null"
                      },
                      "per": {
                        "type": "null"
                      },
                      "since": {
                        "type": "null"
                      },
                      "status": {
                        "type": "string",
                        "enum": [
                          "in_progress",
                          "completed"
                        ],
                        "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                      },
                      "created_at": {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      "short_code": {
                        "type": "string",
                        "minLength": 1
                      },
                      "url": {
                        "type": "string",
                        "format": "uri"
                      },
                      "current_value": {
                        "type": "number",
                        "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                      },
                      "boundary_value": {
                        "type": "number"
                      },
                      "progress_pct": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "boundary_progress_pct": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "movement": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "movement_pp": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "evidence_count": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      },
                      "last_recorded_at": {
                        "anyOf": [
                          {
                            "type": "string",
                            "format": "date-time",
                            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "habit_expected_since_boundary": {
                        "anyOf": [
                          {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "habit_logs_since_boundary": {
                        "anyOf": [
                          {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "performance_share": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "required": [
                      "id",
                      "objective_id",
                      "title",
                      "description",
                      "metric_type",
                      "start_value",
                      "target_value",
                      "unit",
                      "cadence",
                      "per",
                      "since",
                      "status",
                      "created_at",
                      "short_code",
                      "url",
                      "current_value",
                      "boundary_value",
                      "progress_pct",
                      "boundary_progress_pct",
                      "movement",
                      "movement_pp",
                      "evidence_count",
                      "last_recorded_at",
                      "habit_expected_since_boundary",
                      "habit_logs_since_boundary",
                      "performance_share"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      "objective_id": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      "title": {
                        "type": "string"
                      },
                      "description": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "metric_type": {
                        "type": "string",
                        "const": "percentage"
                      },
                      "start_value": {
                        "type": "number",
                        "minimum": 0,
                        "maximum": 100
                      },
                      "target_value": {
                        "type": "number",
                        "minimum": 0,
                        "maximum": 100
                      },
                      "unit": {
                        "type": "null"
                      },
                      "cadence": {
                        "type": "null"
                      },
                      "per": {
                        "type": "null"
                      },
                      "since": {
                        "type": "null"
                      },
                      "status": {
                        "type": "string",
                        "enum": [
                          "in_progress",
                          "completed"
                        ],
                        "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                      },
                      "created_at": {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      "short_code": {
                        "type": "string",
                        "minLength": 1
                      },
                      "url": {
                        "type": "string",
                        "format": "uri"
                      },
                      "current_value": {
                        "type": "number",
                        "minimum": 0,
                        "maximum": 100
                      },
                      "boundary_value": {
                        "type": "number",
                        "minimum": 0,
                        "maximum": 100
                      },
                      "progress_pct": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "boundary_progress_pct": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "movement": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "movement_pp": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "evidence_count": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      },
                      "last_recorded_at": {
                        "anyOf": [
                          {
                            "type": "string",
                            "format": "date-time",
                            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "habit_expected_since_boundary": {
                        "anyOf": [
                          {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "habit_logs_since_boundary": {
                        "anyOf": [
                          {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "performance_share": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "required": [
                      "id",
                      "objective_id",
                      "title",
                      "description",
                      "metric_type",
                      "start_value",
                      "target_value",
                      "unit",
                      "cadence",
                      "per",
                      "since",
                      "status",
                      "created_at",
                      "short_code",
                      "url",
                      "current_value",
                      "boundary_value",
                      "progress_pct",
                      "boundary_progress_pct",
                      "movement",
                      "movement_pp",
                      "evidence_count",
                      "last_recorded_at",
                      "habit_expected_since_boundary",
                      "habit_logs_since_boundary",
                      "performance_share"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      "objective_id": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      "title": {
                        "type": "string"
                      },
                      "description": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "metric_type": {
                        "type": "string",
                        "const": "milestone"
                      },
                      "start_value": {
                        "type": "number",
                        "const": 0
                      },
                      "target_value": {
                        "type": "number",
                        "const": 1
                      },
                      "unit": {
                        "type": "null"
                      },
                      "cadence": {
                        "type": "null"
                      },
                      "per": {
                        "type": "null"
                      },
                      "since": {
                        "type": "null"
                      },
                      "status": {
                        "type": "string",
                        "enum": [
                          "in_progress",
                          "completed"
                        ],
                        "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                      },
                      "created_at": {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      "short_code": {
                        "type": "string",
                        "minLength": 1
                      },
                      "url": {
                        "type": "string",
                        "format": "uri"
                      },
                      "current_value": {
                        "anyOf": [
                          {
                            "type": "number",
                            "const": 0
                          },
                          {
                            "type": "number",
                            "const": 1
                          }
                        ]
                      },
                      "boundary_value": {
                        "anyOf": [
                          {
                            "type": "number",
                            "const": 0
                          },
                          {
                            "type": "number",
                            "const": 1
                          }
                        ]
                      },
                      "progress_pct": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "boundary_progress_pct": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "movement": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "movement_pp": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "evidence_count": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      },
                      "last_recorded_at": {
                        "anyOf": [
                          {
                            "type": "string",
                            "format": "date-time",
                            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "habit_expected_since_boundary": {
                        "anyOf": [
                          {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "habit_logs_since_boundary": {
                        "anyOf": [
                          {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "performance_share": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "required": [
                      "id",
                      "objective_id",
                      "title",
                      "description",
                      "metric_type",
                      "start_value",
                      "target_value",
                      "unit",
                      "cadence",
                      "per",
                      "since",
                      "status",
                      "created_at",
                      "short_code",
                      "url",
                      "current_value",
                      "boundary_value",
                      "progress_pct",
                      "boundary_progress_pct",
                      "movement",
                      "movement_pp",
                      "evidence_count",
                      "last_recorded_at",
                      "habit_expected_since_boundary",
                      "habit_logs_since_boundary",
                      "performance_share"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      "objective_id": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      "title": {
                        "type": "string"
                      },
                      "description": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "metric_type": {
                        "type": "string",
                        "const": "habit"
                      },
                      "start_value": {
                        "type": "number",
                        "const": 0
                      },
                      "target_value": {
                        "type": "number",
                        "const": 100
                      },
                      "unit": {
                        "type": "null"
                      },
                      "cadence": {
                        "type": "string",
                        "enum": [
                          "weekly",
                          "monthly"
                        ],
                        "description": "UI label: Cadence. Weekly or Monthly; per supplies the Times value."
                      },
                      "per": {
                        "type": "integer",
                        "exclusiveMinimum": 0,
                        "maximum": 9007199254740991
                      },
                      "since": {
                        "type": "string",
                        "format": "date",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                        "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                      },
                      "status": {
                        "type": "string",
                        "enum": [
                          "in_progress",
                          "completed"
                        ],
                        "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                      },
                      "created_at": {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      "short_code": {
                        "type": "string",
                        "minLength": 1
                      },
                      "url": {
                        "type": "string",
                        "format": "uri"
                      },
                      "current_value": {
                        "type": "number",
                        "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                      },
                      "boundary_value": {
                        "type": "number"
                      },
                      "progress_pct": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "boundary_progress_pct": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "movement": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "movement_pp": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "evidence_count": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      },
                      "last_recorded_at": {
                        "anyOf": [
                          {
                            "type": "string",
                            "format": "date-time",
                            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "habit_expected_since_boundary": {
                        "anyOf": [
                          {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "habit_logs_since_boundary": {
                        "anyOf": [
                          {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "performance_share": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "required": [
                      "id",
                      "objective_id",
                      "title",
                      "description",
                      "metric_type",
                      "start_value",
                      "target_value",
                      "unit",
                      "cadence",
                      "per",
                      "since",
                      "status",
                      "created_at",
                      "short_code",
                      "url",
                      "current_value",
                      "boundary_value",
                      "progress_pct",
                      "boundary_progress_pct",
                      "movement",
                      "movement_pp",
                      "evidence_count",
                      "last_recorded_at",
                      "habit_expected_since_boundary",
                      "habit_logs_since_boundary",
                      "performance_share"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      "objective_id": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      "title": {
                        "type": "string"
                      },
                      "description": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "metric_type": {
                        "type": "string",
                        "const": "performance"
                      },
                      "start_value": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "UI label: Start. Metric baseline; habit baselines are derived rather than stored."
                      },
                      "target_value": {
                        "type": "number"
                      },
                      "unit": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "UI label: Unit. Used by Number and Performance results."
                      },
                      "cadence": {
                        "type": "null"
                      },
                      "per": {
                        "type": "null"
                      },
                      "since": {
                        "type": "string",
                        "format": "date",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                        "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                      },
                      "status": {
                        "type": "string",
                        "enum": [
                          "in_progress",
                          "completed"
                        ],
                        "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                      },
                      "created_at": {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      "short_code": {
                        "type": "string",
                        "minLength": 1
                      },
                      "url": {
                        "type": "string",
                        "format": "uri"
                      },
                      "current_value": {
                        "type": "number",
                        "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                      },
                      "boundary_value": {
                        "type": "number"
                      },
                      "progress_pct": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "boundary_progress_pct": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "movement": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "movement_pp": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "evidence_count": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      },
                      "last_recorded_at": {
                        "anyOf": [
                          {
                            "type": "string",
                            "format": "date-time",
                            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "habit_expected_since_boundary": {
                        "anyOf": [
                          {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "habit_logs_since_boundary": {
                        "anyOf": [
                          {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "performance_share": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "required": [
                      "id",
                      "objective_id",
                      "title",
                      "description",
                      "metric_type",
                      "start_value",
                      "target_value",
                      "unit",
                      "cadence",
                      "per",
                      "since",
                      "status",
                      "created_at",
                      "short_code",
                      "url",
                      "current_value",
                      "boundary_value",
                      "progress_pct",
                      "boundary_progress_pct",
                      "movement",
                      "movement_pp",
                      "evidence_count",
                      "last_recorded_at",
                      "habit_expected_since_boundary",
                      "habit_logs_since_boundary",
                      "performance_share"
                    ],
                    "additionalProperties": false
                  }
                ]
              }
            },
            "next_cursor": {
              "anyOf": [
                {
                  "type": "string",
                  "minLength": 1
                },
                {
                  "type": "null"
                }
              ]
            },
            "continuation": {
              "anyOf": [
                {
                  "type": "object",
                  "properties": {
                    "tool": {
                      "type": "string",
                      "const": "result_read"
                    },
                    "arguments": {
                      "type": "object",
                      "properties": {
                        "cursor": {
                          "type": "string",
                          "minLength": 1
                        },
                        "limit": {
                          "type": "integer",
                          "minimum": 1,
                          "maximum": 100
                        },
                        "objective_id": {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                        },
                        "cycle_id": {
                          "description": "List results across one cycle instead of a single objective. Supply exactly one parent selector.",
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                        },
                        "attention": {
                          "description": "Optional briefing subset: no evidence ever, no update in the window, or habit with no mark in the window.",
                          "type": "string",
                          "enum": [
                            "never_updated",
                            "silent",
                            "unmarked"
                          ]
                        },
                        "window": {
                          "description": "Required for silent/unmarked attention. Use exact server-resolved briefing bounds; current result figures remain current.",
                          "type": "object",
                          "properties": {
                            "since": {
                              "type": "string",
                              "format": "date-time",
                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                            },
                            "until": {
                              "type": "string",
                              "format": "date-time",
                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                            }
                          },
                          "required": [
                            "since",
                            "until"
                          ],
                          "additionalProperties": false
                        },
                        "operation": {
                          "type": "string",
                          "const": "list"
                        }
                      },
                      "required": [
                        "cursor",
                        "limit",
                        "operation"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "required": [
                    "tool",
                    "arguments"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "null"
                }
              ]
            },
            "operation": {
              "type": "string",
              "const": "list"
            }
          },
          "required": [
            "items",
            "next_cursor",
            "continuation",
            "operation"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "operation": {
              "type": "string",
              "const": "get"
            },
            "result": {
              "oneOf": [
                {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    "objective_id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    "title": {
                      "type": "string"
                    },
                    "description": {
                      "anyOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "metric_type": {
                      "type": "string",
                      "const": "number"
                    },
                    "start_value": {
                      "type": "number"
                    },
                    "target_value": {
                      "type": "number"
                    },
                    "unit": {
                      "anyOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "null"
                        }
                      ],
                      "description": "UI label: Unit. Used by Number and Performance results."
                    },
                    "cadence": {
                      "type": "null"
                    },
                    "per": {
                      "type": "null"
                    },
                    "since": {
                      "type": "null"
                    },
                    "status": {
                      "type": "string",
                      "enum": [
                        "in_progress",
                        "completed"
                      ],
                      "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                    },
                    "created_at": {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    "short_code": {
                      "type": "string",
                      "minLength": 1
                    },
                    "url": {
                      "type": "string",
                      "format": "uri"
                    },
                    "current_value": {
                      "type": "number",
                      "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                    },
                    "boundary_value": {
                      "type": "number"
                    },
                    "progress_pct": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "boundary_progress_pct": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "movement": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "movement_pp": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "evidence_count": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    "last_recorded_at": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "date-time",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "habit_expected_since_boundary": {
                      "anyOf": [
                        {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "habit_logs_since_boundary": {
                      "anyOf": [
                        {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "performance_share": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "id",
                    "objective_id",
                    "title",
                    "description",
                    "metric_type",
                    "start_value",
                    "target_value",
                    "unit",
                    "cadence",
                    "per",
                    "since",
                    "status",
                    "created_at",
                    "short_code",
                    "url",
                    "current_value",
                    "boundary_value",
                    "progress_pct",
                    "boundary_progress_pct",
                    "movement",
                    "movement_pp",
                    "evidence_count",
                    "last_recorded_at",
                    "habit_expected_since_boundary",
                    "habit_logs_since_boundary",
                    "performance_share"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    "objective_id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    "title": {
                      "type": "string"
                    },
                    "description": {
                      "anyOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "metric_type": {
                      "type": "string",
                      "const": "percentage"
                    },
                    "start_value": {
                      "type": "number",
                      "minimum": 0,
                      "maximum": 100
                    },
                    "target_value": {
                      "type": "number",
                      "minimum": 0,
                      "maximum": 100
                    },
                    "unit": {
                      "type": "null"
                    },
                    "cadence": {
                      "type": "null"
                    },
                    "per": {
                      "type": "null"
                    },
                    "since": {
                      "type": "null"
                    },
                    "status": {
                      "type": "string",
                      "enum": [
                        "in_progress",
                        "completed"
                      ],
                      "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                    },
                    "created_at": {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    "short_code": {
                      "type": "string",
                      "minLength": 1
                    },
                    "url": {
                      "type": "string",
                      "format": "uri"
                    },
                    "current_value": {
                      "type": "number",
                      "minimum": 0,
                      "maximum": 100
                    },
                    "boundary_value": {
                      "type": "number",
                      "minimum": 0,
                      "maximum": 100
                    },
                    "progress_pct": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "boundary_progress_pct": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "movement": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "movement_pp": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "evidence_count": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    "last_recorded_at": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "date-time",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "habit_expected_since_boundary": {
                      "anyOf": [
                        {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "habit_logs_since_boundary": {
                      "anyOf": [
                        {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "performance_share": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "id",
                    "objective_id",
                    "title",
                    "description",
                    "metric_type",
                    "start_value",
                    "target_value",
                    "unit",
                    "cadence",
                    "per",
                    "since",
                    "status",
                    "created_at",
                    "short_code",
                    "url",
                    "current_value",
                    "boundary_value",
                    "progress_pct",
                    "boundary_progress_pct",
                    "movement",
                    "movement_pp",
                    "evidence_count",
                    "last_recorded_at",
                    "habit_expected_since_boundary",
                    "habit_logs_since_boundary",
                    "performance_share"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    "objective_id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    "title": {
                      "type": "string"
                    },
                    "description": {
                      "anyOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "metric_type": {
                      "type": "string",
                      "const": "milestone"
                    },
                    "start_value": {
                      "type": "number",
                      "const": 0
                    },
                    "target_value": {
                      "type": "number",
                      "const": 1
                    },
                    "unit": {
                      "type": "null"
                    },
                    "cadence": {
                      "type": "null"
                    },
                    "per": {
                      "type": "null"
                    },
                    "since": {
                      "type": "null"
                    },
                    "status": {
                      "type": "string",
                      "enum": [
                        "in_progress",
                        "completed"
                      ],
                      "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                    },
                    "created_at": {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    "short_code": {
                      "type": "string",
                      "minLength": 1
                    },
                    "url": {
                      "type": "string",
                      "format": "uri"
                    },
                    "current_value": {
                      "anyOf": [
                        {
                          "type": "number",
                          "const": 0
                        },
                        {
                          "type": "number",
                          "const": 1
                        }
                      ]
                    },
                    "boundary_value": {
                      "anyOf": [
                        {
                          "type": "number",
                          "const": 0
                        },
                        {
                          "type": "number",
                          "const": 1
                        }
                      ]
                    },
                    "progress_pct": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "boundary_progress_pct": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "movement": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "movement_pp": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "evidence_count": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    "last_recorded_at": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "date-time",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "habit_expected_since_boundary": {
                      "anyOf": [
                        {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "habit_logs_since_boundary": {
                      "anyOf": [
                        {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "performance_share": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "id",
                    "objective_id",
                    "title",
                    "description",
                    "metric_type",
                    "start_value",
                    "target_value",
                    "unit",
                    "cadence",
                    "per",
                    "since",
                    "status",
                    "created_at",
                    "short_code",
                    "url",
                    "current_value",
                    "boundary_value",
                    "progress_pct",
                    "boundary_progress_pct",
                    "movement",
                    "movement_pp",
                    "evidence_count",
                    "last_recorded_at",
                    "habit_expected_since_boundary",
                    "habit_logs_since_boundary",
                    "performance_share"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    "objective_id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    "title": {
                      "type": "string"
                    },
                    "description": {
                      "anyOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "metric_type": {
                      "type": "string",
                      "const": "habit"
                    },
                    "start_value": {
                      "type": "number",
                      "const": 0
                    },
                    "target_value": {
                      "type": "number",
                      "const": 100
                    },
                    "unit": {
                      "type": "null"
                    },
                    "cadence": {
                      "type": "string",
                      "enum": [
                        "weekly",
                        "monthly"
                      ],
                      "description": "UI label: Cadence. Weekly or Monthly; per supplies the Times value."
                    },
                    "per": {
                      "type": "integer",
                      "exclusiveMinimum": 0,
                      "maximum": 9007199254740991
                    },
                    "since": {
                      "type": "string",
                      "format": "date",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                      "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                    },
                    "status": {
                      "type": "string",
                      "enum": [
                        "in_progress",
                        "completed"
                      ],
                      "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                    },
                    "created_at": {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    "short_code": {
                      "type": "string",
                      "minLength": 1
                    },
                    "url": {
                      "type": "string",
                      "format": "uri"
                    },
                    "current_value": {
                      "type": "number",
                      "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                    },
                    "boundary_value": {
                      "type": "number"
                    },
                    "progress_pct": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "boundary_progress_pct": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "movement": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "movement_pp": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "evidence_count": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    "last_recorded_at": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "date-time",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "habit_expected_since_boundary": {
                      "anyOf": [
                        {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "habit_logs_since_boundary": {
                      "anyOf": [
                        {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "performance_share": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "id",
                    "objective_id",
                    "title",
                    "description",
                    "metric_type",
                    "start_value",
                    "target_value",
                    "unit",
                    "cadence",
                    "per",
                    "since",
                    "status",
                    "created_at",
                    "short_code",
                    "url",
                    "current_value",
                    "boundary_value",
                    "progress_pct",
                    "boundary_progress_pct",
                    "movement",
                    "movement_pp",
                    "evidence_count",
                    "last_recorded_at",
                    "habit_expected_since_boundary",
                    "habit_logs_since_boundary",
                    "performance_share"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    "objective_id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    "title": {
                      "type": "string"
                    },
                    "description": {
                      "anyOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "metric_type": {
                      "type": "string",
                      "const": "performance"
                    },
                    "start_value": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ],
                      "description": "UI label: Start. Metric baseline; habit baselines are derived rather than stored."
                    },
                    "target_value": {
                      "type": "number"
                    },
                    "unit": {
                      "anyOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "null"
                        }
                      ],
                      "description": "UI label: Unit. Used by Number and Performance results."
                    },
                    "cadence": {
                      "type": "null"
                    },
                    "per": {
                      "type": "null"
                    },
                    "since": {
                      "type": "string",
                      "format": "date",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                      "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                    },
                    "status": {
                      "type": "string",
                      "enum": [
                        "in_progress",
                        "completed"
                      ],
                      "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                    },
                    "created_at": {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    "short_code": {
                      "type": "string",
                      "minLength": 1
                    },
                    "url": {
                      "type": "string",
                      "format": "uri"
                    },
                    "current_value": {
                      "type": "number",
                      "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                    },
                    "boundary_value": {
                      "type": "number"
                    },
                    "progress_pct": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "boundary_progress_pct": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "movement": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "movement_pp": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "evidence_count": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    "last_recorded_at": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "date-time",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "habit_expected_since_boundary": {
                      "anyOf": [
                        {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "habit_logs_since_boundary": {
                      "anyOf": [
                        {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "performance_share": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "id",
                    "objective_id",
                    "title",
                    "description",
                    "metric_type",
                    "start_value",
                    "target_value",
                    "unit",
                    "cadence",
                    "per",
                    "since",
                    "status",
                    "created_at",
                    "short_code",
                    "url",
                    "current_value",
                    "boundary_value",
                    "progress_pct",
                    "boundary_progress_pct",
                    "movement",
                    "movement_pp",
                    "evidence_count",
                    "last_recorded_at",
                    "habit_expected_since_boundary",
                    "habit_logs_since_boundary",
                    "performance_share"
                  ],
                  "additionalProperties": false
                }
              ]
            }
          },
          "required": [
            "operation",
            "result"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "items": {
              "maxItems": 100,
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "result_id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "value": {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "comment": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "session_id": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "recorded_at": {
                    "type": "string",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                  }
                },
                "required": [
                  "id",
                  "result_id",
                  "value",
                  "comment",
                  "session_id",
                  "recorded_at"
                ],
                "additionalProperties": false,
                "description": "Result log stored in result_logs. The UI shows value entries under Updates and their non-empty comments under Comments. Value may be null for a comment-only habit entry; evidence and timestamps are immutable."
              }
            },
            "next_cursor": {
              "anyOf": [
                {
                  "type": "string",
                  "minLength": 1
                },
                {
                  "type": "null"
                }
              ]
            },
            "continuation": {
              "anyOf": [
                {
                  "type": "object",
                  "properties": {
                    "tool": {
                      "type": "string",
                      "const": "result_read"
                    },
                    "arguments": {
                      "type": "object",
                      "properties": {
                        "cursor": {
                          "type": "string",
                          "minLength": 1
                        },
                        "limit": {
                          "type": "integer",
                          "minimum": 1,
                          "maximum": 100
                        },
                        "result_id": {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                        },
                        "operation": {
                          "type": "string",
                          "const": "history"
                        },
                        "kind": {
                          "type": "string",
                          "const": "result_logs"
                        },
                        "window": {
                          "type": "object",
                          "properties": {
                            "since": {
                              "type": "string",
                              "format": "date-time",
                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                            },
                            "until": {
                              "type": "string",
                              "format": "date-time",
                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                            }
                          },
                          "required": [
                            "since",
                            "until"
                          ],
                          "additionalProperties": false
                        }
                      },
                      "required": [
                        "cursor",
                        "limit",
                        "result_id",
                        "operation",
                        "kind",
                        "window"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "required": [
                    "tool",
                    "arguments"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "null"
                }
              ]
            },
            "operation": {
              "type": "string",
              "const": "history"
            },
            "kind": {
              "type": "string",
              "const": "result_logs"
            },
            "result_id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "window": {
              "type": "object",
              "properties": {
                "since": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "until": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                }
              },
              "required": [
                "since",
                "until"
              ],
              "additionalProperties": false
            }
          },
          "required": [
            "items",
            "next_cursor",
            "continuation",
            "operation",
            "kind",
            "result_id",
            "window"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "items": {
              "maxItems": 100,
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "result_id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "day": {
                    "type": "string",
                    "format": "date",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                    "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                  },
                  "session_id": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "created_at": {
                    "type": "string",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                  }
                },
                "required": [
                  "id",
                  "result_id",
                  "day",
                  "session_id",
                  "created_at"
                ],
                "additionalProperties": false,
                "description": "Habit log stored in habit_logs. The UI marks calendar days and lists them under Updates with the Marked column. One row per result/day; unmarking deletes the row. This is not append-only history."
              }
            },
            "next_cursor": {
              "anyOf": [
                {
                  "type": "string",
                  "minLength": 1
                },
                {
                  "type": "null"
                }
              ]
            },
            "continuation": {
              "anyOf": [
                {
                  "type": "object",
                  "properties": {
                    "tool": {
                      "type": "string",
                      "const": "result_read"
                    },
                    "arguments": {
                      "type": "object",
                      "properties": {
                        "cursor": {
                          "type": "string",
                          "minLength": 1
                        },
                        "limit": {
                          "type": "integer",
                          "minimum": 1,
                          "maximum": 100
                        },
                        "result_id": {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                        },
                        "operation": {
                          "type": "string",
                          "const": "history"
                        },
                        "kind": {
                          "type": "string",
                          "const": "habit_logs"
                        },
                        "window": {
                          "type": "object",
                          "properties": {
                            "since": {
                              "type": "string",
                              "format": "date-time",
                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                            },
                            "until": {
                              "type": "string",
                              "format": "date-time",
                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                            }
                          },
                          "required": [
                            "since",
                            "until"
                          ],
                          "additionalProperties": false
                        }
                      },
                      "required": [
                        "cursor",
                        "limit",
                        "result_id",
                        "operation",
                        "kind",
                        "window"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "required": [
                    "tool",
                    "arguments"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "null"
                }
              ]
            },
            "operation": {
              "type": "string",
              "const": "history"
            },
            "kind": {
              "type": "string",
              "const": "habit_logs"
            },
            "result_id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "window": {
              "type": "object",
              "properties": {
                "since": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "until": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                }
              },
              "required": [
                "since",
                "until"
              ],
              "additionalProperties": false
            }
          },
          "required": [
            "items",
            "next_cursor",
            "continuation",
            "operation",
            "kind",
            "result_id",
            "window"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "items": {
              "maxItems": 100,
              "type": "array",
              "items": {
                "oneOf": [
                  {
                    "type": "object",
                    "properties": {
                      "kind": {
                        "type": "string",
                        "const": "value"
                      },
                      "at": {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      "value": {
                        "type": "number"
                      },
                      "pace": {
                        "type": "number"
                      }
                    },
                    "required": [
                      "kind",
                      "at",
                      "value",
                      "pace"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "kind": {
                        "type": "string",
                        "const": "habit"
                      },
                      "from": {
                        "type": "string",
                        "format": "date",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                        "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                      },
                      "to": {
                        "type": "string",
                        "format": "date",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                        "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                      },
                      "actual": {
                        "type": "integer",
                        "minimum": -9007199254740991,
                        "maximum": 9007199254740991
                      },
                      "expected": {
                        "type": "number"
                      },
                      "expected_full": {
                        "type": "number"
                      }
                    },
                    "required": [
                      "kind",
                      "from",
                      "to",
                      "actual",
                      "expected",
                      "expected_full"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "kind": {
                        "type": "string",
                        "const": "performance"
                      },
                      "id": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      "at": {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      "value": {
                        "type": "number"
                      },
                      "target": {
                        "type": "number"
                      },
                      "gap": {
                        "type": "number"
                      },
                      "share": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "required": [
                      "kind",
                      "id",
                      "at",
                      "value",
                      "target",
                      "gap",
                      "share"
                    ],
                    "additionalProperties": false
                  }
                ]
              }
            },
            "next_cursor": {
              "anyOf": [
                {
                  "type": "string",
                  "minLength": 1
                },
                {
                  "type": "null"
                }
              ]
            },
            "continuation": {
              "anyOf": [
                {
                  "type": "object",
                  "properties": {
                    "tool": {
                      "type": "string",
                      "const": "result_read"
                    },
                    "arguments": {
                      "type": "object",
                      "properties": {
                        "cursor": {
                          "type": "string",
                          "minLength": 1
                        },
                        "limit": {
                          "type": "integer",
                          "minimum": 1,
                          "maximum": 100
                        },
                        "result_id": {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                        },
                        "operation": {
                          "type": "string",
                          "const": "history"
                        },
                        "kind": {
                          "type": "string",
                          "const": "trend"
                        },
                        "window": {
                          "type": "object",
                          "properties": {
                            "since": {
                              "type": "string",
                              "format": "date-time",
                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                            },
                            "until": {
                              "type": "string",
                              "format": "date-time",
                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                            }
                          },
                          "required": [
                            "since",
                            "until"
                          ],
                          "additionalProperties": false
                        }
                      },
                      "required": [
                        "cursor",
                        "limit",
                        "result_id",
                        "operation",
                        "kind",
                        "window"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "required": [
                    "tool",
                    "arguments"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "null"
                }
              ]
            },
            "operation": {
              "type": "string",
              "const": "history"
            },
            "kind": {
              "type": "string",
              "const": "trend"
            },
            "result_id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "window": {
              "type": "object",
              "properties": {
                "since": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "until": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                }
              },
              "required": [
                "since",
                "until"
              ],
              "additionalProperties": false
            }
          },
          "required": [
            "items",
            "next_cursor",
            "continuation",
            "operation",
            "kind",
            "result_id",
            "window"
          ],
          "additionalProperties": false
        }
      ]
    }
  }
]
results.update · write · contract-only

Feature declaration: updateResult

Requirement: docs/feature-specs/F4-results.md · Access: entitled-write

Tables: results (write), cycles (read), objectives (read), result_logs (read), habit_logs (read)

Trusted context: authenticated actor

Retry: Inspect state after uncertain outcomes; never infer rollback from a response failure.

Expected errors: UNAUTHORIZED, BAD_REQUEST, FORBIDDEN, NOT_FOUND, CONFLICT, NOT_IMPLEMENTED, INTERNAL_SERVER_ERROR

API consumers

[
  {
    "operation": "results.update",
    "service": "results.update",
    "binding": "bound"
  }
]

MCP consumers

[
  {
    "tool": "result_write",
    "collection": "results",
    "specification": "docs/feature-specs/F4-results.md#mcp-source-mapping--selected-target",
    "operation": "update",
    "binding": "planned",
    "mode": "adapted",
    "readiness": "contract-only",
    "services": [
      "results.update"
    ],
    "gap": null,
    "projection": "Project record.result and changed on writes; history preserves its resolved window, kind and cursor; list preserves parent/attention filters."
  }
]

Service input

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
    },
    "title": {
      "type": "string"
    },
    "description": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ]
    },
    "objective_id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
    },
    "metric_type": {
      "type": "string",
      "enum": [
        "number",
        "percentage",
        "milestone",
        "habit",
        "performance"
      ],
      "description": "UI label: Type. Number, Percentage, Milestone, Habit or Performance."
    },
    "target_value": {
      "type": "number"
    },
    "start_value": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "null"
        }
      ]
    },
    "unit": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ]
    },
    "cadence": {
      "type": "string",
      "enum": [
        "weekly",
        "monthly"
      ],
      "description": "UI label: Cadence. Weekly or Monthly; per supplies the Times value."
    },
    "per": {
      "type": "integer",
      "minimum": 1,
      "maximum": 9007199254740991,
      "description": "UI label: Times per selected Cadence."
    },
    "since": {
      "type": "string",
      "format": "date",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      "description": "Calendar date as YYYY-MM-DD in the profile timezone."
    },
    "status": {
      "type": "string",
      "enum": [
        "in_progress",
        "completed"
      ],
      "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}

Service output

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "record": {
      "type": "object",
      "properties": {
        "result": {
          "oneOf": [
            {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "objective_id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "title": {
                  "type": "string"
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "metric_type": {
                  "type": "string",
                  "const": "number"
                },
                "start_value": {
                  "type": "number"
                },
                "target_value": {
                  "type": "number"
                },
                "unit": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "UI label: Unit. Used by Number and Performance results."
                },
                "cadence": {
                  "type": "null"
                },
                "per": {
                  "type": "null"
                },
                "since": {
                  "type": "null"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "in_progress",
                    "completed"
                  ],
                  "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                },
                "created_at": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "short_code": {
                  "type": "string",
                  "minLength": 1
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                },
                "current_value": {
                  "type": "number",
                  "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                },
                "boundary_value": {
                  "type": "number"
                },
                "progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "boundary_progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "movement": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "movement_pp": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "evidence_count": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "last_recorded_at": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "habit_expected_since_boundary": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "habit_logs_since_boundary": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "performance_share": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "id",
                "objective_id",
                "title",
                "description",
                "metric_type",
                "start_value",
                "target_value",
                "unit",
                "cadence",
                "per",
                "since",
                "status",
                "created_at",
                "short_code",
                "url",
                "current_value",
                "boundary_value",
                "progress_pct",
                "boundary_progress_pct",
                "movement",
                "movement_pp",
                "evidence_count",
                "last_recorded_at",
                "habit_expected_since_boundary",
                "habit_logs_since_boundary",
                "performance_share"
              ],
              "additionalProperties": false
            },
            {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "objective_id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "title": {
                  "type": "string"
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "metric_type": {
                  "type": "string",
                  "const": "percentage"
                },
                "start_value": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 100
                },
                "target_value": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 100
                },
                "unit": {
                  "type": "null"
                },
                "cadence": {
                  "type": "null"
                },
                "per": {
                  "type": "null"
                },
                "since": {
                  "type": "null"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "in_progress",
                    "completed"
                  ],
                  "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                },
                "created_at": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "short_code": {
                  "type": "string",
                  "minLength": 1
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                },
                "current_value": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 100
                },
                "boundary_value": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 100
                },
                "progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "boundary_progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "movement": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "movement_pp": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "evidence_count": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "last_recorded_at": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "habit_expected_since_boundary": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "habit_logs_since_boundary": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "performance_share": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "id",
                "objective_id",
                "title",
                "description",
                "metric_type",
                "start_value",
                "target_value",
                "unit",
                "cadence",
                "per",
                "since",
                "status",
                "created_at",
                "short_code",
                "url",
                "current_value",
                "boundary_value",
                "progress_pct",
                "boundary_progress_pct",
                "movement",
                "movement_pp",
                "evidence_count",
                "last_recorded_at",
                "habit_expected_since_boundary",
                "habit_logs_since_boundary",
                "performance_share"
              ],
              "additionalProperties": false
            },
            {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "objective_id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "title": {
                  "type": "string"
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "metric_type": {
                  "type": "string",
                  "const": "milestone"
                },
                "start_value": {
                  "type": "number",
                  "const": 0
                },
                "target_value": {
                  "type": "number",
                  "const": 1
                },
                "unit": {
                  "type": "null"
                },
                "cadence": {
                  "type": "null"
                },
                "per": {
                  "type": "null"
                },
                "since": {
                  "type": "null"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "in_progress",
                    "completed"
                  ],
                  "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                },
                "created_at": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "short_code": {
                  "type": "string",
                  "minLength": 1
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                },
                "current_value": {
                  "anyOf": [
                    {
                      "type": "number",
                      "const": 0
                    },
                    {
                      "type": "number",
                      "const": 1
                    }
                  ]
                },
                "boundary_value": {
                  "anyOf": [
                    {
                      "type": "number",
                      "const": 0
                    },
                    {
                      "type": "number",
                      "const": 1
                    }
                  ]
                },
                "progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "boundary_progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "movement": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "movement_pp": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "evidence_count": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "last_recorded_at": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "habit_expected_since_boundary": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "habit_logs_since_boundary": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "performance_share": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "id",
                "objective_id",
                "title",
                "description",
                "metric_type",
                "start_value",
                "target_value",
                "unit",
                "cadence",
                "per",
                "since",
                "status",
                "created_at",
                "short_code",
                "url",
                "current_value",
                "boundary_value",
                "progress_pct",
                "boundary_progress_pct",
                "movement",
                "movement_pp",
                "evidence_count",
                "last_recorded_at",
                "habit_expected_since_boundary",
                "habit_logs_since_boundary",
                "performance_share"
              ],
              "additionalProperties": false
            },
            {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "objective_id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "title": {
                  "type": "string"
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "metric_type": {
                  "type": "string",
                  "const": "habit"
                },
                "start_value": {
                  "type": "number",
                  "const": 0
                },
                "target_value": {
                  "type": "number",
                  "const": 100
                },
                "unit": {
                  "type": "null"
                },
                "cadence": {
                  "type": "string",
                  "enum": [
                    "weekly",
                    "monthly"
                  ],
                  "description": "UI label: Cadence. Weekly or Monthly; per supplies the Times value."
                },
                "per": {
                  "type": "integer",
                  "exclusiveMinimum": 0,
                  "maximum": 9007199254740991
                },
                "since": {
                  "type": "string",
                  "format": "date",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                  "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "in_progress",
                    "completed"
                  ],
                  "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                },
                "created_at": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "short_code": {
                  "type": "string",
                  "minLength": 1
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                },
                "current_value": {
                  "type": "number",
                  "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                },
                "boundary_value": {
                  "type": "number"
                },
                "progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "boundary_progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "movement": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "movement_pp": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "evidence_count": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "last_recorded_at": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "habit_expected_since_boundary": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "habit_logs_since_boundary": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "performance_share": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "id",
                "objective_id",
                "title",
                "description",
                "metric_type",
                "start_value",
                "target_value",
                "unit",
                "cadence",
                "per",
                "since",
                "status",
                "created_at",
                "short_code",
                "url",
                "current_value",
                "boundary_value",
                "progress_pct",
                "boundary_progress_pct",
                "movement",
                "movement_pp",
                "evidence_count",
                "last_recorded_at",
                "habit_expected_since_boundary",
                "habit_logs_since_boundary",
                "performance_share"
              ],
              "additionalProperties": false
            },
            {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "objective_id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "title": {
                  "type": "string"
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "metric_type": {
                  "type": "string",
                  "const": "performance"
                },
                "start_value": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "UI label: Start. Metric baseline; habit baselines are derived rather than stored."
                },
                "target_value": {
                  "type": "number"
                },
                "unit": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "UI label: Unit. Used by Number and Performance results."
                },
                "cadence": {
                  "type": "null"
                },
                "per": {
                  "type": "null"
                },
                "since": {
                  "type": "string",
                  "format": "date",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                  "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "in_progress",
                    "completed"
                  ],
                  "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                },
                "created_at": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "short_code": {
                  "type": "string",
                  "minLength": 1
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                },
                "current_value": {
                  "type": "number",
                  "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                },
                "boundary_value": {
                  "type": "number"
                },
                "progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "boundary_progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "movement": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "movement_pp": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "evidence_count": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "last_recorded_at": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "habit_expected_since_boundary": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "habit_logs_since_boundary": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "performance_share": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "id",
                "objective_id",
                "title",
                "description",
                "metric_type",
                "start_value",
                "target_value",
                "unit",
                "cadence",
                "per",
                "since",
                "status",
                "created_at",
                "short_code",
                "url",
                "current_value",
                "boundary_value",
                "progress_pct",
                "boundary_progress_pct",
                "movement",
                "movement_pp",
                "evidence_count",
                "last_recorded_at",
                "habit_expected_since_boundary",
                "habit_logs_since_boundary",
                "performance_share"
              ],
              "additionalProperties": false
            }
          ]
        },
        "parents": {
          "type": "object",
          "properties": {
            "cycle": {
              "anyOf": [
                {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    "intention": {
                      "anyOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "null"
                        }
                      ],
                      "description": "UI label: Intention. Optional guiding focus; the cycle is identified by its date range, not a name."
                    },
                    "start_at": {
                      "type": "string",
                      "format": "date",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                      "description": "UI label: Starts."
                    },
                    "end_at": {
                      "type": "string",
                      "format": "date",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                      "description": "UI label: Ends."
                    },
                    "status": {
                      "type": "string",
                      "enum": [
                        "active",
                        "archived"
                      ]
                    },
                    "created_at": {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    "url": {
                      "type": "string",
                      "format": "uri"
                    },
                    "achievement_pct": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ],
                      "description": "UI label: Achievement. Derived from objective progress; unavailable when nothing is measurable."
                    },
                    "time_gone_pct": {
                      "type": "number",
                      "minimum": 0,
                      "maximum": 100,
                      "description": "UI label: Time gone. Derived percentage of the cycle elapsed."
                    },
                    "length_weeks": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991,
                      "description": "UI label: Length, in weeks; derived from Starts and Ends."
                    }
                  },
                  "required": [
                    "id",
                    "intention",
                    "start_at",
                    "end_at",
                    "status",
                    "created_at",
                    "url",
                    "achievement_pct",
                    "time_gone_pct",
                    "length_weeks"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "null"
                }
              ]
            },
            "objectives": {
              "type": "object",
              "properties": {
                "items": {
                  "maxItems": 50,
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      "cycle_id": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      "title": {
                        "type": "string"
                      },
                      "description": {
                        "type": "string"
                      },
                      "deadline_at": {
                        "anyOf": [
                          {
                            "type": "string",
                            "format": "date",
                            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                            "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "UI label: Deadline; null when no deadline has been set."
                      },
                      "status": {
                        "type": "string",
                        "enum": [
                          "on_track",
                          "off_track",
                          "completed"
                        ],
                        "description": "Objective status: On track, Off track or Completed. Coaching judgment, independent of the derived Progress percentage."
                      },
                      "created_at": {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      "short_code": {
                        "type": "string",
                        "minLength": 1
                      },
                      "url": {
                        "type": "string",
                        "format": "uri"
                      },
                      "progress_pct": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "UI label: Progress. Derived from measurable results, independently of Status."
                      },
                      "boundary_progress_pct": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "Historical progress at the resolved last-session boundary; not current Progress."
                      },
                      "movement_pp": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "required": [
                      "id",
                      "cycle_id",
                      "title",
                      "description",
                      "deadline_at",
                      "status",
                      "created_at",
                      "short_code",
                      "url",
                      "progress_pct",
                      "boundary_progress_pct",
                      "movement_pp"
                    ],
                    "additionalProperties": false
                  }
                },
                "next_cursor": {
                  "anyOf": [
                    {
                      "type": "string",
                      "minLength": 1
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "items",
                "next_cursor"
              ],
              "additionalProperties": false
            }
          },
          "required": [
            "cycle",
            "objectives"
          ],
          "additionalProperties": false
        },
        "result_logs": {
          "type": "object",
          "properties": {
            "items": {
              "maxItems": 100,
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "result_id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "value": {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "comment": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "session_id": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "recorded_at": {
                    "type": "string",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                  }
                },
                "required": [
                  "id",
                  "result_id",
                  "value",
                  "comment",
                  "session_id",
                  "recorded_at"
                ],
                "additionalProperties": false,
                "description": "Result log stored in result_logs. The UI shows value entries under Updates and their non-empty comments under Comments. Value may be null for a comment-only habit entry; evidence and timestamps are immutable."
              }
            },
            "next_cursor": {
              "anyOf": [
                {
                  "type": "string",
                  "minLength": 1
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "items",
            "next_cursor"
          ],
          "additionalProperties": false
        },
        "habit_logs": {
          "type": "object",
          "properties": {
            "items": {
              "maxItems": 100,
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "result_id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "day": {
                    "type": "string",
                    "format": "date",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                    "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                  },
                  "session_id": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "created_at": {
                    "type": "string",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                  }
                },
                "required": [
                  "id",
                  "result_id",
                  "day",
                  "session_id",
                  "created_at"
                ],
                "additionalProperties": false,
                "description": "Habit log stored in habit_logs. The UI marks calendar days and lists them under Updates with the Marked column. One row per result/day; unmarking deletes the row. This is not append-only history."
              }
            },
            "next_cursor": {
              "anyOf": [
                {
                  "type": "string",
                  "minLength": 1
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "items",
            "next_cursor"
          ],
          "additionalProperties": false
        },
        "trend": {
          "type": "object",
          "properties": {
            "items": {
              "maxItems": 100,
              "type": "array",
              "items": {
                "oneOf": [
                  {
                    "type": "object",
                    "properties": {
                      "kind": {
                        "type": "string",
                        "const": "value"
                      },
                      "at": {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      "value": {
                        "type": "number"
                      },
                      "pace": {
                        "type": "number"
                      }
                    },
                    "required": [
                      "kind",
                      "at",
                      "value",
                      "pace"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "kind": {
                        "type": "string",
                        "const": "habit"
                      },
                      "from": {
                        "type": "string",
                        "format": "date",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                        "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                      },
                      "to": {
                        "type": "string",
                        "format": "date",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                        "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                      },
                      "actual": {
                        "type": "integer",
                        "minimum": -9007199254740991,
                        "maximum": 9007199254740991
                      },
                      "expected": {
                        "type": "number"
                      },
                      "expected_full": {
                        "type": "number"
                      }
                    },
                    "required": [
                      "kind",
                      "from",
                      "to",
                      "actual",
                      "expected",
                      "expected_full"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "kind": {
                        "type": "string",
                        "const": "performance"
                      },
                      "id": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      "at": {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      "value": {
                        "type": "number"
                      },
                      "target": {
                        "type": "number"
                      },
                      "gap": {
                        "type": "number"
                      },
                      "share": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "required": [
                      "kind",
                      "id",
                      "at",
                      "value",
                      "target",
                      "gap",
                      "share"
                    ],
                    "additionalProperties": false
                  }
                ]
              }
            },
            "next_cursor": {
              "anyOf": [
                {
                  "type": "string",
                  "minLength": 1
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "items",
            "next_cursor"
          ],
          "additionalProperties": false
        },
        "continuations": {
          "type": "object",
          "propertyNames": {
            "type": "string",
            "enum": [
              "cycles",
              "objectives",
              "results",
              "actions",
              "notes",
              "sessions",
              "result_logs",
              "habit_logs",
              "action_logs",
              "trend"
            ]
          },
          "additionalProperties": {
            "type": "string",
            "minLength": 1
          }
        }
      },
      "required": [
        "result",
        "parents",
        "result_logs",
        "habit_logs",
        "trend",
        "continuations"
      ],
      "additionalProperties": false
    },
    "changed": {
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "entity": {
            "type": "string",
            "enum": [
              "user",
              "cycle",
              "objective",
              "result",
              "result_log",
              "action",
              "action_log",
              "session",
              "note",
              "habit_log"
            ]
          },
          "id": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
            "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
          }
        },
        "required": [
          "entity",
          "id"
        ],
        "additionalProperties": false
      }
    },
    "continuations": {
      "type": "object",
      "propertyNames": {
        "type": "string",
        "enum": [
          "cycles",
          "objectives",
          "results",
          "actions",
          "notes",
          "sessions",
          "result_logs",
          "habit_logs",
          "action_logs",
          "trend"
        ]
      },
      "additionalProperties": {
        "type": "string",
        "minLength": 1
      }
    }
  },
  "required": [
    "record",
    "changed",
    "continuations"
  ],
  "additionalProperties": false
}
Public MCP input/output shapes for comparison
[
  {
    "tool": "result_write",
    "collection": "results",
    "specification": "docs/feature-specs/F4-results.md#mcp-source-mapping--selected-target",
    "operation": "update",
    "binding": "planned",
    "mode": "adapted",
    "readiness": "contract-only",
    "services": [
      "results.update"
    ],
    "gap": null,
    "projection": "Project record.result and changed on writes; history preserves its resolved window, kind and cursor; list preserves parent/attention filters.",
    "input": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "oneOf": [
        {
          "oneOf": [
            {
              "type": "object",
              "properties": {
                "objective_id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "title": {
                  "type": "string",
                  "minLength": 1
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "metric_type": {
                  "type": "string",
                  "const": "number"
                },
                "start_value": {
                  "type": "number"
                },
                "target_value": {
                  "type": "number"
                },
                "unit": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "operation": {
                  "type": "string",
                  "const": "create"
                }
              },
              "required": [
                "objective_id",
                "title",
                "metric_type",
                "target_value",
                "operation"
              ],
              "additionalProperties": false
            },
            {
              "type": "object",
              "properties": {
                "objective_id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "title": {
                  "type": "string",
                  "minLength": 1
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "metric_type": {
                  "type": "string",
                  "const": "percentage"
                },
                "start_value": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 100
                },
                "target_value": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 100
                },
                "operation": {
                  "type": "string",
                  "const": "create"
                }
              },
              "required": [
                "objective_id",
                "title",
                "metric_type",
                "target_value",
                "operation"
              ],
              "additionalProperties": false
            },
            {
              "type": "object",
              "properties": {
                "objective_id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "title": {
                  "type": "string",
                  "minLength": 1
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "metric_type": {
                  "type": "string",
                  "const": "milestone"
                },
                "operation": {
                  "type": "string",
                  "const": "create"
                }
              },
              "required": [
                "objective_id",
                "title",
                "metric_type",
                "operation"
              ],
              "additionalProperties": false
            },
            {
              "type": "object",
              "properties": {
                "objective_id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "title": {
                  "type": "string",
                  "minLength": 1
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "metric_type": {
                  "type": "string",
                  "const": "habit"
                },
                "cadence": {
                  "type": "string",
                  "enum": [
                    "weekly",
                    "monthly"
                  ],
                  "description": "UI label: Cadence. Weekly or Monthly; per supplies the Times value."
                },
                "per": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 9007199254740991,
                  "description": "UI label: Times per selected Cadence."
                },
                "since": {
                  "type": "string",
                  "format": "date",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                  "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                },
                "operation": {
                  "type": "string",
                  "const": "create"
                }
              },
              "required": [
                "objective_id",
                "title",
                "metric_type",
                "cadence",
                "per",
                "operation"
              ],
              "additionalProperties": false
            },
            {
              "type": "object",
              "properties": {
                "objective_id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "title": {
                  "type": "string",
                  "minLength": 1
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "metric_type": {
                  "type": "string",
                  "const": "performance"
                },
                "start_value": {
                  "type": "number"
                },
                "target_value": {
                  "type": "number"
                },
                "unit": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "since": {
                  "type": "string",
                  "format": "date",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                  "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                },
                "operation": {
                  "type": "string",
                  "const": "create"
                }
              },
              "required": [
                "objective_id",
                "title",
                "metric_type",
                "target_value",
                "operation"
              ],
              "additionalProperties": false
            }
          ]
        },
        {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "title": {
              "type": "string",
              "minLength": 1
            },
            "description": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ]
            },
            "objective_id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "metric_type": {
              "type": "string",
              "enum": [
                "number",
                "percentage",
                "milestone",
                "habit",
                "performance"
              ],
              "description": "UI label: Type. Number, Percentage, Milestone, Habit or Performance."
            },
            "target_value": {
              "type": "number"
            },
            "start_value": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "null"
                }
              ]
            },
            "unit": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ]
            },
            "cadence": {
              "type": "string",
              "enum": [
                "weekly",
                "monthly"
              ],
              "description": "UI label: Cadence. Weekly or Monthly; per supplies the Times value."
            },
            "per": {
              "type": "integer",
              "minimum": 1,
              "maximum": 9007199254740991,
              "description": "UI label: Times per selected Cadence."
            },
            "since": {
              "type": "string",
              "format": "date",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
              "description": "Calendar date as YYYY-MM-DD in the profile timezone."
            },
            "status": {
              "type": "string",
              "enum": [
                "in_progress",
                "completed"
              ],
              "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
            },
            "operation": {
              "type": "string",
              "const": "update"
            }
          },
          "required": [
            "id",
            "operation"
          ],
          "additionalProperties": false
        }
      ]
    },
    "output": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "result": {
          "oneOf": [
            {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "objective_id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "title": {
                  "type": "string"
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "metric_type": {
                  "type": "string",
                  "const": "number"
                },
                "start_value": {
                  "type": "number"
                },
                "target_value": {
                  "type": "number"
                },
                "unit": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "UI label: Unit. Used by Number and Performance results."
                },
                "cadence": {
                  "type": "null"
                },
                "per": {
                  "type": "null"
                },
                "since": {
                  "type": "null"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "in_progress",
                    "completed"
                  ],
                  "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                },
                "created_at": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "short_code": {
                  "type": "string",
                  "minLength": 1
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                },
                "current_value": {
                  "type": "number",
                  "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                },
                "boundary_value": {
                  "type": "number"
                },
                "progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "boundary_progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "movement": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "movement_pp": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "evidence_count": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "last_recorded_at": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "habit_expected_since_boundary": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "habit_logs_since_boundary": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "performance_share": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "id",
                "objective_id",
                "title",
                "description",
                "metric_type",
                "start_value",
                "target_value",
                "unit",
                "cadence",
                "per",
                "since",
                "status",
                "created_at",
                "short_code",
                "url",
                "current_value",
                "boundary_value",
                "progress_pct",
                "boundary_progress_pct",
                "movement",
                "movement_pp",
                "evidence_count",
                "last_recorded_at",
                "habit_expected_since_boundary",
                "habit_logs_since_boundary",
                "performance_share"
              ],
              "additionalProperties": false
            },
            {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "objective_id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "title": {
                  "type": "string"
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "metric_type": {
                  "type": "string",
                  "const": "percentage"
                },
                "start_value": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 100
                },
                "target_value": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 100
                },
                "unit": {
                  "type": "null"
                },
                "cadence": {
                  "type": "null"
                },
                "per": {
                  "type": "null"
                },
                "since": {
                  "type": "null"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "in_progress",
                    "completed"
                  ],
                  "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                },
                "created_at": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "short_code": {
                  "type": "string",
                  "minLength": 1
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                },
                "current_value": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 100
                },
                "boundary_value": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 100
                },
                "progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "boundary_progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "movement": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "movement_pp": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "evidence_count": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "last_recorded_at": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "habit_expected_since_boundary": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "habit_logs_since_boundary": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "performance_share": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "id",
                "objective_id",
                "title",
                "description",
                "metric_type",
                "start_value",
                "target_value",
                "unit",
                "cadence",
                "per",
                "since",
                "status",
                "created_at",
                "short_code",
                "url",
                "current_value",
                "boundary_value",
                "progress_pct",
                "boundary_progress_pct",
                "movement",
                "movement_pp",
                "evidence_count",
                "last_recorded_at",
                "habit_expected_since_boundary",
                "habit_logs_since_boundary",
                "performance_share"
              ],
              "additionalProperties": false
            },
            {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "objective_id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "title": {
                  "type": "string"
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "metric_type": {
                  "type": "string",
                  "const": "milestone"
                },
                "start_value": {
                  "type": "number",
                  "const": 0
                },
                "target_value": {
                  "type": "number",
                  "const": 1
                },
                "unit": {
                  "type": "null"
                },
                "cadence": {
                  "type": "null"
                },
                "per": {
                  "type": "null"
                },
                "since": {
                  "type": "null"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "in_progress",
                    "completed"
                  ],
                  "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                },
                "created_at": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "short_code": {
                  "type": "string",
                  "minLength": 1
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                },
                "current_value": {
                  "anyOf": [
                    {
                      "type": "number",
                      "const": 0
                    },
                    {
                      "type": "number",
                      "const": 1
                    }
                  ]
                },
                "boundary_value": {
                  "anyOf": [
                    {
                      "type": "number",
                      "const": 0
                    },
                    {
                      "type": "number",
                      "const": 1
                    }
                  ]
                },
                "progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "boundary_progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "movement": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "movement_pp": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "evidence_count": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "last_recorded_at": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "habit_expected_since_boundary": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "habit_logs_since_boundary": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "performance_share": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "id",
                "objective_id",
                "title",
                "description",
                "metric_type",
                "start_value",
                "target_value",
                "unit",
                "cadence",
                "per",
                "since",
                "status",
                "created_at",
                "short_code",
                "url",
                "current_value",
                "boundary_value",
                "progress_pct",
                "boundary_progress_pct",
                "movement",
                "movement_pp",
                "evidence_count",
                "last_recorded_at",
                "habit_expected_since_boundary",
                "habit_logs_since_boundary",
                "performance_share"
              ],
              "additionalProperties": false
            },
            {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "objective_id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "title": {
                  "type": "string"
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "metric_type": {
                  "type": "string",
                  "const": "habit"
                },
                "start_value": {
                  "type": "number",
                  "const": 0
                },
                "target_value": {
                  "type": "number",
                  "const": 100
                },
                "unit": {
                  "type": "null"
                },
                "cadence": {
                  "type": "string",
                  "enum": [
                    "weekly",
                    "monthly"
                  ],
                  "description": "UI label: Cadence. Weekly or Monthly; per supplies the Times value."
                },
                "per": {
                  "type": "integer",
                  "exclusiveMinimum": 0,
                  "maximum": 9007199254740991
                },
                "since": {
                  "type": "string",
                  "format": "date",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                  "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "in_progress",
                    "completed"
                  ],
                  "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                },
                "created_at": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "short_code": {
                  "type": "string",
                  "minLength": 1
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                },
                "current_value": {
                  "type": "number",
                  "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                },
                "boundary_value": {
                  "type": "number"
                },
                "progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "boundary_progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "movement": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "movement_pp": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "evidence_count": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "last_recorded_at": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "habit_expected_since_boundary": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "habit_logs_since_boundary": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "performance_share": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "id",
                "objective_id",
                "title",
                "description",
                "metric_type",
                "start_value",
                "target_value",
                "unit",
                "cadence",
                "per",
                "since",
                "status",
                "created_at",
                "short_code",
                "url",
                "current_value",
                "boundary_value",
                "progress_pct",
                "boundary_progress_pct",
                "movement",
                "movement_pp",
                "evidence_count",
                "last_recorded_at",
                "habit_expected_since_boundary",
                "habit_logs_since_boundary",
                "performance_share"
              ],
              "additionalProperties": false
            },
            {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "objective_id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "title": {
                  "type": "string"
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "metric_type": {
                  "type": "string",
                  "const": "performance"
                },
                "start_value": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "UI label: Start. Metric baseline; habit baselines are derived rather than stored."
                },
                "target_value": {
                  "type": "number"
                },
                "unit": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "UI label: Unit. Used by Number and Performance results."
                },
                "cadence": {
                  "type": "null"
                },
                "per": {
                  "type": "null"
                },
                "since": {
                  "type": "string",
                  "format": "date",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                  "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "in_progress",
                    "completed"
                  ],
                  "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                },
                "created_at": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "short_code": {
                  "type": "string",
                  "minLength": 1
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                },
                "current_value": {
                  "type": "number",
                  "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                },
                "boundary_value": {
                  "type": "number"
                },
                "progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "boundary_progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "movement": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "movement_pp": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "evidence_count": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "last_recorded_at": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "habit_expected_since_boundary": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "habit_logs_since_boundary": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "performance_share": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "id",
                "objective_id",
                "title",
                "description",
                "metric_type",
                "start_value",
                "target_value",
                "unit",
                "cadence",
                "per",
                "since",
                "status",
                "created_at",
                "short_code",
                "url",
                "current_value",
                "boundary_value",
                "progress_pct",
                "boundary_progress_pct",
                "movement",
                "movement_pp",
                "evidence_count",
                "last_recorded_at",
                "habit_expected_since_boundary",
                "habit_logs_since_boundary",
                "performance_share"
              ],
              "additionalProperties": false
            }
          ]
        },
        "changed": {
          "maxItems": 100,
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "entity": {
                "type": "string",
                "enum": [
                  "user",
                  "cycle",
                  "objective",
                  "result",
                  "result_log",
                  "action",
                  "action_log",
                  "session",
                  "note",
                  "habit_log"
                ]
              },
              "id": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
              }
            },
            "required": [
              "entity",
              "id"
            ],
            "additionalProperties": false
          }
        }
      },
      "required": [
        "result",
        "changed"
      ],
      "additionalProperties": false
    }
  }
]
results.delete · delete · contract-only

Feature declaration: deleteResult

Requirement: docs/feature-specs/F4-results.md · Access: entitled-write

Tables: results (delete)

Trusted context: authenticated actor

Retry: Inspect state after uncertain outcomes; never infer rollback from a response failure.

Expected errors: UNAUTHORIZED, BAD_REQUEST, FORBIDDEN, NOT_FOUND, CONFLICT, NOT_IMPLEMENTED, INTERNAL_SERVER_ERROR

API consumers

[
  {
    "operation": "results.delete",
    "service": "results.delete",
    "binding": "bound"
  }
]

MCP consumers

[
  {
    "tool": "result_delete",
    "collection": "results",
    "specification": "docs/feature-specs/F4-results.md#mcp-source-mapping--selected-target",
    "operation": "commit",
    "binding": "planned",
    "mode": "adapted",
    "readiness": "contract-only",
    "services": [
      "results.delete"
    ],
    "gap": null,
    "projection": "Project record.result and changed on writes; history preserves its resolved window, kind and cursor; list preserves parent/attention filters."
  }
]

Service input

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
    },
    "preview_id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "Server impact preview ID; trusted application approval must already exist."
    }
  },
  "required": [
    "id",
    "preview_id"
  ],
  "additionalProperties": false
}

Service output

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}
Public MCP input/output shapes for comparison
[
  {
    "tool": "result_delete",
    "collection": "results",
    "specification": "docs/feature-specs/F4-results.md#mcp-source-mapping--selected-target",
    "operation": "commit",
    "binding": "planned",
    "mode": "adapted",
    "readiness": "contract-only",
    "services": [
      "results.delete"
    ],
    "gap": null,
    "projection": "Project record.result and changed on writes; history preserves its resolved window, kind and cursor; list preserves parent/attention filters.",
    "input": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "oneOf": [
        {
          "type": "object",
          "properties": {
            "operation": {
              "type": "string",
              "const": "preview"
            },
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Exact owned record UUID. Resolve ambiguous targets before requesting impact."
            }
          },
          "required": [
            "operation",
            "id"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "operation": {
              "type": "string",
              "const": "commit"
            },
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "preview_id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Server preview ID for this target. Not consent: genuine approval must already be recorded by the trusted application."
            }
          },
          "required": [
            "operation",
            "id",
            "preview_id"
          ],
          "additionalProperties": false
        }
      ]
    },
    "output": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "oneOf": [
        {
          "type": "object",
          "properties": {
            "operation": {
              "type": "string",
              "const": "preview"
            },
            "preview_id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "expires_at": {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
            },
            "target": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "title": {
                  "type": "string"
                }
              },
              "required": [
                "id",
                "title"
              ],
              "additionalProperties": false
            },
            "deleted": {
              "type": "object",
              "properties": {
                "results": {
                  "type": "number",
                  "const": 1
                },
                "result_logs": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "habit_logs": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                }
              },
              "required": [
                "results",
                "result_logs",
                "habit_logs"
              ],
              "additionalProperties": false
            },
            "approval": {
              "type": "object",
              "properties": {
                "status": {
                  "type": "string",
                  "const": "required"
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                }
              },
              "required": [
                "status",
                "url"
              ],
              "additionalProperties": false
            }
          },
          "required": [
            "operation",
            "preview_id",
            "expires_at",
            "target",
            "deleted",
            "approval"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "operation": {
              "type": "string",
              "const": "commit"
            },
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            }
          },
          "required": [
            "operation",
            "id"
          ],
          "additionalProperties": false
        }
      ]
    }
  }
]
result_logs.create · write · contract-only

Feature declaration: createResultLog

Requirement: docs/feature-specs/F4-results.md · Access: entitled-write

Tables: result_logs (write), results (read), cycles (read), objectives (read), habit_logs (read), idempotency_keys (write)

Trusted context: authenticated actor

Retry: API requires client-key replay; unkeyed MCP calls must inspect state after an uncertain outcome.

Expected errors: UNAUTHORIZED, BAD_REQUEST, FORBIDDEN, NOT_FOUND, CONFLICT, NOT_IMPLEMENTED, INTERNAL_SERVER_ERROR

API consumers

[
  {
    "operation": "result_logs.create",
    "service": "result_logs.create",
    "binding": "bound"
  }
]

MCP consumers

[
  {
    "tool": "progress_record",
    "collection": "progress",
    "specification": "docs/feature-specs/F4-results.md#mcp-source-mapping--selected-target",
    "operation": "result",
    "binding": "planned",
    "mode": "adapted",
    "readiness": "contract-only",
    "services": [
      "result_logs.create"
    ],
    "gap": null,
    "projection": "Dispatch result evidence, habit day/comment and action outcome to their existing shared operations; project the affected record and changed IDs."
  }
]

Service input

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "anyOf": [
    {
      "type": "object",
      "properties": {
        "result_id": {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
        },
        "value": {
          "type": "number"
        },
        "comment": {
          "type": "string",
          "minLength": 1
        },
        "idempotency_key": {
          "type": "string",
          "minLength": 1,
          "maxLength": 255
        }
      },
      "required": [
        "result_id",
        "idempotency_key"
      ],
      "additionalProperties": false
    },
    {
      "type": "object",
      "properties": {
        "result_id": {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
        },
        "value": {
          "type": "number"
        },
        "comment": {
          "type": "string",
          "minLength": 1
        }
      },
      "required": [
        "result_id"
      ],
      "additionalProperties": false
    }
  ]
}

Service output

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "record": {
      "type": "object",
      "properties": {
        "result": {
          "oneOf": [
            {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "objective_id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "title": {
                  "type": "string"
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "metric_type": {
                  "type": "string",
                  "const": "number"
                },
                "start_value": {
                  "type": "number"
                },
                "target_value": {
                  "type": "number"
                },
                "unit": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "UI label: Unit. Used by Number and Performance results."
                },
                "cadence": {
                  "type": "null"
                },
                "per": {
                  "type": "null"
                },
                "since": {
                  "type": "null"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "in_progress",
                    "completed"
                  ],
                  "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                },
                "created_at": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "short_code": {
                  "type": "string",
                  "minLength": 1
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                },
                "current_value": {
                  "type": "number",
                  "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                },
                "boundary_value": {
                  "type": "number"
                },
                "progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "boundary_progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "movement": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "movement_pp": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "evidence_count": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "last_recorded_at": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "habit_expected_since_boundary": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "habit_logs_since_boundary": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "performance_share": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "id",
                "objective_id",
                "title",
                "description",
                "metric_type",
                "start_value",
                "target_value",
                "unit",
                "cadence",
                "per",
                "since",
                "status",
                "created_at",
                "short_code",
                "url",
                "current_value",
                "boundary_value",
                "progress_pct",
                "boundary_progress_pct",
                "movement",
                "movement_pp",
                "evidence_count",
                "last_recorded_at",
                "habit_expected_since_boundary",
                "habit_logs_since_boundary",
                "performance_share"
              ],
              "additionalProperties": false
            },
            {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "objective_id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "title": {
                  "type": "string"
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "metric_type": {
                  "type": "string",
                  "const": "percentage"
                },
                "start_value": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 100
                },
                "target_value": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 100
                },
                "unit": {
                  "type": "null"
                },
                "cadence": {
                  "type": "null"
                },
                "per": {
                  "type": "null"
                },
                "since": {
                  "type": "null"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "in_progress",
                    "completed"
                  ],
                  "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                },
                "created_at": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "short_code": {
                  "type": "string",
                  "minLength": 1
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                },
                "current_value": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 100
                },
                "boundary_value": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 100
                },
                "progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "boundary_progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "movement": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "movement_pp": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "evidence_count": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "last_recorded_at": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "habit_expected_since_boundary": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "habit_logs_since_boundary": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "performance_share": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "id",
                "objective_id",
                "title",
                "description",
                "metric_type",
                "start_value",
                "target_value",
                "unit",
                "cadence",
                "per",
                "since",
                "status",
                "created_at",
                "short_code",
                "url",
                "current_value",
                "boundary_value",
                "progress_pct",
                "boundary_progress_pct",
                "movement",
                "movement_pp",
                "evidence_count",
                "last_recorded_at",
                "habit_expected_since_boundary",
                "habit_logs_since_boundary",
                "performance_share"
              ],
              "additionalProperties": false
            },
            {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "objective_id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "title": {
                  "type": "string"
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "metric_type": {
                  "type": "string",
                  "const": "milestone"
                },
                "start_value": {
                  "type": "number",
                  "const": 0
                },
                "target_value": {
                  "type": "number",
                  "const": 1
                },
                "unit": {
                  "type": "null"
                },
                "cadence": {
                  "type": "null"
                },
                "per": {
                  "type": "null"
                },
                "since": {
                  "type": "null"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "in_progress",
                    "completed"
                  ],
                  "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                },
                "created_at": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "short_code": {
                  "type": "string",
                  "minLength": 1
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                },
                "current_value": {
                  "anyOf": [
                    {
                      "type": "number",
                      "const": 0
                    },
                    {
                      "type": "number",
                      "const": 1
                    }
                  ]
                },
                "boundary_value": {
                  "anyOf": [
                    {
                      "type": "number",
                      "const": 0
                    },
                    {
                      "type": "number",
                      "const": 1
                    }
                  ]
                },
                "progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "boundary_progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "movement": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "movement_pp": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "evidence_count": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "last_recorded_at": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "habit_expected_since_boundary": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "habit_logs_since_boundary": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "performance_share": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "id",
                "objective_id",
                "title",
                "description",
                "metric_type",
                "start_value",
                "target_value",
                "unit",
                "cadence",
                "per",
                "since",
                "status",
                "created_at",
                "short_code",
                "url",
                "current_value",
                "boundary_value",
                "progress_pct",
                "boundary_progress_pct",
                "movement",
                "movement_pp",
                "evidence_count",
                "last_recorded_at",
                "habit_expected_since_boundary",
                "habit_logs_since_boundary",
                "performance_share"
              ],
              "additionalProperties": false
            },
            {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "objective_id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "title": {
                  "type": "string"
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "metric_type": {
                  "type": "string",
                  "const": "habit"
                },
                "start_value": {
                  "type": "number",
                  "const": 0
                },
                "target_value": {
                  "type": "number",
                  "const": 100
                },
                "unit": {
                  "type": "null"
                },
                "cadence": {
                  "type": "string",
                  "enum": [
                    "weekly",
                    "monthly"
                  ],
                  "description": "UI label: Cadence. Weekly or Monthly; per supplies the Times value."
                },
                "per": {
                  "type": "integer",
                  "exclusiveMinimum": 0,
                  "maximum": 9007199254740991
                },
                "since": {
                  "type": "string",
                  "format": "date",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                  "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "in_progress",
                    "completed"
                  ],
                  "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                },
                "created_at": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "short_code": {
                  "type": "string",
                  "minLength": 1
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                },
                "current_value": {
                  "type": "number",
                  "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                },
                "boundary_value": {
                  "type": "number"
                },
                "progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "boundary_progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "movement": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "movement_pp": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "evidence_count": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "last_recorded_at": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "habit_expected_since_boundary": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "habit_logs_since_boundary": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "performance_share": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "id",
                "objective_id",
                "title",
                "description",
                "metric_type",
                "start_value",
                "target_value",
                "unit",
                "cadence",
                "per",
                "since",
                "status",
                "created_at",
                "short_code",
                "url",
                "current_value",
                "boundary_value",
                "progress_pct",
                "boundary_progress_pct",
                "movement",
                "movement_pp",
                "evidence_count",
                "last_recorded_at",
                "habit_expected_since_boundary",
                "habit_logs_since_boundary",
                "performance_share"
              ],
              "additionalProperties": false
            },
            {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "objective_id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "title": {
                  "type": "string"
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "metric_type": {
                  "type": "string",
                  "const": "performance"
                },
                "start_value": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "UI label: Start. Metric baseline; habit baselines are derived rather than stored."
                },
                "target_value": {
                  "type": "number"
                },
                "unit": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "UI label: Unit. Used by Number and Performance results."
                },
                "cadence": {
                  "type": "null"
                },
                "per": {
                  "type": "null"
                },
                "since": {
                  "type": "string",
                  "format": "date",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                  "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "in_progress",
                    "completed"
                  ],
                  "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                },
                "created_at": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "short_code": {
                  "type": "string",
                  "minLength": 1
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                },
                "current_value": {
                  "type": "number",
                  "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                },
                "boundary_value": {
                  "type": "number"
                },
                "progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "boundary_progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "movement": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "movement_pp": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "evidence_count": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "last_recorded_at": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "habit_expected_since_boundary": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "habit_logs_since_boundary": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "performance_share": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "id",
                "objective_id",
                "title",
                "description",
                "metric_type",
                "start_value",
                "target_value",
                "unit",
                "cadence",
                "per",
                "since",
                "status",
                "created_at",
                "short_code",
                "url",
                "current_value",
                "boundary_value",
                "progress_pct",
                "boundary_progress_pct",
                "movement",
                "movement_pp",
                "evidence_count",
                "last_recorded_at",
                "habit_expected_since_boundary",
                "habit_logs_since_boundary",
                "performance_share"
              ],
              "additionalProperties": false
            }
          ]
        },
        "parents": {
          "type": "object",
          "properties": {
            "cycle": {
              "anyOf": [
                {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    "intention": {
                      "anyOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "null"
                        }
                      ],
                      "description": "UI label: Intention. Optional guiding focus; the cycle is identified by its date range, not a name."
                    },
                    "start_at": {
                      "type": "string",
                      "format": "date",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                      "description": "UI label: Starts."
                    },
                    "end_at": {
                      "type": "string",
                      "format": "date",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                      "description": "UI label: Ends."
                    },
                    "status": {
                      "type": "string",
                      "enum": [
                        "active",
                        "archived"
                      ]
                    },
                    "created_at": {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    "url": {
                      "type": "string",
                      "format": "uri"
                    },
                    "achievement_pct": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ],
                      "description": "UI label: Achievement. Derived from objective progress; unavailable when nothing is measurable."
                    },
                    "time_gone_pct": {
                      "type": "number",
                      "minimum": 0,
                      "maximum": 100,
                      "description": "UI label: Time gone. Derived percentage of the cycle elapsed."
                    },
                    "length_weeks": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991,
                      "description": "UI label: Length, in weeks; derived from Starts and Ends."
                    }
                  },
                  "required": [
                    "id",
                    "intention",
                    "start_at",
                    "end_at",
                    "status",
                    "created_at",
                    "url",
                    "achievement_pct",
                    "time_gone_pct",
                    "length_weeks"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "null"
                }
              ]
            },
            "objectives": {
              "type": "object",
              "properties": {
                "items": {
                  "maxItems": 50,
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      "cycle_id": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      "title": {
                        "type": "string"
                      },
                      "description": {
                        "type": "string"
                      },
                      "deadline_at": {
                        "anyOf": [
                          {
                            "type": "string",
                            "format": "date",
                            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                            "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "UI label: Deadline; null when no deadline has been set."
                      },
                      "status": {
                        "type": "string",
                        "enum": [
                          "on_track",
                          "off_track",
                          "completed"
                        ],
                        "description": "Objective status: On track, Off track or Completed. Coaching judgment, independent of the derived Progress percentage."
                      },
                      "created_at": {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      "short_code": {
                        "type": "string",
                        "minLength": 1
                      },
                      "url": {
                        "type": "string",
                        "format": "uri"
                      },
                      "progress_pct": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "UI label: Progress. Derived from measurable results, independently of Status."
                      },
                      "boundary_progress_pct": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "Historical progress at the resolved last-session boundary; not current Progress."
                      },
                      "movement_pp": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "required": [
                      "id",
                      "cycle_id",
                      "title",
                      "description",
                      "deadline_at",
                      "status",
                      "created_at",
                      "short_code",
                      "url",
                      "progress_pct",
                      "boundary_progress_pct",
                      "movement_pp"
                    ],
                    "additionalProperties": false
                  }
                },
                "next_cursor": {
                  "anyOf": [
                    {
                      "type": "string",
                      "minLength": 1
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "items",
                "next_cursor"
              ],
              "additionalProperties": false
            }
          },
          "required": [
            "cycle",
            "objectives"
          ],
          "additionalProperties": false
        },
        "result_logs": {
          "type": "object",
          "properties": {
            "items": {
              "maxItems": 100,
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "result_id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "value": {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "comment": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "session_id": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "recorded_at": {
                    "type": "string",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                  }
                },
                "required": [
                  "id",
                  "result_id",
                  "value",
                  "comment",
                  "session_id",
                  "recorded_at"
                ],
                "additionalProperties": false,
                "description": "Result log stored in result_logs. The UI shows value entries under Updates and their non-empty comments under Comments. Value may be null for a comment-only habit entry; evidence and timestamps are immutable."
              }
            },
            "next_cursor": {
              "anyOf": [
                {
                  "type": "string",
                  "minLength": 1
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "items",
            "next_cursor"
          ],
          "additionalProperties": false
        },
        "habit_logs": {
          "type": "object",
          "properties": {
            "items": {
              "maxItems": 100,
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "result_id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "day": {
                    "type": "string",
                    "format": "date",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                    "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                  },
                  "session_id": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "created_at": {
                    "type": "string",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                  }
                },
                "required": [
                  "id",
                  "result_id",
                  "day",
                  "session_id",
                  "created_at"
                ],
                "additionalProperties": false,
                "description": "Habit log stored in habit_logs. The UI marks calendar days and lists them under Updates with the Marked column. One row per result/day; unmarking deletes the row. This is not append-only history."
              }
            },
            "next_cursor": {
              "anyOf": [
                {
                  "type": "string",
                  "minLength": 1
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "items",
            "next_cursor"
          ],
          "additionalProperties": false
        },
        "trend": {
          "type": "object",
          "properties": {
            "items": {
              "maxItems": 100,
              "type": "array",
              "items": {
                "oneOf": [
                  {
                    "type": "object",
                    "properties": {
                      "kind": {
                        "type": "string",
                        "const": "value"
                      },
                      "at": {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      "value": {
                        "type": "number"
                      },
                      "pace": {
                        "type": "number"
                      }
                    },
                    "required": [
                      "kind",
                      "at",
                      "value",
                      "pace"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "kind": {
                        "type": "string",
                        "const": "habit"
                      },
                      "from": {
                        "type": "string",
                        "format": "date",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                        "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                      },
                      "to": {
                        "type": "string",
                        "format": "date",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                        "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                      },
                      "actual": {
                        "type": "integer",
                        "minimum": -9007199254740991,
                        "maximum": 9007199254740991
                      },
                      "expected": {
                        "type": "number"
                      },
                      "expected_full": {
                        "type": "number"
                      }
                    },
                    "required": [
                      "kind",
                      "from",
                      "to",
                      "actual",
                      "expected",
                      "expected_full"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "kind": {
                        "type": "string",
                        "const": "performance"
                      },
                      "id": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      "at": {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      "value": {
                        "type": "number"
                      },
                      "target": {
                        "type": "number"
                      },
                      "gap": {
                        "type": "number"
                      },
                      "share": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "required": [
                      "kind",
                      "id",
                      "at",
                      "value",
                      "target",
                      "gap",
                      "share"
                    ],
                    "additionalProperties": false
                  }
                ]
              }
            },
            "next_cursor": {
              "anyOf": [
                {
                  "type": "string",
                  "minLength": 1
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "items",
            "next_cursor"
          ],
          "additionalProperties": false
        },
        "continuations": {
          "type": "object",
          "propertyNames": {
            "type": "string",
            "enum": [
              "cycles",
              "objectives",
              "results",
              "actions",
              "notes",
              "sessions",
              "result_logs",
              "habit_logs",
              "action_logs",
              "trend"
            ]
          },
          "additionalProperties": {
            "type": "string",
            "minLength": 1
          }
        }
      },
      "required": [
        "result",
        "parents",
        "result_logs",
        "habit_logs",
        "trend",
        "continuations"
      ],
      "additionalProperties": false
    },
    "changed": {
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "entity": {
            "type": "string",
            "enum": [
              "user",
              "cycle",
              "objective",
              "result",
              "result_log",
              "action",
              "action_log",
              "session",
              "note",
              "habit_log"
            ]
          },
          "id": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
            "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
          }
        },
        "required": [
          "entity",
          "id"
        ],
        "additionalProperties": false
      }
    },
    "continuations": {
      "type": "object",
      "propertyNames": {
        "type": "string",
        "enum": [
          "cycles",
          "objectives",
          "results",
          "actions",
          "notes",
          "sessions",
          "result_logs",
          "habit_logs",
          "action_logs",
          "trend"
        ]
      },
      "additionalProperties": {
        "type": "string",
        "minLength": 1
      }
    }
  },
  "required": [
    "record",
    "changed",
    "continuations"
  ],
  "additionalProperties": false
}
Public MCP input/output shapes for comparison
[
  {
    "tool": "progress_record",
    "collection": "progress",
    "specification": "docs/feature-specs/F4-results.md#mcp-source-mapping--selected-target",
    "operation": "result",
    "binding": "planned",
    "mode": "adapted",
    "readiness": "contract-only",
    "services": [
      "result_logs.create"
    ],
    "gap": null,
    "projection": "Dispatch result evidence, habit day/comment and action outcome to their existing shared operations; project the affected record and changed IDs.",
    "input": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "anyOf": [
        {
          "anyOf": [
            {
              "type": "object",
              "properties": {
                "result_id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "value": {
                  "type": "number"
                },
                "comment": {
                  "type": "string",
                  "minLength": 1
                },
                "target": {
                  "type": "string",
                  "const": "result"
                }
              },
              "required": [
                "result_id",
                "target"
              ],
              "additionalProperties": false
            },
            {
              "type": "object",
              "properties": {
                "comment": {
                  "type": "string",
                  "minLength": 1
                },
                "result_id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "day": {
                  "type": "string",
                  "format": "date",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                  "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                },
                "marked": {
                  "type": "boolean",
                  "description": "Desired calendar state: true marks the day; false unmarks it. Not an append-only history event."
                },
                "target": {
                  "type": "string",
                  "const": "result"
                }
              },
              "required": [
                "result_id",
                "day",
                "marked",
                "target"
              ],
              "additionalProperties": false
            }
          ]
        },
        {
          "type": "object",
          "properties": {
            "action_id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "status": {
              "type": "string",
              "enum": [
                "open",
                "in_progress",
                "done"
              ],
              "description": "Action status: Open, In progress or Done. The To do UI group includes Open and In progress; Overdue is derived, not a status."
            },
            "comment": {
              "type": "string",
              "minLength": 1
            },
            "target": {
              "type": "string",
              "const": "action"
            }
          },
          "required": [
            "action_id",
            "status",
            "target"
          ],
          "additionalProperties": false
        }
      ]
    },
    "output": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "result": {
              "oneOf": [
                {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    "objective_id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    "title": {
                      "type": "string"
                    },
                    "description": {
                      "anyOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "metric_type": {
                      "type": "string",
                      "const": "number"
                    },
                    "start_value": {
                      "type": "number"
                    },
                    "target_value": {
                      "type": "number"
                    },
                    "unit": {
                      "anyOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "null"
                        }
                      ],
                      "description": "UI label: Unit. Used by Number and Performance results."
                    },
                    "cadence": {
                      "type": "null"
                    },
                    "per": {
                      "type": "null"
                    },
                    "since": {
                      "type": "null"
                    },
                    "status": {
                      "type": "string",
                      "enum": [
                        "in_progress",
                        "completed"
                      ],
                      "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                    },
                    "created_at": {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    "short_code": {
                      "type": "string",
                      "minLength": 1
                    },
                    "url": {
                      "type": "string",
                      "format": "uri"
                    },
                    "current_value": {
                      "type": "number",
                      "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                    },
                    "boundary_value": {
                      "type": "number"
                    },
                    "progress_pct": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "boundary_progress_pct": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "movement": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "movement_pp": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "evidence_count": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    "last_recorded_at": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "date-time",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "habit_expected_since_boundary": {
                      "anyOf": [
                        {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "habit_logs_since_boundary": {
                      "anyOf": [
                        {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "performance_share": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "id",
                    "objective_id",
                    "title",
                    "description",
                    "metric_type",
                    "start_value",
                    "target_value",
                    "unit",
                    "cadence",
                    "per",
                    "since",
                    "status",
                    "created_at",
                    "short_code",
                    "url",
                    "current_value",
                    "boundary_value",
                    "progress_pct",
                    "boundary_progress_pct",
                    "movement",
                    "movement_pp",
                    "evidence_count",
                    "last_recorded_at",
                    "habit_expected_since_boundary",
                    "habit_logs_since_boundary",
                    "performance_share"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    "objective_id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    "title": {
                      "type": "string"
                    },
                    "description": {
                      "anyOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "metric_type": {
                      "type": "string",
                      "const": "percentage"
                    },
                    "start_value": {
                      "type": "number",
                      "minimum": 0,
                      "maximum": 100
                    },
                    "target_value": {
                      "type": "number",
                      "minimum": 0,
                      "maximum": 100
                    },
                    "unit": {
                      "type": "null"
                    },
                    "cadence": {
                      "type": "null"
                    },
                    "per": {
                      "type": "null"
                    },
                    "since": {
                      "type": "null"
                    },
                    "status": {
                      "type": "string",
                      "enum": [
                        "in_progress",
                        "completed"
                      ],
                      "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                    },
                    "created_at": {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    "short_code": {
                      "type": "string",
                      "minLength": 1
                    },
                    "url": {
                      "type": "string",
                      "format": "uri"
                    },
                    "current_value": {
                      "type": "number",
                      "minimum": 0,
                      "maximum": 100
                    },
                    "boundary_value": {
                      "type": "number",
                      "minimum": 0,
                      "maximum": 100
                    },
                    "progress_pct": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "boundary_progress_pct": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "movement": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "movement_pp": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "evidence_count": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    "last_recorded_at": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "date-time",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "habit_expected_since_boundary": {
                      "anyOf": [
                        {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "habit_logs_since_boundary": {
                      "anyOf": [
                        {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "performance_share": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "id",
                    "objective_id",
                    "title",
                    "description",
                    "metric_type",
                    "start_value",
                    "target_value",
                    "unit",
                    "cadence",
                    "per",
                    "since",
                    "status",
                    "created_at",
                    "short_code",
                    "url",
                    "current_value",
                    "boundary_value",
                    "progress_pct",
                    "boundary_progress_pct",
                    "movement",
                    "movement_pp",
                    "evidence_count",
                    "last_recorded_at",
                    "habit_expected_since_boundary",
                    "habit_logs_since_boundary",
                    "performance_share"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    "objective_id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    "title": {
                      "type": "string"
                    },
                    "description": {
                      "anyOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "metric_type": {
                      "type": "string",
                      "const": "milestone"
                    },
                    "start_value": {
                      "type": "number",
                      "const": 0
                    },
                    "target_value": {
                      "type": "number",
                      "const": 1
                    },
                    "unit": {
                      "type": "null"
                    },
                    "cadence": {
                      "type": "null"
                    },
                    "per": {
                      "type": "null"
                    },
                    "since": {
                      "type": "null"
                    },
                    "status": {
                      "type": "string",
                      "enum": [
                        "in_progress",
                        "completed"
                      ],
                      "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                    },
                    "created_at": {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    "short_code": {
                      "type": "string",
                      "minLength": 1
                    },
                    "url": {
                      "type": "string",
                      "format": "uri"
                    },
                    "current_value": {
                      "anyOf": [
                        {
                          "type": "number",
                          "const": 0
                        },
                        {
                          "type": "number",
                          "const": 1
                        }
                      ]
                    },
                    "boundary_value": {
                      "anyOf": [
                        {
                          "type": "number",
                          "const": 0
                        },
                        {
                          "type": "number",
                          "const": 1
                        }
                      ]
                    },
                    "progress_pct": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "boundary_progress_pct": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "movement": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "movement_pp": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "evidence_count": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    "last_recorded_at": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "date-time",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "habit_expected_since_boundary": {
                      "anyOf": [
                        {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "habit_logs_since_boundary": {
                      "anyOf": [
                        {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "performance_share": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "id",
                    "objective_id",
                    "title",
                    "description",
                    "metric_type",
                    "start_value",
                    "target_value",
                    "unit",
                    "cadence",
                    "per",
                    "since",
                    "status",
                    "created_at",
                    "short_code",
                    "url",
                    "current_value",
                    "boundary_value",
                    "progress_pct",
                    "boundary_progress_pct",
                    "movement",
                    "movement_pp",
                    "evidence_count",
                    "last_recorded_at",
                    "habit_expected_since_boundary",
                    "habit_logs_since_boundary",
                    "performance_share"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    "objective_id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    "title": {
                      "type": "string"
                    },
                    "description": {
                      "anyOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "metric_type": {
                      "type": "string",
                      "const": "habit"
                    },
                    "start_value": {
                      "type": "number",
                      "const": 0
                    },
                    "target_value": {
                      "type": "number",
                      "const": 100
                    },
                    "unit": {
                      "type": "null"
                    },
                    "cadence": {
                      "type": "string",
                      "enum": [
                        "weekly",
                        "monthly"
                      ],
                      "description": "UI label: Cadence. Weekly or Monthly; per supplies the Times value."
                    },
                    "per": {
                      "type": "integer",
                      "exclusiveMinimum": 0,
                      "maximum": 9007199254740991
                    },
                    "since": {
                      "type": "string",
                      "format": "date",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                      "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                    },
                    "status": {
                      "type": "string",
                      "enum": [
                        "in_progress",
                        "completed"
                      ],
                      "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                    },
                    "created_at": {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    "short_code": {
                      "type": "string",
                      "minLength": 1
                    },
                    "url": {
                      "type": "string",
                      "format": "uri"
                    },
                    "current_value": {
                      "type": "number",
                      "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                    },
                    "boundary_value": {
                      "type": "number"
                    },
                    "progress_pct": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "boundary_progress_pct": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "movement": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "movement_pp": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "evidence_count": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    "last_recorded_at": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "date-time",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "habit_expected_since_boundary": {
                      "anyOf": [
                        {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "habit_logs_since_boundary": {
                      "anyOf": [
                        {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "performance_share": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "id",
                    "objective_id",
                    "title",
                    "description",
                    "metric_type",
                    "start_value",
                    "target_value",
                    "unit",
                    "cadence",
                    "per",
                    "since",
                    "status",
                    "created_at",
                    "short_code",
                    "url",
                    "current_value",
                    "boundary_value",
                    "progress_pct",
                    "boundary_progress_pct",
                    "movement",
                    "movement_pp",
                    "evidence_count",
                    "last_recorded_at",
                    "habit_expected_since_boundary",
                    "habit_logs_since_boundary",
                    "performance_share"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    "objective_id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    "title": {
                      "type": "string"
                    },
                    "description": {
                      "anyOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "metric_type": {
                      "type": "string",
                      "const": "performance"
                    },
                    "start_value": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ],
                      "description": "UI label: Start. Metric baseline; habit baselines are derived rather than stored."
                    },
                    "target_value": {
                      "type": "number"
                    },
                    "unit": {
                      "anyOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "null"
                        }
                      ],
                      "description": "UI label: Unit. Used by Number and Performance results."
                    },
                    "cadence": {
                      "type": "null"
                    },
                    "per": {
                      "type": "null"
                    },
                    "since": {
                      "type": "string",
                      "format": "date",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                      "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                    },
                    "status": {
                      "type": "string",
                      "enum": [
                        "in_progress",
                        "completed"
                      ],
                      "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                    },
                    "created_at": {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    "short_code": {
                      "type": "string",
                      "minLength": 1
                    },
                    "url": {
                      "type": "string",
                      "format": "uri"
                    },
                    "current_value": {
                      "type": "number",
                      "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                    },
                    "boundary_value": {
                      "type": "number"
                    },
                    "progress_pct": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "boundary_progress_pct": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "movement": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "movement_pp": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "evidence_count": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    "last_recorded_at": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "date-time",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "habit_expected_since_boundary": {
                      "anyOf": [
                        {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "habit_logs_since_boundary": {
                      "anyOf": [
                        {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "performance_share": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "id",
                    "objective_id",
                    "title",
                    "description",
                    "metric_type",
                    "start_value",
                    "target_value",
                    "unit",
                    "cadence",
                    "per",
                    "since",
                    "status",
                    "created_at",
                    "short_code",
                    "url",
                    "current_value",
                    "boundary_value",
                    "progress_pct",
                    "boundary_progress_pct",
                    "movement",
                    "movement_pp",
                    "evidence_count",
                    "last_recorded_at",
                    "habit_expected_since_boundary",
                    "habit_logs_since_boundary",
                    "performance_share"
                  ],
                  "additionalProperties": false
                }
              ]
            },
            "changed": {
              "maxItems": 100,
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "entity": {
                    "type": "string",
                    "enum": [
                      "user",
                      "cycle",
                      "objective",
                      "result",
                      "result_log",
                      "action",
                      "action_log",
                      "session",
                      "note",
                      "habit_log"
                    ]
                  },
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  }
                },
                "required": [
                  "entity",
                  "id"
                ],
                "additionalProperties": false
              }
            }
          },
          "required": [
            "result",
            "changed"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "action": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "cycle_id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "objective_id": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "title": {
                  "type": "string"
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "due_at": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                      "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "UI label: Due. May be unset on a web draft; a set date cannot be cleared."
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "open",
                    "in_progress",
                    "done"
                  ],
                  "description": "Action status: Open, In progress or Done. The To do UI group includes Open and In progress; Overdue is derived, not a status."
                },
                "sort_order": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "Drag order within an action group; not a progress status."
                },
                "session_id": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "created_at": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                },
                "overdue": {
                  "type": "boolean"
                },
                "done_since_boundary": {
                  "type": "boolean"
                }
              },
              "required": [
                "id",
                "cycle_id",
                "objective_id",
                "title",
                "description",
                "due_at",
                "status",
                "sort_order",
                "session_id",
                "created_at",
                "url",
                "overdue",
                "done_since_boundary"
              ],
              "additionalProperties": false
            },
            "changed": {
              "maxItems": 100,
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "entity": {
                    "type": "string",
                    "enum": [
                      "user",
                      "cycle",
                      "objective",
                      "result",
                      "result_log",
                      "action",
                      "action_log",
                      "session",
                      "note",
                      "habit_log"
                    ]
                  },
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  }
                },
                "required": [
                  "entity",
                  "id"
                ],
                "additionalProperties": false
              }
            }
          },
          "required": [
            "action",
            "changed"
          ],
          "additionalProperties": false
        }
      ]
    }
  }
]
result_logs.list · read · contract-only

Feature declaration: listResultLogs

Requirement: docs/feature-specs/F4-results.md · Access: retained-read

Tables: result_logs (read)

Trusted context: authenticated actor

Retry: Safe to retry with the same resolved filters and cursor.

Expected errors: UNAUTHORIZED, BAD_REQUEST, FORBIDDEN, NOT_FOUND, CONFLICT, NOT_IMPLEMENTED, INTERNAL_SERVER_ERROR

API consumers

[
  {
    "operation": "result_logs.list",
    "service": "result_logs.list",
    "binding": "bound"
  }
]

MCP consumers

[]

Service input

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "cursor": {
      "type": "string",
      "minLength": 1
    },
    "limit": {
      "default": 20,
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "result_id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
    }
  },
  "required": [
    "result_id"
  ],
  "additionalProperties": false
}

Service output

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "items": {
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
            "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
          },
          "result_id": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
            "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
          },
          "value": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ]
          },
          "comment": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "session_id": {
            "anyOf": [
              {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
              },
              {
                "type": "null"
              }
            ]
          },
          "recorded_at": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
          }
        },
        "required": [
          "id",
          "result_id",
          "value",
          "comment",
          "session_id",
          "recorded_at"
        ],
        "additionalProperties": false,
        "description": "Result log stored in result_logs. The UI shows value entries under Updates and their non-empty comments under Comments. Value may be null for a comment-only habit entry; evidence and timestamps are immutable."
      }
    },
    "next_cursor": {
      "anyOf": [
        {
          "type": "string",
          "minLength": 1
        },
        {
          "type": "null"
        }
      ]
    }
  },
  "required": [
    "items",
    "next_cursor"
  ],
  "additionalProperties": false
}
Public MCP input/output shapes for comparison
[]
result_logs.clear_comment · write · contract-only

Feature declaration: clearResultLogComment

Requirement: docs/feature-specs/F4-results.md · Access: entitled-write

Tables: result_logs (write), results (read), cycles (read), objectives (read), habit_logs (read)

Trusted context: authenticated actor

Retry: Inspect state after uncertain outcomes; never infer rollback from a response failure.

Expected errors: UNAUTHORIZED, BAD_REQUEST, FORBIDDEN, NOT_FOUND, CONFLICT, NOT_IMPLEMENTED, INTERNAL_SERVER_ERROR

API consumers

[
  {
    "operation": "result_logs.clear_comment",
    "service": "result_logs.clear_comment",
    "binding": "bound"
  }
]

MCP consumers

[]

Service input

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}

Service output

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "record": {
      "type": "object",
      "properties": {
        "result": {
          "oneOf": [
            {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "objective_id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "title": {
                  "type": "string"
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "metric_type": {
                  "type": "string",
                  "const": "number"
                },
                "start_value": {
                  "type": "number"
                },
                "target_value": {
                  "type": "number"
                },
                "unit": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "UI label: Unit. Used by Number and Performance results."
                },
                "cadence": {
                  "type": "null"
                },
                "per": {
                  "type": "null"
                },
                "since": {
                  "type": "null"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "in_progress",
                    "completed"
                  ],
                  "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                },
                "created_at": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "short_code": {
                  "type": "string",
                  "minLength": 1
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                },
                "current_value": {
                  "type": "number",
                  "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                },
                "boundary_value": {
                  "type": "number"
                },
                "progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "boundary_progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "movement": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "movement_pp": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "evidence_count": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "last_recorded_at": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "habit_expected_since_boundary": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "habit_logs_since_boundary": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "performance_share": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "id",
                "objective_id",
                "title",
                "description",
                "metric_type",
                "start_value",
                "target_value",
                "unit",
                "cadence",
                "per",
                "since",
                "status",
                "created_at",
                "short_code",
                "url",
                "current_value",
                "boundary_value",
                "progress_pct",
                "boundary_progress_pct",
                "movement",
                "movement_pp",
                "evidence_count",
                "last_recorded_at",
                "habit_expected_since_boundary",
                "habit_logs_since_boundary",
                "performance_share"
              ],
              "additionalProperties": false
            },
            {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "objective_id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "title": {
                  "type": "string"
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "metric_type": {
                  "type": "string",
                  "const": "percentage"
                },
                "start_value": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 100
                },
                "target_value": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 100
                },
                "unit": {
                  "type": "null"
                },
                "cadence": {
                  "type": "null"
                },
                "per": {
                  "type": "null"
                },
                "since": {
                  "type": "null"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "in_progress",
                    "completed"
                  ],
                  "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                },
                "created_at": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "short_code": {
                  "type": "string",
                  "minLength": 1
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                },
                "current_value": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 100
                },
                "boundary_value": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 100
                },
                "progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "boundary_progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "movement": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "movement_pp": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "evidence_count": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "last_recorded_at": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "habit_expected_since_boundary": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "habit_logs_since_boundary": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "performance_share": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "id",
                "objective_id",
                "title",
                "description",
                "metric_type",
                "start_value",
                "target_value",
                "unit",
                "cadence",
                "per",
                "since",
                "status",
                "created_at",
                "short_code",
                "url",
                "current_value",
                "boundary_value",
                "progress_pct",
                "boundary_progress_pct",
                "movement",
                "movement_pp",
                "evidence_count",
                "last_recorded_at",
                "habit_expected_since_boundary",
                "habit_logs_since_boundary",
                "performance_share"
              ],
              "additionalProperties": false
            },
            {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "objective_id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "title": {
                  "type": "string"
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "metric_type": {
                  "type": "string",
                  "const": "milestone"
                },
                "start_value": {
                  "type": "number",
                  "const": 0
                },
                "target_value": {
                  "type": "number",
                  "const": 1
                },
                "unit": {
                  "type": "null"
                },
                "cadence": {
                  "type": "null"
                },
                "per": {
                  "type": "null"
                },
                "since": {
                  "type": "null"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "in_progress",
                    "completed"
                  ],
                  "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                },
                "created_at": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "short_code": {
                  "type": "string",
                  "minLength": 1
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                },
                "current_value": {
                  "anyOf": [
                    {
                      "type": "number",
                      "const": 0
                    },
                    {
                      "type": "number",
                      "const": 1
                    }
                  ]
                },
                "boundary_value": {
                  "anyOf": [
                    {
                      "type": "number",
                      "const": 0
                    },
                    {
                      "type": "number",
                      "const": 1
                    }
                  ]
                },
                "progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "boundary_progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "movement": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "movement_pp": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "evidence_count": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "last_recorded_at": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "habit_expected_since_boundary": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "habit_logs_since_boundary": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "performance_share": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "id",
                "objective_id",
                "title",
                "description",
                "metric_type",
                "start_value",
                "target_value",
                "unit",
                "cadence",
                "per",
                "since",
                "status",
                "created_at",
                "short_code",
                "url",
                "current_value",
                "boundary_value",
                "progress_pct",
                "boundary_progress_pct",
                "movement",
                "movement_pp",
                "evidence_count",
                "last_recorded_at",
                "habit_expected_since_boundary",
                "habit_logs_since_boundary",
                "performance_share"
              ],
              "additionalProperties": false
            },
            {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "objective_id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "title": {
                  "type": "string"
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "metric_type": {
                  "type": "string",
                  "const": "habit"
                },
                "start_value": {
                  "type": "number",
                  "const": 0
                },
                "target_value": {
                  "type": "number",
                  "const": 100
                },
                "unit": {
                  "type": "null"
                },
                "cadence": {
                  "type": "string",
                  "enum": [
                    "weekly",
                    "monthly"
                  ],
                  "description": "UI label: Cadence. Weekly or Monthly; per supplies the Times value."
                },
                "per": {
                  "type": "integer",
                  "exclusiveMinimum": 0,
                  "maximum": 9007199254740991
                },
                "since": {
                  "type": "string",
                  "format": "date",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                  "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "in_progress",
                    "completed"
                  ],
                  "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                },
                "created_at": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "short_code": {
                  "type": "string",
                  "minLength": 1
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                },
                "current_value": {
                  "type": "number",
                  "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                },
                "boundary_value": {
                  "type": "number"
                },
                "progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "boundary_progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "movement": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "movement_pp": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "evidence_count": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "last_recorded_at": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "habit_expected_since_boundary": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "habit_logs_since_boundary": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "performance_share": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "id",
                "objective_id",
                "title",
                "description",
                "metric_type",
                "start_value",
                "target_value",
                "unit",
                "cadence",
                "per",
                "since",
                "status",
                "created_at",
                "short_code",
                "url",
                "current_value",
                "boundary_value",
                "progress_pct",
                "boundary_progress_pct",
                "movement",
                "movement_pp",
                "evidence_count",
                "last_recorded_at",
                "habit_expected_since_boundary",
                "habit_logs_since_boundary",
                "performance_share"
              ],
              "additionalProperties": false
            },
            {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "objective_id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "title": {
                  "type": "string"
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "metric_type": {
                  "type": "string",
                  "const": "performance"
                },
                "start_value": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "UI label: Start. Metric baseline; habit baselines are derived rather than stored."
                },
                "target_value": {
                  "type": "number"
                },
                "unit": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "UI label: Unit. Used by Number and Performance results."
                },
                "cadence": {
                  "type": "null"
                },
                "per": {
                  "type": "null"
                },
                "since": {
                  "type": "string",
                  "format": "date",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                  "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "in_progress",
                    "completed"
                  ],
                  "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                },
                "created_at": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "short_code": {
                  "type": "string",
                  "minLength": 1
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                },
                "current_value": {
                  "type": "number",
                  "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                },
                "boundary_value": {
                  "type": "number"
                },
                "progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "boundary_progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "movement": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "movement_pp": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "evidence_count": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "last_recorded_at": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "habit_expected_since_boundary": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "habit_logs_since_boundary": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "performance_share": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "id",
                "objective_id",
                "title",
                "description",
                "metric_type",
                "start_value",
                "target_value",
                "unit",
                "cadence",
                "per",
                "since",
                "status",
                "created_at",
                "short_code",
                "url",
                "current_value",
                "boundary_value",
                "progress_pct",
                "boundary_progress_pct",
                "movement",
                "movement_pp",
                "evidence_count",
                "last_recorded_at",
                "habit_expected_since_boundary",
                "habit_logs_since_boundary",
                "performance_share"
              ],
              "additionalProperties": false
            }
          ]
        },
        "parents": {
          "type": "object",
          "properties": {
            "cycle": {
              "anyOf": [
                {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    "intention": {
                      "anyOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "null"
                        }
                      ],
                      "description": "UI label: Intention. Optional guiding focus; the cycle is identified by its date range, not a name."
                    },
                    "start_at": {
                      "type": "string",
                      "format": "date",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                      "description": "UI label: Starts."
                    },
                    "end_at": {
                      "type": "string",
                      "format": "date",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                      "description": "UI label: Ends."
                    },
                    "status": {
                      "type": "string",
                      "enum": [
                        "active",
                        "archived"
                      ]
                    },
                    "created_at": {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    "url": {
                      "type": "string",
                      "format": "uri"
                    },
                    "achievement_pct": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ],
                      "description": "UI label: Achievement. Derived from objective progress; unavailable when nothing is measurable."
                    },
                    "time_gone_pct": {
                      "type": "number",
                      "minimum": 0,
                      "maximum": 100,
                      "description": "UI label: Time gone. Derived percentage of the cycle elapsed."
                    },
                    "length_weeks": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991,
                      "description": "UI label: Length, in weeks; derived from Starts and Ends."
                    }
                  },
                  "required": [
                    "id",
                    "intention",
                    "start_at",
                    "end_at",
                    "status",
                    "created_at",
                    "url",
                    "achievement_pct",
                    "time_gone_pct",
                    "length_weeks"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "null"
                }
              ]
            },
            "objectives": {
              "type": "object",
              "properties": {
                "items": {
                  "maxItems": 50,
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      "cycle_id": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      "title": {
                        "type": "string"
                      },
                      "description": {
                        "type": "string"
                      },
                      "deadline_at": {
                        "anyOf": [
                          {
                            "type": "string",
                            "format": "date",
                            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                            "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "UI label: Deadline; null when no deadline has been set."
                      },
                      "status": {
                        "type": "string",
                        "enum": [
                          "on_track",
                          "off_track",
                          "completed"
                        ],
                        "description": "Objective status: On track, Off track or Completed. Coaching judgment, independent of the derived Progress percentage."
                      },
                      "created_at": {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      "short_code": {
                        "type": "string",
                        "minLength": 1
                      },
                      "url": {
                        "type": "string",
                        "format": "uri"
                      },
                      "progress_pct": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "UI label: Progress. Derived from measurable results, independently of Status."
                      },
                      "boundary_progress_pct": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "Historical progress at the resolved last-session boundary; not current Progress."
                      },
                      "movement_pp": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "required": [
                      "id",
                      "cycle_id",
                      "title",
                      "description",
                      "deadline_at",
                      "status",
                      "created_at",
                      "short_code",
                      "url",
                      "progress_pct",
                      "boundary_progress_pct",
                      "movement_pp"
                    ],
                    "additionalProperties": false
                  }
                },
                "next_cursor": {
                  "anyOf": [
                    {
                      "type": "string",
                      "minLength": 1
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "items",
                "next_cursor"
              ],
              "additionalProperties": false
            }
          },
          "required": [
            "cycle",
            "objectives"
          ],
          "additionalProperties": false
        },
        "result_logs": {
          "type": "object",
          "properties": {
            "items": {
              "maxItems": 100,
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "result_id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "value": {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "comment": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "session_id": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "recorded_at": {
                    "type": "string",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                  }
                },
                "required": [
                  "id",
                  "result_id",
                  "value",
                  "comment",
                  "session_id",
                  "recorded_at"
                ],
                "additionalProperties": false,
                "description": "Result log stored in result_logs. The UI shows value entries under Updates and their non-empty comments under Comments. Value may be null for a comment-only habit entry; evidence and timestamps are immutable."
              }
            },
            "next_cursor": {
              "anyOf": [
                {
                  "type": "string",
                  "minLength": 1
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "items",
            "next_cursor"
          ],
          "additionalProperties": false
        },
        "habit_logs": {
          "type": "object",
          "properties": {
            "items": {
              "maxItems": 100,
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "result_id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "day": {
                    "type": "string",
                    "format": "date",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                    "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                  },
                  "session_id": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "created_at": {
                    "type": "string",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                  }
                },
                "required": [
                  "id",
                  "result_id",
                  "day",
                  "session_id",
                  "created_at"
                ],
                "additionalProperties": false,
                "description": "Habit log stored in habit_logs. The UI marks calendar days and lists them under Updates with the Marked column. One row per result/day; unmarking deletes the row. This is not append-only history."
              }
            },
            "next_cursor": {
              "anyOf": [
                {
                  "type": "string",
                  "minLength": 1
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "items",
            "next_cursor"
          ],
          "additionalProperties": false
        },
        "trend": {
          "type": "object",
          "properties": {
            "items": {
              "maxItems": 100,
              "type": "array",
              "items": {
                "oneOf": [
                  {
                    "type": "object",
                    "properties": {
                      "kind": {
                        "type": "string",
                        "const": "value"
                      },
                      "at": {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      "value": {
                        "type": "number"
                      },
                      "pace": {
                        "type": "number"
                      }
                    },
                    "required": [
                      "kind",
                      "at",
                      "value",
                      "pace"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "kind": {
                        "type": "string",
                        "const": "habit"
                      },
                      "from": {
                        "type": "string",
                        "format": "date",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                        "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                      },
                      "to": {
                        "type": "string",
                        "format": "date",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                        "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                      },
                      "actual": {
                        "type": "integer",
                        "minimum": -9007199254740991,
                        "maximum": 9007199254740991
                      },
                      "expected": {
                        "type": "number"
                      },
                      "expected_full": {
                        "type": "number"
                      }
                    },
                    "required": [
                      "kind",
                      "from",
                      "to",
                      "actual",
                      "expected",
                      "expected_full"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "kind": {
                        "type": "string",
                        "const": "performance"
                      },
                      "id": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      "at": {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      "value": {
                        "type": "number"
                      },
                      "target": {
                        "type": "number"
                      },
                      "gap": {
                        "type": "number"
                      },
                      "share": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "required": [
                      "kind",
                      "id",
                      "at",
                      "value",
                      "target",
                      "gap",
                      "share"
                    ],
                    "additionalProperties": false
                  }
                ]
              }
            },
            "next_cursor": {
              "anyOf": [
                {
                  "type": "string",
                  "minLength": 1
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "items",
            "next_cursor"
          ],
          "additionalProperties": false
        },
        "continuations": {
          "type": "object",
          "propertyNames": {
            "type": "string",
            "enum": [
              "cycles",
              "objectives",
              "results",
              "actions",
              "notes",
              "sessions",
              "result_logs",
              "habit_logs",
              "action_logs",
              "trend"
            ]
          },
          "additionalProperties": {
            "type": "string",
            "minLength": 1
          }
        }
      },
      "required": [
        "result",
        "parents",
        "result_logs",
        "habit_logs",
        "trend",
        "continuations"
      ],
      "additionalProperties": false
    },
    "changed": {
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "entity": {
            "type": "string",
            "enum": [
              "user",
              "cycle",
              "objective",
              "result",
              "result_log",
              "action",
              "action_log",
              "session",
              "note",
              "habit_log"
            ]
          },
          "id": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
            "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
          }
        },
        "required": [
          "entity",
          "id"
        ],
        "additionalProperties": false
      }
    },
    "continuations": {
      "type": "object",
      "propertyNames": {
        "type": "string",
        "enum": [
          "cycles",
          "objectives",
          "results",
          "actions",
          "notes",
          "sessions",
          "result_logs",
          "habit_logs",
          "action_logs",
          "trend"
        ]
      },
      "additionalProperties": {
        "type": "string",
        "minLength": 1
      }
    }
  },
  "required": [
    "record",
    "changed",
    "continuations"
  ],
  "additionalProperties": false
}
Public MCP input/output shapes for comparison
[]
result_logs.delete · delete · contract-only

Feature declaration: deleteResultLog

Requirement: docs/feature-specs/F4-results.md · Access: entitled-write

Tables: result_logs (delete), results (read), cycles (read), objectives (read), habit_logs (read)

Trusted context: authenticated actor

Retry: Inspect state after uncertain outcomes; never infer rollback from a response failure.

Expected errors: UNAUTHORIZED, BAD_REQUEST, FORBIDDEN, NOT_FOUND, CONFLICT, NOT_IMPLEMENTED, INTERNAL_SERVER_ERROR

API consumers

[
  {
    "operation": "result_logs.delete",
    "service": "result_logs.delete",
    "binding": "bound"
  }
]

MCP consumers

[]

Service input

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}

Service output

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "record": {
      "type": "object",
      "properties": {
        "result": {
          "oneOf": [
            {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "objective_id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "title": {
                  "type": "string"
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "metric_type": {
                  "type": "string",
                  "const": "number"
                },
                "start_value": {
                  "type": "number"
                },
                "target_value": {
                  "type": "number"
                },
                "unit": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "UI label: Unit. Used by Number and Performance results."
                },
                "cadence": {
                  "type": "null"
                },
                "per": {
                  "type": "null"
                },
                "since": {
                  "type": "null"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "in_progress",
                    "completed"
                  ],
                  "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                },
                "created_at": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "short_code": {
                  "type": "string",
                  "minLength": 1
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                },
                "current_value": {
                  "type": "number",
                  "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                },
                "boundary_value": {
                  "type": "number"
                },
                "progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "boundary_progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "movement": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "movement_pp": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "evidence_count": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "last_recorded_at": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "habit_expected_since_boundary": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "habit_logs_since_boundary": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "performance_share": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "id",
                "objective_id",
                "title",
                "description",
                "metric_type",
                "start_value",
                "target_value",
                "unit",
                "cadence",
                "per",
                "since",
                "status",
                "created_at",
                "short_code",
                "url",
                "current_value",
                "boundary_value",
                "progress_pct",
                "boundary_progress_pct",
                "movement",
                "movement_pp",
                "evidence_count",
                "last_recorded_at",
                "habit_expected_since_boundary",
                "habit_logs_since_boundary",
                "performance_share"
              ],
              "additionalProperties": false
            },
            {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "objective_id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "title": {
                  "type": "string"
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "metric_type": {
                  "type": "string",
                  "const": "percentage"
                },
                "start_value": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 100
                },
                "target_value": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 100
                },
                "unit": {
                  "type": "null"
                },
                "cadence": {
                  "type": "null"
                },
                "per": {
                  "type": "null"
                },
                "since": {
                  "type": "null"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "in_progress",
                    "completed"
                  ],
                  "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                },
                "created_at": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "short_code": {
                  "type": "string",
                  "minLength": 1
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                },
                "current_value": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 100
                },
                "boundary_value": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 100
                },
                "progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "boundary_progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "movement": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "movement_pp": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "evidence_count": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "last_recorded_at": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "habit_expected_since_boundary": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "habit_logs_since_boundary": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "performance_share": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "id",
                "objective_id",
                "title",
                "description",
                "metric_type",
                "start_value",
                "target_value",
                "unit",
                "cadence",
                "per",
                "since",
                "status",
                "created_at",
                "short_code",
                "url",
                "current_value",
                "boundary_value",
                "progress_pct",
                "boundary_progress_pct",
                "movement",
                "movement_pp",
                "evidence_count",
                "last_recorded_at",
                "habit_expected_since_boundary",
                "habit_logs_since_boundary",
                "performance_share"
              ],
              "additionalProperties": false
            },
            {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "objective_id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "title": {
                  "type": "string"
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "metric_type": {
                  "type": "string",
                  "const": "milestone"
                },
                "start_value": {
                  "type": "number",
                  "const": 0
                },
                "target_value": {
                  "type": "number",
                  "const": 1
                },
                "unit": {
                  "type": "null"
                },
                "cadence": {
                  "type": "null"
                },
                "per": {
                  "type": "null"
                },
                "since": {
                  "type": "null"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "in_progress",
                    "completed"
                  ],
                  "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                },
                "created_at": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "short_code": {
                  "type": "string",
                  "minLength": 1
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                },
                "current_value": {
                  "anyOf": [
                    {
                      "type": "number",
                      "const": 0
                    },
                    {
                      "type": "number",
                      "const": 1
                    }
                  ]
                },
                "boundary_value": {
                  "anyOf": [
                    {
                      "type": "number",
                      "const": 0
                    },
                    {
                      "type": "number",
                      "const": 1
                    }
                  ]
                },
                "progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "boundary_progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "movement": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "movement_pp": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "evidence_count": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "last_recorded_at": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "habit_expected_since_boundary": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "habit_logs_since_boundary": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "performance_share": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "id",
                "objective_id",
                "title",
                "description",
                "metric_type",
                "start_value",
                "target_value",
                "unit",
                "cadence",
                "per",
                "since",
                "status",
                "created_at",
                "short_code",
                "url",
                "current_value",
                "boundary_value",
                "progress_pct",
                "boundary_progress_pct",
                "movement",
                "movement_pp",
                "evidence_count",
                "last_recorded_at",
                "habit_expected_since_boundary",
                "habit_logs_since_boundary",
                "performance_share"
              ],
              "additionalProperties": false
            },
            {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "objective_id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "title": {
                  "type": "string"
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "metric_type": {
                  "type": "string",
                  "const": "habit"
                },
                "start_value": {
                  "type": "number",
                  "const": 0
                },
                "target_value": {
                  "type": "number",
                  "const": 100
                },
                "unit": {
                  "type": "null"
                },
                "cadence": {
                  "type": "string",
                  "enum": [
                    "weekly",
                    "monthly"
                  ],
                  "description": "UI label: Cadence. Weekly or Monthly; per supplies the Times value."
                },
                "per": {
                  "type": "integer",
                  "exclusiveMinimum": 0,
                  "maximum": 9007199254740991
                },
                "since": {
                  "type": "string",
                  "format": "date",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                  "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "in_progress",
                    "completed"
                  ],
                  "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                },
                "created_at": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "short_code": {
                  "type": "string",
                  "minLength": 1
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                },
                "current_value": {
                  "type": "number",
                  "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                },
                "boundary_value": {
                  "type": "number"
                },
                "progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "boundary_progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "movement": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "movement_pp": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "evidence_count": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "last_recorded_at": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "habit_expected_since_boundary": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "habit_logs_since_boundary": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "performance_share": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "id",
                "objective_id",
                "title",
                "description",
                "metric_type",
                "start_value",
                "target_value",
                "unit",
                "cadence",
                "per",
                "since",
                "status",
                "created_at",
                "short_code",
                "url",
                "current_value",
                "boundary_value",
                "progress_pct",
                "boundary_progress_pct",
                "movement",
                "movement_pp",
                "evidence_count",
                "last_recorded_at",
                "habit_expected_since_boundary",
                "habit_logs_since_boundary",
                "performance_share"
              ],
              "additionalProperties": false
            },
            {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "objective_id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "title": {
                  "type": "string"
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "metric_type": {
                  "type": "string",
                  "const": "performance"
                },
                "start_value": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "UI label: Start. Metric baseline; habit baselines are derived rather than stored."
                },
                "target_value": {
                  "type": "number"
                },
                "unit": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "UI label: Unit. Used by Number and Performance results."
                },
                "cadence": {
                  "type": "null"
                },
                "per": {
                  "type": "null"
                },
                "since": {
                  "type": "string",
                  "format": "date",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                  "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "in_progress",
                    "completed"
                  ],
                  "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                },
                "created_at": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "short_code": {
                  "type": "string",
                  "minLength": 1
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                },
                "current_value": {
                  "type": "number",
                  "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                },
                "boundary_value": {
                  "type": "number"
                },
                "progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "boundary_progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "movement": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "movement_pp": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "evidence_count": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "last_recorded_at": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "habit_expected_since_boundary": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "habit_logs_since_boundary": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "performance_share": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "id",
                "objective_id",
                "title",
                "description",
                "metric_type",
                "start_value",
                "target_value",
                "unit",
                "cadence",
                "per",
                "since",
                "status",
                "created_at",
                "short_code",
                "url",
                "current_value",
                "boundary_value",
                "progress_pct",
                "boundary_progress_pct",
                "movement",
                "movement_pp",
                "evidence_count",
                "last_recorded_at",
                "habit_expected_since_boundary",
                "habit_logs_since_boundary",
                "performance_share"
              ],
              "additionalProperties": false
            }
          ]
        },
        "parents": {
          "type": "object",
          "properties": {
            "cycle": {
              "anyOf": [
                {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    "intention": {
                      "anyOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "null"
                        }
                      ],
                      "description": "UI label: Intention. Optional guiding focus; the cycle is identified by its date range, not a name."
                    },
                    "start_at": {
                      "type": "string",
                      "format": "date",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                      "description": "UI label: Starts."
                    },
                    "end_at": {
                      "type": "string",
                      "format": "date",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                      "description": "UI label: Ends."
                    },
                    "status": {
                      "type": "string",
                      "enum": [
                        "active",
                        "archived"
                      ]
                    },
                    "created_at": {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    "url": {
                      "type": "string",
                      "format": "uri"
                    },
                    "achievement_pct": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ],
                      "description": "UI label: Achievement. Derived from objective progress; unavailable when nothing is measurable."
                    },
                    "time_gone_pct": {
                      "type": "number",
                      "minimum": 0,
                      "maximum": 100,
                      "description": "UI label: Time gone. Derived percentage of the cycle elapsed."
                    },
                    "length_weeks": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991,
                      "description": "UI label: Length, in weeks; derived from Starts and Ends."
                    }
                  },
                  "required": [
                    "id",
                    "intention",
                    "start_at",
                    "end_at",
                    "status",
                    "created_at",
                    "url",
                    "achievement_pct",
                    "time_gone_pct",
                    "length_weeks"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "null"
                }
              ]
            },
            "objectives": {
              "type": "object",
              "properties": {
                "items": {
                  "maxItems": 50,
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      "cycle_id": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      "title": {
                        "type": "string"
                      },
                      "description": {
                        "type": "string"
                      },
                      "deadline_at": {
                        "anyOf": [
                          {
                            "type": "string",
                            "format": "date",
                            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                            "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "UI label: Deadline; null when no deadline has been set."
                      },
                      "status": {
                        "type": "string",
                        "enum": [
                          "on_track",
                          "off_track",
                          "completed"
                        ],
                        "description": "Objective status: On track, Off track or Completed. Coaching judgment, independent of the derived Progress percentage."
                      },
                      "created_at": {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      "short_code": {
                        "type": "string",
                        "minLength": 1
                      },
                      "url": {
                        "type": "string",
                        "format": "uri"
                      },
                      "progress_pct": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "UI label: Progress. Derived from measurable results, independently of Status."
                      },
                      "boundary_progress_pct": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "Historical progress at the resolved last-session boundary; not current Progress."
                      },
                      "movement_pp": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "required": [
                      "id",
                      "cycle_id",
                      "title",
                      "description",
                      "deadline_at",
                      "status",
                      "created_at",
                      "short_code",
                      "url",
                      "progress_pct",
                      "boundary_progress_pct",
                      "movement_pp"
                    ],
                    "additionalProperties": false
                  }
                },
                "next_cursor": {
                  "anyOf": [
                    {
                      "type": "string",
                      "minLength": 1
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "items",
                "next_cursor"
              ],
              "additionalProperties": false
            }
          },
          "required": [
            "cycle",
            "objectives"
          ],
          "additionalProperties": false
        },
        "result_logs": {
          "type": "object",
          "properties": {
            "items": {
              "maxItems": 100,
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "result_id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "value": {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "comment": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "session_id": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "recorded_at": {
                    "type": "string",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                  }
                },
                "required": [
                  "id",
                  "result_id",
                  "value",
                  "comment",
                  "session_id",
                  "recorded_at"
                ],
                "additionalProperties": false,
                "description": "Result log stored in result_logs. The UI shows value entries under Updates and their non-empty comments under Comments. Value may be null for a comment-only habit entry; evidence and timestamps are immutable."
              }
            },
            "next_cursor": {
              "anyOf": [
                {
                  "type": "string",
                  "minLength": 1
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "items",
            "next_cursor"
          ],
          "additionalProperties": false
        },
        "habit_logs": {
          "type": "object",
          "properties": {
            "items": {
              "maxItems": 100,
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "result_id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "day": {
                    "type": "string",
                    "format": "date",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                    "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                  },
                  "session_id": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "created_at": {
                    "type": "string",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                  }
                },
                "required": [
                  "id",
                  "result_id",
                  "day",
                  "session_id",
                  "created_at"
                ],
                "additionalProperties": false,
                "description": "Habit log stored in habit_logs. The UI marks calendar days and lists them under Updates with the Marked column. One row per result/day; unmarking deletes the row. This is not append-only history."
              }
            },
            "next_cursor": {
              "anyOf": [
                {
                  "type": "string",
                  "minLength": 1
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "items",
            "next_cursor"
          ],
          "additionalProperties": false
        },
        "trend": {
          "type": "object",
          "properties": {
            "items": {
              "maxItems": 100,
              "type": "array",
              "items": {
                "oneOf": [
                  {
                    "type": "object",
                    "properties": {
                      "kind": {
                        "type": "string",
                        "const": "value"
                      },
                      "at": {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      "value": {
                        "type": "number"
                      },
                      "pace": {
                        "type": "number"
                      }
                    },
                    "required": [
                      "kind",
                      "at",
                      "value",
                      "pace"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "kind": {
                        "type": "string",
                        "const": "habit"
                      },
                      "from": {
                        "type": "string",
                        "format": "date",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                        "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                      },
                      "to": {
                        "type": "string",
                        "format": "date",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                        "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                      },
                      "actual": {
                        "type": "integer",
                        "minimum": -9007199254740991,
                        "maximum": 9007199254740991
                      },
                      "expected": {
                        "type": "number"
                      },
                      "expected_full": {
                        "type": "number"
                      }
                    },
                    "required": [
                      "kind",
                      "from",
                      "to",
                      "actual",
                      "expected",
                      "expected_full"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "kind": {
                        "type": "string",
                        "const": "performance"
                      },
                      "id": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      "at": {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      "value": {
                        "type": "number"
                      },
                      "target": {
                        "type": "number"
                      },
                      "gap": {
                        "type": "number"
                      },
                      "share": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "required": [
                      "kind",
                      "id",
                      "at",
                      "value",
                      "target",
                      "gap",
                      "share"
                    ],
                    "additionalProperties": false
                  }
                ]
              }
            },
            "next_cursor": {
              "anyOf": [
                {
                  "type": "string",
                  "minLength": 1
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "items",
            "next_cursor"
          ],
          "additionalProperties": false
        },
        "continuations": {
          "type": "object",
          "propertyNames": {
            "type": "string",
            "enum": [
              "cycles",
              "objectives",
              "results",
              "actions",
              "notes",
              "sessions",
              "result_logs",
              "habit_logs",
              "action_logs",
              "trend"
            ]
          },
          "additionalProperties": {
            "type": "string",
            "minLength": 1
          }
        }
      },
      "required": [
        "result",
        "parents",
        "result_logs",
        "habit_logs",
        "trend",
        "continuations"
      ],
      "additionalProperties": false
    },
    "changed": {
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "entity": {
            "type": "string",
            "enum": [
              "user",
              "cycle",
              "objective",
              "result",
              "result_log",
              "action",
              "action_log",
              "session",
              "note",
              "habit_log"
            ]
          },
          "id": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
            "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
          }
        },
        "required": [
          "entity",
          "id"
        ],
        "additionalProperties": false
      }
    },
    "continuations": {
      "type": "object",
      "propertyNames": {
        "type": "string",
        "enum": [
          "cycles",
          "objectives",
          "results",
          "actions",
          "notes",
          "sessions",
          "result_logs",
          "habit_logs",
          "action_logs",
          "trend"
        ]
      },
      "additionalProperties": {
        "type": "string",
        "minLength": 1
      }
    }
  },
  "required": [
    "record",
    "changed",
    "continuations"
  ],
  "additionalProperties": false
}
Public MCP input/output shapes for comparison
[]
habit_logs.set · write · contract-only

Feature declaration: setHabitLog

Requirement: docs/feature-specs/F4-results.md · Access: entitled-write

Tables: habit_logs (write), results (read), cycles (read), objectives (read), result_logs (read)

Trusted context: authenticated actor

Retry: Repeated desired day state is safe; a comment is evidence and must not be blindly repeated.

Expected errors: UNAUTHORIZED, BAD_REQUEST, FORBIDDEN, NOT_FOUND, CONFLICT, NOT_IMPLEMENTED, INTERNAL_SERVER_ERROR

API consumers

[
  {
    "operation": "habit_logs.set",
    "service": "habit_logs.set",
    "binding": "bound"
  }
]

MCP consumers

[
  {
    "tool": "progress_record",
    "collection": "progress",
    "specification": "docs/feature-specs/F4-results.md#mcp-source-mapping--selected-target",
    "operation": "habit",
    "binding": "planned",
    "mode": "adapted",
    "readiness": "contract-only",
    "services": [
      "habit_logs.set"
    ],
    "gap": null,
    "projection": "Dispatch result evidence, habit day/comment and action outcome to their existing shared operations; project the affected record and changed IDs."
  }
]

Service input

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "comment": {
      "description": "Optional evidence comment saved atomically with the requested habit day state.",
      "type": "string",
      "minLength": 1
    },
    "result_id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
    },
    "day": {
      "type": "string",
      "format": "date",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      "description": "Calendar date as YYYY-MM-DD in the profile timezone."
    },
    "marked": {
      "type": "boolean",
      "description": "Desired calendar state: true marks the day; false unmarks it. Not an append-only history event."
    }
  },
  "required": [
    "result_id",
    "day",
    "marked"
  ],
  "additionalProperties": false
}

Service output

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "record": {
      "type": "object",
      "properties": {
        "result": {
          "oneOf": [
            {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "objective_id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "title": {
                  "type": "string"
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "metric_type": {
                  "type": "string",
                  "const": "number"
                },
                "start_value": {
                  "type": "number"
                },
                "target_value": {
                  "type": "number"
                },
                "unit": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "UI label: Unit. Used by Number and Performance results."
                },
                "cadence": {
                  "type": "null"
                },
                "per": {
                  "type": "null"
                },
                "since": {
                  "type": "null"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "in_progress",
                    "completed"
                  ],
                  "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                },
                "created_at": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "short_code": {
                  "type": "string",
                  "minLength": 1
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                },
                "current_value": {
                  "type": "number",
                  "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                },
                "boundary_value": {
                  "type": "number"
                },
                "progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "boundary_progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "movement": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "movement_pp": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "evidence_count": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "last_recorded_at": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "habit_expected_since_boundary": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "habit_logs_since_boundary": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "performance_share": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "id",
                "objective_id",
                "title",
                "description",
                "metric_type",
                "start_value",
                "target_value",
                "unit",
                "cadence",
                "per",
                "since",
                "status",
                "created_at",
                "short_code",
                "url",
                "current_value",
                "boundary_value",
                "progress_pct",
                "boundary_progress_pct",
                "movement",
                "movement_pp",
                "evidence_count",
                "last_recorded_at",
                "habit_expected_since_boundary",
                "habit_logs_since_boundary",
                "performance_share"
              ],
              "additionalProperties": false
            },
            {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "objective_id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "title": {
                  "type": "string"
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "metric_type": {
                  "type": "string",
                  "const": "percentage"
                },
                "start_value": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 100
                },
                "target_value": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 100
                },
                "unit": {
                  "type": "null"
                },
                "cadence": {
                  "type": "null"
                },
                "per": {
                  "type": "null"
                },
                "since": {
                  "type": "null"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "in_progress",
                    "completed"
                  ],
                  "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                },
                "created_at": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "short_code": {
                  "type": "string",
                  "minLength": 1
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                },
                "current_value": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 100
                },
                "boundary_value": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 100
                },
                "progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "boundary_progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "movement": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "movement_pp": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "evidence_count": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "last_recorded_at": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "habit_expected_since_boundary": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "habit_logs_since_boundary": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "performance_share": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "id",
                "objective_id",
                "title",
                "description",
                "metric_type",
                "start_value",
                "target_value",
                "unit",
                "cadence",
                "per",
                "since",
                "status",
                "created_at",
                "short_code",
                "url",
                "current_value",
                "boundary_value",
                "progress_pct",
                "boundary_progress_pct",
                "movement",
                "movement_pp",
                "evidence_count",
                "last_recorded_at",
                "habit_expected_since_boundary",
                "habit_logs_since_boundary",
                "performance_share"
              ],
              "additionalProperties": false
            },
            {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "objective_id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "title": {
                  "type": "string"
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "metric_type": {
                  "type": "string",
                  "const": "milestone"
                },
                "start_value": {
                  "type": "number",
                  "const": 0
                },
                "target_value": {
                  "type": "number",
                  "const": 1
                },
                "unit": {
                  "type": "null"
                },
                "cadence": {
                  "type": "null"
                },
                "per": {
                  "type": "null"
                },
                "since": {
                  "type": "null"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "in_progress",
                    "completed"
                  ],
                  "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                },
                "created_at": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "short_code": {
                  "type": "string",
                  "minLength": 1
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                },
                "current_value": {
                  "anyOf": [
                    {
                      "type": "number",
                      "const": 0
                    },
                    {
                      "type": "number",
                      "const": 1
                    }
                  ]
                },
                "boundary_value": {
                  "anyOf": [
                    {
                      "type": "number",
                      "const": 0
                    },
                    {
                      "type": "number",
                      "const": 1
                    }
                  ]
                },
                "progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "boundary_progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "movement": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "movement_pp": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "evidence_count": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "last_recorded_at": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "habit_expected_since_boundary": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "habit_logs_since_boundary": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "performance_share": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "id",
                "objective_id",
                "title",
                "description",
                "metric_type",
                "start_value",
                "target_value",
                "unit",
                "cadence",
                "per",
                "since",
                "status",
                "created_at",
                "short_code",
                "url",
                "current_value",
                "boundary_value",
                "progress_pct",
                "boundary_progress_pct",
                "movement",
                "movement_pp",
                "evidence_count",
                "last_recorded_at",
                "habit_expected_since_boundary",
                "habit_logs_since_boundary",
                "performance_share"
              ],
              "additionalProperties": false
            },
            {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "objective_id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "title": {
                  "type": "string"
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "metric_type": {
                  "type": "string",
                  "const": "habit"
                },
                "start_value": {
                  "type": "number",
                  "const": 0
                },
                "target_value": {
                  "type": "number",
                  "const": 100
                },
                "unit": {
                  "type": "null"
                },
                "cadence": {
                  "type": "string",
                  "enum": [
                    "weekly",
                    "monthly"
                  ],
                  "description": "UI label: Cadence. Weekly or Monthly; per supplies the Times value."
                },
                "per": {
                  "type": "integer",
                  "exclusiveMinimum": 0,
                  "maximum": 9007199254740991
                },
                "since": {
                  "type": "string",
                  "format": "date",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                  "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "in_progress",
                    "completed"
                  ],
                  "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                },
                "created_at": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "short_code": {
                  "type": "string",
                  "minLength": 1
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                },
                "current_value": {
                  "type": "number",
                  "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                },
                "boundary_value": {
                  "type": "number"
                },
                "progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "boundary_progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "movement": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "movement_pp": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "evidence_count": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "last_recorded_at": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "habit_expected_since_boundary": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "habit_logs_since_boundary": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "performance_share": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "id",
                "objective_id",
                "title",
                "description",
                "metric_type",
                "start_value",
                "target_value",
                "unit",
                "cadence",
                "per",
                "since",
                "status",
                "created_at",
                "short_code",
                "url",
                "current_value",
                "boundary_value",
                "progress_pct",
                "boundary_progress_pct",
                "movement",
                "movement_pp",
                "evidence_count",
                "last_recorded_at",
                "habit_expected_since_boundary",
                "habit_logs_since_boundary",
                "performance_share"
              ],
              "additionalProperties": false
            },
            {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "objective_id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "title": {
                  "type": "string"
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "metric_type": {
                  "type": "string",
                  "const": "performance"
                },
                "start_value": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "UI label: Start. Metric baseline; habit baselines are derived rather than stored."
                },
                "target_value": {
                  "type": "number"
                },
                "unit": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "UI label: Unit. Used by Number and Performance results."
                },
                "cadence": {
                  "type": "null"
                },
                "per": {
                  "type": "null"
                },
                "since": {
                  "type": "string",
                  "format": "date",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                  "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "in_progress",
                    "completed"
                  ],
                  "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                },
                "created_at": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "short_code": {
                  "type": "string",
                  "minLength": 1
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                },
                "current_value": {
                  "type": "number",
                  "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                },
                "boundary_value": {
                  "type": "number"
                },
                "progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "boundary_progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "movement": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "movement_pp": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "evidence_count": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "last_recorded_at": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "habit_expected_since_boundary": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "habit_logs_since_boundary": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "performance_share": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "id",
                "objective_id",
                "title",
                "description",
                "metric_type",
                "start_value",
                "target_value",
                "unit",
                "cadence",
                "per",
                "since",
                "status",
                "created_at",
                "short_code",
                "url",
                "current_value",
                "boundary_value",
                "progress_pct",
                "boundary_progress_pct",
                "movement",
                "movement_pp",
                "evidence_count",
                "last_recorded_at",
                "habit_expected_since_boundary",
                "habit_logs_since_boundary",
                "performance_share"
              ],
              "additionalProperties": false
            }
          ]
        },
        "parents": {
          "type": "object",
          "properties": {
            "cycle": {
              "anyOf": [
                {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    "intention": {
                      "anyOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "null"
                        }
                      ],
                      "description": "UI label: Intention. Optional guiding focus; the cycle is identified by its date range, not a name."
                    },
                    "start_at": {
                      "type": "string",
                      "format": "date",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                      "description": "UI label: Starts."
                    },
                    "end_at": {
                      "type": "string",
                      "format": "date",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                      "description": "UI label: Ends."
                    },
                    "status": {
                      "type": "string",
                      "enum": [
                        "active",
                        "archived"
                      ]
                    },
                    "created_at": {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    "url": {
                      "type": "string",
                      "format": "uri"
                    },
                    "achievement_pct": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ],
                      "description": "UI label: Achievement. Derived from objective progress; unavailable when nothing is measurable."
                    },
                    "time_gone_pct": {
                      "type": "number",
                      "minimum": 0,
                      "maximum": 100,
                      "description": "UI label: Time gone. Derived percentage of the cycle elapsed."
                    },
                    "length_weeks": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991,
                      "description": "UI label: Length, in weeks; derived from Starts and Ends."
                    }
                  },
                  "required": [
                    "id",
                    "intention",
                    "start_at",
                    "end_at",
                    "status",
                    "created_at",
                    "url",
                    "achievement_pct",
                    "time_gone_pct",
                    "length_weeks"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "null"
                }
              ]
            },
            "objectives": {
              "type": "object",
              "properties": {
                "items": {
                  "maxItems": 50,
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      "cycle_id": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      "title": {
                        "type": "string"
                      },
                      "description": {
                        "type": "string"
                      },
                      "deadline_at": {
                        "anyOf": [
                          {
                            "type": "string",
                            "format": "date",
                            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                            "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "UI label: Deadline; null when no deadline has been set."
                      },
                      "status": {
                        "type": "string",
                        "enum": [
                          "on_track",
                          "off_track",
                          "completed"
                        ],
                        "description": "Objective status: On track, Off track or Completed. Coaching judgment, independent of the derived Progress percentage."
                      },
                      "created_at": {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      "short_code": {
                        "type": "string",
                        "minLength": 1
                      },
                      "url": {
                        "type": "string",
                        "format": "uri"
                      },
                      "progress_pct": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "UI label: Progress. Derived from measurable results, independently of Status."
                      },
                      "boundary_progress_pct": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "Historical progress at the resolved last-session boundary; not current Progress."
                      },
                      "movement_pp": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "required": [
                      "id",
                      "cycle_id",
                      "title",
                      "description",
                      "deadline_at",
                      "status",
                      "created_at",
                      "short_code",
                      "url",
                      "progress_pct",
                      "boundary_progress_pct",
                      "movement_pp"
                    ],
                    "additionalProperties": false
                  }
                },
                "next_cursor": {
                  "anyOf": [
                    {
                      "type": "string",
                      "minLength": 1
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "items",
                "next_cursor"
              ],
              "additionalProperties": false
            }
          },
          "required": [
            "cycle",
            "objectives"
          ],
          "additionalProperties": false
        },
        "result_logs": {
          "type": "object",
          "properties": {
            "items": {
              "maxItems": 100,
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "result_id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "value": {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "comment": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "session_id": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "recorded_at": {
                    "type": "string",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                  }
                },
                "required": [
                  "id",
                  "result_id",
                  "value",
                  "comment",
                  "session_id",
                  "recorded_at"
                ],
                "additionalProperties": false,
                "description": "Result log stored in result_logs. The UI shows value entries under Updates and their non-empty comments under Comments. Value may be null for a comment-only habit entry; evidence and timestamps are immutable."
              }
            },
            "next_cursor": {
              "anyOf": [
                {
                  "type": "string",
                  "minLength": 1
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "items",
            "next_cursor"
          ],
          "additionalProperties": false
        },
        "habit_logs": {
          "type": "object",
          "properties": {
            "items": {
              "maxItems": 100,
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "result_id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "day": {
                    "type": "string",
                    "format": "date",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                    "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                  },
                  "session_id": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "created_at": {
                    "type": "string",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                  }
                },
                "required": [
                  "id",
                  "result_id",
                  "day",
                  "session_id",
                  "created_at"
                ],
                "additionalProperties": false,
                "description": "Habit log stored in habit_logs. The UI marks calendar days and lists them under Updates with the Marked column. One row per result/day; unmarking deletes the row. This is not append-only history."
              }
            },
            "next_cursor": {
              "anyOf": [
                {
                  "type": "string",
                  "minLength": 1
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "items",
            "next_cursor"
          ],
          "additionalProperties": false
        },
        "trend": {
          "type": "object",
          "properties": {
            "items": {
              "maxItems": 100,
              "type": "array",
              "items": {
                "oneOf": [
                  {
                    "type": "object",
                    "properties": {
                      "kind": {
                        "type": "string",
                        "const": "value"
                      },
                      "at": {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      "value": {
                        "type": "number"
                      },
                      "pace": {
                        "type": "number"
                      }
                    },
                    "required": [
                      "kind",
                      "at",
                      "value",
                      "pace"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "kind": {
                        "type": "string",
                        "const": "habit"
                      },
                      "from": {
                        "type": "string",
                        "format": "date",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                        "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                      },
                      "to": {
                        "type": "string",
                        "format": "date",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                        "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                      },
                      "actual": {
                        "type": "integer",
                        "minimum": -9007199254740991,
                        "maximum": 9007199254740991
                      },
                      "expected": {
                        "type": "number"
                      },
                      "expected_full": {
                        "type": "number"
                      }
                    },
                    "required": [
                      "kind",
                      "from",
                      "to",
                      "actual",
                      "expected",
                      "expected_full"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "kind": {
                        "type": "string",
                        "const": "performance"
                      },
                      "id": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      "at": {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      "value": {
                        "type": "number"
                      },
                      "target": {
                        "type": "number"
                      },
                      "gap": {
                        "type": "number"
                      },
                      "share": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "required": [
                      "kind",
                      "id",
                      "at",
                      "value",
                      "target",
                      "gap",
                      "share"
                    ],
                    "additionalProperties": false
                  }
                ]
              }
            },
            "next_cursor": {
              "anyOf": [
                {
                  "type": "string",
                  "minLength": 1
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "items",
            "next_cursor"
          ],
          "additionalProperties": false
        },
        "continuations": {
          "type": "object",
          "propertyNames": {
            "type": "string",
            "enum": [
              "cycles",
              "objectives",
              "results",
              "actions",
              "notes",
              "sessions",
              "result_logs",
              "habit_logs",
              "action_logs",
              "trend"
            ]
          },
          "additionalProperties": {
            "type": "string",
            "minLength": 1
          }
        }
      },
      "required": [
        "result",
        "parents",
        "result_logs",
        "habit_logs",
        "trend",
        "continuations"
      ],
      "additionalProperties": false
    },
    "changed": {
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "entity": {
            "type": "string",
            "enum": [
              "user",
              "cycle",
              "objective",
              "result",
              "result_log",
              "action",
              "action_log",
              "session",
              "note",
              "habit_log"
            ]
          },
          "id": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
            "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
          }
        },
        "required": [
          "entity",
          "id"
        ],
        "additionalProperties": false
      }
    },
    "continuations": {
      "type": "object",
      "propertyNames": {
        "type": "string",
        "enum": [
          "cycles",
          "objectives",
          "results",
          "actions",
          "notes",
          "sessions",
          "result_logs",
          "habit_logs",
          "action_logs",
          "trend"
        ]
      },
      "additionalProperties": {
        "type": "string",
        "minLength": 1
      }
    }
  },
  "required": [
    "record",
    "changed",
    "continuations"
  ],
  "additionalProperties": false
}
Public MCP input/output shapes for comparison
[
  {
    "tool": "progress_record",
    "collection": "progress",
    "specification": "docs/feature-specs/F4-results.md#mcp-source-mapping--selected-target",
    "operation": "habit",
    "binding": "planned",
    "mode": "adapted",
    "readiness": "contract-only",
    "services": [
      "habit_logs.set"
    ],
    "gap": null,
    "projection": "Dispatch result evidence, habit day/comment and action outcome to their existing shared operations; project the affected record and changed IDs.",
    "input": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "anyOf": [
        {
          "anyOf": [
            {
              "type": "object",
              "properties": {
                "result_id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "value": {
                  "type": "number"
                },
                "comment": {
                  "type": "string",
                  "minLength": 1
                },
                "target": {
                  "type": "string",
                  "const": "result"
                }
              },
              "required": [
                "result_id",
                "target"
              ],
              "additionalProperties": false
            },
            {
              "type": "object",
              "properties": {
                "comment": {
                  "type": "string",
                  "minLength": 1
                },
                "result_id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "day": {
                  "type": "string",
                  "format": "date",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                  "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                },
                "marked": {
                  "type": "boolean",
                  "description": "Desired calendar state: true marks the day; false unmarks it. Not an append-only history event."
                },
                "target": {
                  "type": "string",
                  "const": "result"
                }
              },
              "required": [
                "result_id",
                "day",
                "marked",
                "target"
              ],
              "additionalProperties": false
            }
          ]
        },
        {
          "type": "object",
          "properties": {
            "action_id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "status": {
              "type": "string",
              "enum": [
                "open",
                "in_progress",
                "done"
              ],
              "description": "Action status: Open, In progress or Done. The To do UI group includes Open and In progress; Overdue is derived, not a status."
            },
            "comment": {
              "type": "string",
              "minLength": 1
            },
            "target": {
              "type": "string",
              "const": "action"
            }
          },
          "required": [
            "action_id",
            "status",
            "target"
          ],
          "additionalProperties": false
        }
      ]
    },
    "output": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "result": {
              "oneOf": [
                {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    "objective_id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    "title": {
                      "type": "string"
                    },
                    "description": {
                      "anyOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "metric_type": {
                      "type": "string",
                      "const": "number"
                    },
                    "start_value": {
                      "type": "number"
                    },
                    "target_value": {
                      "type": "number"
                    },
                    "unit": {
                      "anyOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "null"
                        }
                      ],
                      "description": "UI label: Unit. Used by Number and Performance results."
                    },
                    "cadence": {
                      "type": "null"
                    },
                    "per": {
                      "type": "null"
                    },
                    "since": {
                      "type": "null"
                    },
                    "status": {
                      "type": "string",
                      "enum": [
                        "in_progress",
                        "completed"
                      ],
                      "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                    },
                    "created_at": {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    "short_code": {
                      "type": "string",
                      "minLength": 1
                    },
                    "url": {
                      "type": "string",
                      "format": "uri"
                    },
                    "current_value": {
                      "type": "number",
                      "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                    },
                    "boundary_value": {
                      "type": "number"
                    },
                    "progress_pct": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "boundary_progress_pct": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "movement": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "movement_pp": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "evidence_count": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    "last_recorded_at": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "date-time",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "habit_expected_since_boundary": {
                      "anyOf": [
                        {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "habit_logs_since_boundary": {
                      "anyOf": [
                        {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "performance_share": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "id",
                    "objective_id",
                    "title",
                    "description",
                    "metric_type",
                    "start_value",
                    "target_value",
                    "unit",
                    "cadence",
                    "per",
                    "since",
                    "status",
                    "created_at",
                    "short_code",
                    "url",
                    "current_value",
                    "boundary_value",
                    "progress_pct",
                    "boundary_progress_pct",
                    "movement",
                    "movement_pp",
                    "evidence_count",
                    "last_recorded_at",
                    "habit_expected_since_boundary",
                    "habit_logs_since_boundary",
                    "performance_share"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    "objective_id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    "title": {
                      "type": "string"
                    },
                    "description": {
                      "anyOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "metric_type": {
                      "type": "string",
                      "const": "percentage"
                    },
                    "start_value": {
                      "type": "number",
                      "minimum": 0,
                      "maximum": 100
                    },
                    "target_value": {
                      "type": "number",
                      "minimum": 0,
                      "maximum": 100
                    },
                    "unit": {
                      "type": "null"
                    },
                    "cadence": {
                      "type": "null"
                    },
                    "per": {
                      "type": "null"
                    },
                    "since": {
                      "type": "null"
                    },
                    "status": {
                      "type": "string",
                      "enum": [
                        "in_progress",
                        "completed"
                      ],
                      "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                    },
                    "created_at": {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    "short_code": {
                      "type": "string",
                      "minLength": 1
                    },
                    "url": {
                      "type": "string",
                      "format": "uri"
                    },
                    "current_value": {
                      "type": "number",
                      "minimum": 0,
                      "maximum": 100
                    },
                    "boundary_value": {
                      "type": "number",
                      "minimum": 0,
                      "maximum": 100
                    },
                    "progress_pct": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "boundary_progress_pct": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "movement": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "movement_pp": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "evidence_count": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    "last_recorded_at": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "date-time",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "habit_expected_since_boundary": {
                      "anyOf": [
                        {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "habit_logs_since_boundary": {
                      "anyOf": [
                        {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "performance_share": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "id",
                    "objective_id",
                    "title",
                    "description",
                    "metric_type",
                    "start_value",
                    "target_value",
                    "unit",
                    "cadence",
                    "per",
                    "since",
                    "status",
                    "created_at",
                    "short_code",
                    "url",
                    "current_value",
                    "boundary_value",
                    "progress_pct",
                    "boundary_progress_pct",
                    "movement",
                    "movement_pp",
                    "evidence_count",
                    "last_recorded_at",
                    "habit_expected_since_boundary",
                    "habit_logs_since_boundary",
                    "performance_share"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    "objective_id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    "title": {
                      "type": "string"
                    },
                    "description": {
                      "anyOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "metric_type": {
                      "type": "string",
                      "const": "milestone"
                    },
                    "start_value": {
                      "type": "number",
                      "const": 0
                    },
                    "target_value": {
                      "type": "number",
                      "const": 1
                    },
                    "unit": {
                      "type": "null"
                    },
                    "cadence": {
                      "type": "null"
                    },
                    "per": {
                      "type": "null"
                    },
                    "since": {
                      "type": "null"
                    },
                    "status": {
                      "type": "string",
                      "enum": [
                        "in_progress",
                        "completed"
                      ],
                      "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                    },
                    "created_at": {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    "short_code": {
                      "type": "string",
                      "minLength": 1
                    },
                    "url": {
                      "type": "string",
                      "format": "uri"
                    },
                    "current_value": {
                      "anyOf": [
                        {
                          "type": "number",
                          "const": 0
                        },
                        {
                          "type": "number",
                          "const": 1
                        }
                      ]
                    },
                    "boundary_value": {
                      "anyOf": [
                        {
                          "type": "number",
                          "const": 0
                        },
                        {
                          "type": "number",
                          "const": 1
                        }
                      ]
                    },
                    "progress_pct": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "boundary_progress_pct": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "movement": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "movement_pp": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "evidence_count": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    "last_recorded_at": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "date-time",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "habit_expected_since_boundary": {
                      "anyOf": [
                        {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "habit_logs_since_boundary": {
                      "anyOf": [
                        {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "performance_share": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "id",
                    "objective_id",
                    "title",
                    "description",
                    "metric_type",
                    "start_value",
                    "target_value",
                    "unit",
                    "cadence",
                    "per",
                    "since",
                    "status",
                    "created_at",
                    "short_code",
                    "url",
                    "current_value",
                    "boundary_value",
                    "progress_pct",
                    "boundary_progress_pct",
                    "movement",
                    "movement_pp",
                    "evidence_count",
                    "last_recorded_at",
                    "habit_expected_since_boundary",
                    "habit_logs_since_boundary",
                    "performance_share"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    "objective_id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    "title": {
                      "type": "string"
                    },
                    "description": {
                      "anyOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "metric_type": {
                      "type": "string",
                      "const": "habit"
                    },
                    "start_value": {
                      "type": "number",
                      "const": 0
                    },
                    "target_value": {
                      "type": "number",
                      "const": 100
                    },
                    "unit": {
                      "type": "null"
                    },
                    "cadence": {
                      "type": "string",
                      "enum": [
                        "weekly",
                        "monthly"
                      ],
                      "description": "UI label: Cadence. Weekly or Monthly; per supplies the Times value."
                    },
                    "per": {
                      "type": "integer",
                      "exclusiveMinimum": 0,
                      "maximum": 9007199254740991
                    },
                    "since": {
                      "type": "string",
                      "format": "date",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                      "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                    },
                    "status": {
                      "type": "string",
                      "enum": [
                        "in_progress",
                        "completed"
                      ],
                      "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                    },
                    "created_at": {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    "short_code": {
                      "type": "string",
                      "minLength": 1
                    },
                    "url": {
                      "type": "string",
                      "format": "uri"
                    },
                    "current_value": {
                      "type": "number",
                      "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                    },
                    "boundary_value": {
                      "type": "number"
                    },
                    "progress_pct": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "boundary_progress_pct": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "movement": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "movement_pp": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "evidence_count": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    "last_recorded_at": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "date-time",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "habit_expected_since_boundary": {
                      "anyOf": [
                        {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "habit_logs_since_boundary": {
                      "anyOf": [
                        {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "performance_share": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "id",
                    "objective_id",
                    "title",
                    "description",
                    "metric_type",
                    "start_value",
                    "target_value",
                    "unit",
                    "cadence",
                    "per",
                    "since",
                    "status",
                    "created_at",
                    "short_code",
                    "url",
                    "current_value",
                    "boundary_value",
                    "progress_pct",
                    "boundary_progress_pct",
                    "movement",
                    "movement_pp",
                    "evidence_count",
                    "last_recorded_at",
                    "habit_expected_since_boundary",
                    "habit_logs_since_boundary",
                    "performance_share"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    "objective_id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    "title": {
                      "type": "string"
                    },
                    "description": {
                      "anyOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "metric_type": {
                      "type": "string",
                      "const": "performance"
                    },
                    "start_value": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ],
                      "description": "UI label: Start. Metric baseline; habit baselines are derived rather than stored."
                    },
                    "target_value": {
                      "type": "number"
                    },
                    "unit": {
                      "anyOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "null"
                        }
                      ],
                      "description": "UI label: Unit. Used by Number and Performance results."
                    },
                    "cadence": {
                      "type": "null"
                    },
                    "per": {
                      "type": "null"
                    },
                    "since": {
                      "type": "string",
                      "format": "date",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                      "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                    },
                    "status": {
                      "type": "string",
                      "enum": [
                        "in_progress",
                        "completed"
                      ],
                      "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                    },
                    "created_at": {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    "short_code": {
                      "type": "string",
                      "minLength": 1
                    },
                    "url": {
                      "type": "string",
                      "format": "uri"
                    },
                    "current_value": {
                      "type": "number",
                      "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                    },
                    "boundary_value": {
                      "type": "number"
                    },
                    "progress_pct": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "boundary_progress_pct": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "movement": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "movement_pp": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "evidence_count": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    "last_recorded_at": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "date-time",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "habit_expected_since_boundary": {
                      "anyOf": [
                        {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "habit_logs_since_boundary": {
                      "anyOf": [
                        {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "performance_share": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "id",
                    "objective_id",
                    "title",
                    "description",
                    "metric_type",
                    "start_value",
                    "target_value",
                    "unit",
                    "cadence",
                    "per",
                    "since",
                    "status",
                    "created_at",
                    "short_code",
                    "url",
                    "current_value",
                    "boundary_value",
                    "progress_pct",
                    "boundary_progress_pct",
                    "movement",
                    "movement_pp",
                    "evidence_count",
                    "last_recorded_at",
                    "habit_expected_since_boundary",
                    "habit_logs_since_boundary",
                    "performance_share"
                  ],
                  "additionalProperties": false
                }
              ]
            },
            "changed": {
              "maxItems": 100,
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "entity": {
                    "type": "string",
                    "enum": [
                      "user",
                      "cycle",
                      "objective",
                      "result",
                      "result_log",
                      "action",
                      "action_log",
                      "session",
                      "note",
                      "habit_log"
                    ]
                  },
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  }
                },
                "required": [
                  "entity",
                  "id"
                ],
                "additionalProperties": false
              }
            }
          },
          "required": [
            "result",
            "changed"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "action": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "cycle_id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "objective_id": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "title": {
                  "type": "string"
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "due_at": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                      "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "UI label: Due. May be unset on a web draft; a set date cannot be cleared."
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "open",
                    "in_progress",
                    "done"
                  ],
                  "description": "Action status: Open, In progress or Done. The To do UI group includes Open and In progress; Overdue is derived, not a status."
                },
                "sort_order": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "Drag order within an action group; not a progress status."
                },
                "session_id": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "created_at": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                },
                "overdue": {
                  "type": "boolean"
                },
                "done_since_boundary": {
                  "type": "boolean"
                }
              },
              "required": [
                "id",
                "cycle_id",
                "objective_id",
                "title",
                "description",
                "due_at",
                "status",
                "sort_order",
                "session_id",
                "created_at",
                "url",
                "overdue",
                "done_since_boundary"
              ],
              "additionalProperties": false
            },
            "changed": {
              "maxItems": 100,
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "entity": {
                    "type": "string",
                    "enum": [
                      "user",
                      "cycle",
                      "objective",
                      "result",
                      "result_log",
                      "action",
                      "action_log",
                      "session",
                      "note",
                      "habit_log"
                    ]
                  },
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  }
                },
                "required": [
                  "entity",
                  "id"
                ],
                "additionalProperties": false
              }
            }
          },
          "required": [
            "action",
            "changed"
          ],
          "additionalProperties": false
        }
      ]
    }
  }
]
habit_logs.list · read · contract-only

Feature declaration: listHabitLogs

Requirement: docs/feature-specs/F4-results.md · Access: retained-read

Tables: habit_logs (read)

Trusted context: authenticated actor

Retry: Safe to retry with the same resolved filters and cursor.

Expected errors: UNAUTHORIZED, BAD_REQUEST, FORBIDDEN, NOT_FOUND, CONFLICT, NOT_IMPLEMENTED, INTERNAL_SERVER_ERROR

API consumers

[
  {
    "operation": "habit_logs.list",
    "service": "habit_logs.list",
    "binding": "bound"
  }
]

MCP consumers

[]

Service input

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "cursor": {
      "type": "string",
      "minLength": 1
    },
    "limit": {
      "default": 20,
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "result_id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
    },
    "from": {
      "type": "string",
      "format": "date",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      "description": "Calendar date as YYYY-MM-DD in the profile timezone."
    },
    "to": {
      "type": "string",
      "format": "date",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      "description": "Calendar date as YYYY-MM-DD in the profile timezone."
    }
  },
  "required": [
    "result_id"
  ],
  "additionalProperties": false
}

Service output

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "items": {
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
            "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
          },
          "result_id": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
            "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
          },
          "day": {
            "type": "string",
            "format": "date",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
            "description": "Calendar date as YYYY-MM-DD in the profile timezone."
          },
          "session_id": {
            "anyOf": [
              {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
              },
              {
                "type": "null"
              }
            ]
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
          }
        },
        "required": [
          "id",
          "result_id",
          "day",
          "session_id",
          "created_at"
        ],
        "additionalProperties": false,
        "description": "Habit log stored in habit_logs. The UI marks calendar days and lists them under Updates with the Marked column. One row per result/day; unmarking deletes the row. This is not append-only history."
      }
    },
    "next_cursor": {
      "anyOf": [
        {
          "type": "string",
          "minLength": 1
        },
        {
          "type": "null"
        }
      ]
    }
  },
  "required": [
    "items",
    "next_cursor"
  ],
  "additionalProperties": false
}
Public MCP input/output shapes for comparison
[]
actions.history · read · contract-only

Feature declaration: readActionHistory

Requirement: docs/feature-specs/F5-actions.md · Access: retained-read

Tables: actions (read), action_logs (read)

Trusted context: authenticated actor

Retry: Safe to retry with the same resolved filters and cursor.

Expected errors: UNAUTHORIZED, BAD_REQUEST, FORBIDDEN, NOT_FOUND, CONFLICT, NOT_IMPLEMENTED, INTERNAL_SERVER_ERROR

API consumers

[]

MCP consumers

[
  {
    "tool": "action_read",
    "collection": "actions",
    "specification": "docs/feature-specs/F5-actions.md#mcp-source-mapping--selected-target",
    "operation": "history",
    "binding": "planned",
    "mode": "adapted",
    "readiness": "contract-only",
    "services": [
      "actions.history"
    ],
    "gap": null,
    "projection": "Project record.action and changed on writes; list uses resolved cycle_id and original filters; history preserves its resolved window."
  }
]

Service input

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "cursor": {
      "type": "string",
      "minLength": 1
    },
    "limit": {
      "default": 20,
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "action_id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
    },
    "window": {
      "type": "object",
      "properties": {
        "since": {
          "description": "Inclusive lower bound. Default: last completed session, falling back to active-cycle start. Date-only values use the profile timezone.",
          "anyOf": [
            {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                  "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                },
                {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                }
              ]
            },
            {
              "type": "string",
              "enum": [
                "last_session",
                "cycle_start"
              ]
            }
          ]
        },
        "until": {
          "description": "Exclusive upper bound; default is the server time captured on the first page.",
          "anyOf": [
            {
              "type": "string",
              "format": "date",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
              "description": "Calendar date as YYYY-MM-DD in the profile timezone."
            },
            {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
            }
          ]
        }
      },
      "additionalProperties": false
    }
  },
  "required": [
    "action_id"
  ],
  "additionalProperties": false
}

Service output

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "items": {
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
            "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
          },
          "action_id": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
            "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
          },
          "status": {
            "type": "string",
            "enum": [
              "open",
              "in_progress",
              "done"
            ],
            "description": "Action status: Open, In progress or Done. The To do UI group includes Open and In progress; Overdue is derived, not a status."
          },
          "comment": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "session_id": {
            "anyOf": [
              {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
              },
              {
                "type": "null"
              }
            ]
          },
          "recorded_at": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
          }
        },
        "required": [
          "id",
          "action_id",
          "status",
          "comment",
          "session_id",
          "recorded_at"
        ],
        "additionalProperties": false,
        "description": "Action log stored in action_logs. Records a status observation and optional comment. Action detail shows Comments, a filtered view rather than the complete status history; status and timestamps are immutable, and only the comment may be cleared."
      }
    },
    "next_cursor": {
      "anyOf": [
        {
          "type": "string",
          "minLength": 1
        },
        {
          "type": "null"
        }
      ]
    },
    "action_id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
    },
    "window": {
      "type": "object",
      "properties": {
        "since": {
          "type": "string",
          "format": "date-time",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
        },
        "until": {
          "type": "string",
          "format": "date-time",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
        }
      },
      "required": [
        "since",
        "until"
      ],
      "additionalProperties": false
    }
  },
  "required": [
    "items",
    "next_cursor",
    "action_id",
    "window"
  ],
  "additionalProperties": false
}
Public MCP input/output shapes for comparison
[
  {
    "tool": "action_read",
    "collection": "actions",
    "specification": "docs/feature-specs/F5-actions.md#mcp-source-mapping--selected-target",
    "operation": "history",
    "binding": "planned",
    "mode": "adapted",
    "readiness": "contract-only",
    "services": [
      "actions.history"
    ],
    "gap": null,
    "projection": "Project record.action and changed on writes; list uses resolved cycle_id and original filters; history preserves its resolved window.",
    "input": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "oneOf": [
        {
          "type": "object",
          "properties": {
            "cursor": {
              "type": "string",
              "minLength": 1
            },
            "limit": {
              "default": 20,
              "type": "integer",
              "minimum": 1,
              "maximum": 100
            },
            "cycle_id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "objective_id": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                {
                  "type": "null"
                }
              ]
            },
            "status": {
              "type": "string",
              "enum": [
                "open",
                "in_progress",
                "done"
              ],
              "description": "Action status: Open, In progress or Done. The To do UI group includes Open and In progress; Overdue is derived, not a status."
            },
            "due_before": {
              "type": "string",
              "format": "date",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
              "description": "Calendar date as YYYY-MM-DD in the profile timezone."
            },
            "outstanding": {
              "description": "Only open or in_progress actions; exclude done across every page.",
              "type": "boolean",
              "const": true
            },
            "session_id": {
              "description": "Filter actions created in this owned session; combine with cycle_id to select its cycle explicitly.",
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
            },
            "overdue": {
              "description": "Only non-done actions before due_before; requires an explicit local cutoff date for stable briefing pagination.",
              "type": "boolean",
              "const": true
            },
            "operation": {
              "type": "string",
              "const": "list"
            }
          },
          "required": [
            "operation"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "operation": {
              "type": "string",
              "const": "get"
            }
          },
          "required": [
            "id",
            "operation"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "cursor": {
              "type": "string",
              "minLength": 1
            },
            "limit": {
              "default": 20,
              "type": "integer",
              "minimum": 1,
              "maximum": 100
            },
            "action_id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "operation": {
              "type": "string",
              "const": "history"
            },
            "window": {
              "type": "object",
              "properties": {
                "since": {
                  "description": "Inclusive lower bound. Default: last completed session, falling back to active-cycle start. Date-only values use the profile timezone.",
                  "anyOf": [
                    {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "date",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                          "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                        },
                        {
                          "type": "string",
                          "format": "date-time",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                        }
                      ]
                    },
                    {
                      "type": "string",
                      "enum": [
                        "last_session",
                        "cycle_start"
                      ]
                    }
                  ]
                },
                "until": {
                  "description": "Exclusive upper bound; default is the server time captured on the first page.",
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                      "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                    },
                    {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    }
                  ]
                }
              },
              "additionalProperties": false
            }
          },
          "required": [
            "action_id",
            "operation"
          ],
          "additionalProperties": false
        }
      ]
    },
    "output": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "items": {
              "maxItems": 100,
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "cycle_id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "objective_id": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "title": {
                    "type": "string"
                  },
                  "description": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "due_at": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                        "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "UI label: Due. May be unset on a web draft; a set date cannot be cleared."
                  },
                  "status": {
                    "type": "string",
                    "enum": [
                      "open",
                      "in_progress",
                      "done"
                    ],
                    "description": "Action status: Open, In progress or Done. The To do UI group includes Open and In progress; Overdue is derived, not a status."
                  },
                  "sort_order": {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "Drag order within an action group; not a progress status."
                  },
                  "session_id": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "created_at": {
                    "type": "string",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                  },
                  "url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "overdue": {
                    "type": "boolean"
                  },
                  "done_since_boundary": {
                    "type": "boolean"
                  }
                },
                "required": [
                  "id",
                  "cycle_id",
                  "objective_id",
                  "title",
                  "description",
                  "due_at",
                  "status",
                  "sort_order",
                  "session_id",
                  "created_at",
                  "url",
                  "overdue",
                  "done_since_boundary"
                ],
                "additionalProperties": false
              }
            },
            "next_cursor": {
              "anyOf": [
                {
                  "type": "string",
                  "minLength": 1
                },
                {
                  "type": "null"
                }
              ]
            },
            "continuation": {
              "anyOf": [
                {
                  "type": "object",
                  "properties": {
                    "tool": {
                      "type": "string",
                      "const": "action_read"
                    },
                    "arguments": {
                      "type": "object",
                      "properties": {
                        "cursor": {
                          "type": "string",
                          "minLength": 1
                        },
                        "limit": {
                          "type": "integer",
                          "minimum": 1,
                          "maximum": 100
                        },
                        "cycle_id": {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                        },
                        "objective_id": {
                          "anyOf": [
                            {
                              "type": "string",
                              "format": "uuid",
                              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "status": {
                          "type": "string",
                          "enum": [
                            "open",
                            "in_progress",
                            "done"
                          ],
                          "description": "Action status: Open, In progress or Done. The To do UI group includes Open and In progress; Overdue is derived, not a status."
                        },
                        "due_before": {
                          "type": "string",
                          "format": "date",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                          "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                        },
                        "outstanding": {
                          "description": "Only open or in_progress actions; exclude done across every page.",
                          "type": "boolean",
                          "const": true
                        },
                        "session_id": {
                          "description": "Filter actions created in this owned session; combine with cycle_id to select its cycle explicitly.",
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                        },
                        "overdue": {
                          "description": "Only non-done actions before due_before; requires an explicit local cutoff date for stable briefing pagination.",
                          "type": "boolean",
                          "const": true
                        },
                        "operation": {
                          "type": "string",
                          "const": "list"
                        }
                      },
                      "required": [
                        "cursor",
                        "limit",
                        "cycle_id",
                        "operation"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "required": [
                    "tool",
                    "arguments"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "null"
                }
              ]
            },
            "operation": {
              "type": "string",
              "const": "list"
            }
          },
          "required": [
            "items",
            "next_cursor",
            "continuation",
            "operation"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "operation": {
              "type": "string",
              "const": "get"
            },
            "action": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "cycle_id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "objective_id": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "title": {
                  "type": "string"
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "due_at": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                      "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "UI label: Due. May be unset on a web draft; a set date cannot be cleared."
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "open",
                    "in_progress",
                    "done"
                  ],
                  "description": "Action status: Open, In progress or Done. The To do UI group includes Open and In progress; Overdue is derived, not a status."
                },
                "sort_order": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "Drag order within an action group; not a progress status."
                },
                "session_id": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "created_at": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                },
                "overdue": {
                  "type": "boolean"
                },
                "done_since_boundary": {
                  "type": "boolean"
                }
              },
              "required": [
                "id",
                "cycle_id",
                "objective_id",
                "title",
                "description",
                "due_at",
                "status",
                "sort_order",
                "session_id",
                "created_at",
                "url",
                "overdue",
                "done_since_boundary"
              ],
              "additionalProperties": false
            }
          },
          "required": [
            "operation",
            "action"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "items": {
              "maxItems": 100,
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "action_id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "status": {
                    "type": "string",
                    "enum": [
                      "open",
                      "in_progress",
                      "done"
                    ],
                    "description": "Action status: Open, In progress or Done. The To do UI group includes Open and In progress; Overdue is derived, not a status."
                  },
                  "comment": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "session_id": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "recorded_at": {
                    "type": "string",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                  }
                },
                "required": [
                  "id",
                  "action_id",
                  "status",
                  "comment",
                  "session_id",
                  "recorded_at"
                ],
                "additionalProperties": false,
                "description": "Action log stored in action_logs. Records a status observation and optional comment. Action detail shows Comments, a filtered view rather than the complete status history; status and timestamps are immutable, and only the comment may be cleared."
              }
            },
            "next_cursor": {
              "anyOf": [
                {
                  "type": "string",
                  "minLength": 1
                },
                {
                  "type": "null"
                }
              ]
            },
            "continuation": {
              "anyOf": [
                {
                  "type": "object",
                  "properties": {
                    "tool": {
                      "type": "string",
                      "const": "action_read"
                    },
                    "arguments": {
                      "type": "object",
                      "properties": {
                        "cursor": {
                          "type": "string",
                          "minLength": 1
                        },
                        "limit": {
                          "type": "integer",
                          "minimum": 1,
                          "maximum": 100
                        },
                        "action_id": {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                        },
                        "operation": {
                          "type": "string",
                          "const": "history"
                        },
                        "window": {
                          "type": "object",
                          "properties": {
                            "since": {
                              "type": "string",
                              "format": "date-time",
                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                            },
                            "until": {
                              "type": "string",
                              "format": "date-time",
                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                            }
                          },
                          "required": [
                            "since",
                            "until"
                          ],
                          "additionalProperties": false
                        }
                      },
                      "required": [
                        "cursor",
                        "limit",
                        "action_id",
                        "operation",
                        "window"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "required": [
                    "tool",
                    "arguments"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "null"
                }
              ]
            },
            "operation": {
              "type": "string",
              "const": "history"
            },
            "action_id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "window": {
              "type": "object",
              "properties": {
                "since": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "until": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                }
              },
              "required": [
                "since",
                "until"
              ],
              "additionalProperties": false
            }
          },
          "required": [
            "items",
            "next_cursor",
            "continuation",
            "operation",
            "action_id",
            "window"
          ],
          "additionalProperties": false
        }
      ]
    }
  }
]
actions.preview_deletion · write · contract-only

Feature declaration: previewActionDeletion

Requirement: docs/feature-specs/F5-actions.md · Access: entitled-write

Tables: actions (read), action_logs (read)

Trusted context: authenticated actor

Retry: Preview does not authorize deletion. Commit rechecks actor, target, impact, expiry and application approval; incomplete impact fails closed.

Expected errors: UNAUTHORIZED, BAD_REQUEST, FORBIDDEN, NOT_FOUND, CONFLICT, NOT_IMPLEMENTED, INTERNAL_SERVER_ERROR

API consumers

[
  {
    "operation": "actions.preview_deletion",
    "service": "actions.preview_deletion",
    "binding": "bound"
  }
]

MCP consumers

[
  {
    "tool": "action_delete",
    "collection": "actions",
    "specification": "docs/feature-specs/F5-actions.md#mcp-source-mapping--selected-target",
    "operation": "preview",
    "binding": "planned",
    "mode": "adapted",
    "readiness": "contract-only",
    "services": [
      "actions.preview_deletion"
    ],
    "gap": null,
    "projection": "Project record.action and changed on writes; list uses resolved cycle_id and original filters; history preserves its resolved window."
  }
]

Service input

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}

Service output

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "operation": {
      "type": "string",
      "const": "preview"
    },
    "preview_id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
    },
    "expires_at": {
      "type": "string",
      "format": "date-time",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
    },
    "target": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
        },
        "title": {
          "type": "string"
        }
      },
      "required": [
        "id",
        "title"
      ],
      "additionalProperties": false
    },
    "deleted": {
      "type": "object",
      "properties": {
        "actions": {
          "type": "number",
          "const": 1
        },
        "action_logs": {
          "type": "integer",
          "minimum": 0,
          "maximum": 9007199254740991
        }
      },
      "required": [
        "actions",
        "action_logs"
      ],
      "additionalProperties": false
    },
    "approval": {
      "type": "object",
      "properties": {
        "status": {
          "type": "string",
          "const": "required"
        },
        "url": {
          "type": "string",
          "format": "uri"
        }
      },
      "required": [
        "status",
        "url"
      ],
      "additionalProperties": false
    }
  },
  "required": [
    "operation",
    "preview_id",
    "expires_at",
    "target",
    "deleted",
    "approval"
  ],
  "additionalProperties": false
}
Public MCP input/output shapes for comparison
[
  {
    "tool": "action_delete",
    "collection": "actions",
    "specification": "docs/feature-specs/F5-actions.md#mcp-source-mapping--selected-target",
    "operation": "preview",
    "binding": "planned",
    "mode": "adapted",
    "readiness": "contract-only",
    "services": [
      "actions.preview_deletion"
    ],
    "gap": null,
    "projection": "Project record.action and changed on writes; list uses resolved cycle_id and original filters; history preserves its resolved window.",
    "input": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "oneOf": [
        {
          "type": "object",
          "properties": {
            "operation": {
              "type": "string",
              "const": "preview"
            },
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Exact owned record UUID. Resolve ambiguous targets before requesting impact."
            }
          },
          "required": [
            "operation",
            "id"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "operation": {
              "type": "string",
              "const": "commit"
            },
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "preview_id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Server preview ID for this target. Not consent: genuine approval must already be recorded by the trusted application."
            }
          },
          "required": [
            "operation",
            "id",
            "preview_id"
          ],
          "additionalProperties": false
        }
      ]
    },
    "output": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "oneOf": [
        {
          "type": "object",
          "properties": {
            "operation": {
              "type": "string",
              "const": "preview"
            },
            "preview_id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "expires_at": {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
            },
            "target": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "title": {
                  "type": "string"
                }
              },
              "required": [
                "id",
                "title"
              ],
              "additionalProperties": false
            },
            "deleted": {
              "type": "object",
              "properties": {
                "actions": {
                  "type": "number",
                  "const": 1
                },
                "action_logs": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                }
              },
              "required": [
                "actions",
                "action_logs"
              ],
              "additionalProperties": false
            },
            "approval": {
              "type": "object",
              "properties": {
                "status": {
                  "type": "string",
                  "const": "required"
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                }
              },
              "required": [
                "status",
                "url"
              ],
              "additionalProperties": false
            }
          },
          "required": [
            "operation",
            "preview_id",
            "expires_at",
            "target",
            "deleted",
            "approval"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "operation": {
              "type": "string",
              "const": "commit"
            },
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            }
          },
          "required": [
            "operation",
            "id"
          ],
          "additionalProperties": false
        }
      ]
    }
  }
]
actions.create · write · contract-only

Feature declaration: createAction

Requirement: docs/feature-specs/F5-actions.md · Access: entitled-write

Tables: actions (write), cycles (read), objectives (read), sessions (read), action_logs (read), idempotency_keys (write)

Trusted context: authenticated actor

Retry: API requires client-key replay; unkeyed MCP calls must inspect state after an uncertain outcome.

Expected errors: UNAUTHORIZED, BAD_REQUEST, FORBIDDEN, NOT_FOUND, CONFLICT, NOT_IMPLEMENTED, INTERNAL_SERVER_ERROR

API consumers

[
  {
    "operation": "actions.create",
    "service": "actions.create",
    "binding": "bound"
  }
]

MCP consumers

[
  {
    "tool": "action_write",
    "collection": "actions",
    "specification": "docs/feature-specs/F5-actions.md#mcp-source-mapping--selected-target",
    "operation": "create",
    "binding": "planned",
    "mode": "adapted",
    "readiness": "contract-only",
    "services": [
      "actions.create"
    ],
    "gap": null,
    "projection": "Project record.action and changed on writes; list uses resolved cycle_id and original filters; history preserves its resolved window."
  }
]

Service input

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "anyOf": [
    {
      "type": "object",
      "properties": {
        "title": {
          "type": "string"
        },
        "due_at": {
          "anyOf": [
            {
              "type": "string",
              "format": "date",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
              "description": "Calendar date as YYYY-MM-DD in the profile timezone."
            },
            {
              "type": "null"
            }
          ]
        },
        "objective_id": {
          "anyOf": [
            {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            {
              "type": "null"
            }
          ]
        },
        "description": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ]
        },
        "idempotency_key": {
          "type": "string",
          "minLength": 1,
          "maxLength": 255
        }
      },
      "required": [
        "title",
        "due_at",
        "idempotency_key"
      ],
      "additionalProperties": false
    },
    {
      "type": "object",
      "properties": {
        "title": {
          "type": "string"
        },
        "due_at": {
          "anyOf": [
            {
              "type": "string",
              "format": "date",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
              "description": "Calendar date as YYYY-MM-DD in the profile timezone."
            },
            {
              "type": "null"
            }
          ]
        },
        "objective_id": {
          "anyOf": [
            {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            {
              "type": "null"
            }
          ]
        },
        "description": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "required": [
        "title",
        "due_at"
      ],
      "additionalProperties": false
    }
  ]
}

Service output

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "record": {
      "type": "object",
      "properties": {
        "action": {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "cycle_id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "objective_id": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                {
                  "type": "null"
                }
              ]
            },
            "title": {
              "type": "string"
            },
            "description": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ]
            },
            "due_at": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                  "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                },
                {
                  "type": "null"
                }
              ],
              "description": "UI label: Due. May be unset on a web draft; a set date cannot be cleared."
            },
            "status": {
              "type": "string",
              "enum": [
                "open",
                "in_progress",
                "done"
              ],
              "description": "Action status: Open, In progress or Done. The To do UI group includes Open and In progress; Overdue is derived, not a status."
            },
            "sort_order": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Drag order within an action group; not a progress status."
            },
            "session_id": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                {
                  "type": "null"
                }
              ]
            },
            "created_at": {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
            },
            "url": {
              "type": "string",
              "format": "uri"
            },
            "overdue": {
              "type": "boolean"
            },
            "done_since_boundary": {
              "type": "boolean"
            }
          },
          "required": [
            "id",
            "cycle_id",
            "objective_id",
            "title",
            "description",
            "due_at",
            "status",
            "sort_order",
            "session_id",
            "created_at",
            "url",
            "overdue",
            "done_since_boundary"
          ],
          "additionalProperties": false
        },
        "cycle": {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "intention": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "UI label: Intention. Optional guiding focus; the cycle is identified by its date range, not a name."
            },
            "start_at": {
              "type": "string",
              "format": "date",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
              "description": "UI label: Starts."
            },
            "end_at": {
              "type": "string",
              "format": "date",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
              "description": "UI label: Ends."
            },
            "status": {
              "type": "string",
              "enum": [
                "active",
                "archived"
              ]
            },
            "created_at": {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
            },
            "url": {
              "type": "string",
              "format": "uri"
            },
            "achievement_pct": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "null"
                }
              ],
              "description": "UI label: Achievement. Derived from objective progress; unavailable when nothing is measurable."
            },
            "time_gone_pct": {
              "type": "number",
              "minimum": 0,
              "maximum": 100,
              "description": "UI label: Time gone. Derived percentage of the cycle elapsed."
            },
            "length_weeks": {
              "type": "integer",
              "minimum": -9007199254740991,
              "maximum": 9007199254740991,
              "description": "UI label: Length, in weeks; derived from Starts and Ends."
            }
          },
          "required": [
            "id",
            "intention",
            "start_at",
            "end_at",
            "status",
            "created_at",
            "url",
            "achievement_pct",
            "time_gone_pct",
            "length_weeks"
          ],
          "additionalProperties": false
        },
        "objective": {
          "anyOf": [
            {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "cycle_id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "title": {
                  "type": "string"
                },
                "description": {
                  "type": "string"
                },
                "deadline_at": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                      "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "UI label: Deadline; null when no deadline has been set."
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "on_track",
                    "off_track",
                    "completed"
                  ],
                  "description": "Objective status: On track, Off track or Completed. Coaching judgment, independent of the derived Progress percentage."
                },
                "created_at": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "short_code": {
                  "type": "string",
                  "minLength": 1
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                },
                "progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "UI label: Progress. Derived from measurable results, independently of Status."
                },
                "boundary_progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "Historical progress at the resolved last-session boundary; not current Progress."
                },
                "movement_pp": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "id",
                "cycle_id",
                "title",
                "description",
                "deadline_at",
                "status",
                "created_at",
                "short_code",
                "url",
                "progress_pct",
                "boundary_progress_pct",
                "movement_pp"
              ],
              "additionalProperties": false
            },
            {
              "type": "null"
            }
          ]
        },
        "source_session": {
          "anyOf": [
            {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "vendor": {
                  "type": "string",
                  "enum": [
                    "claude",
                    "openai"
                  ],
                  "description": "Conversation host: claude is shown as Claude; openai is shown as ChatGPT."
                },
                "source_url": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "uri"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "External conversation link used by Open the conversation. Not the app detail URL."
                },
                "type": {
                  "anyOf": [
                    {
                      "type": "string",
                      "enum": [
                        "goal_setup",
                        "check_in",
                        "review",
                        "open_coaching"
                      ],
                      "description": "Coaching session type: Goal setup, Check-in, Review or Open coaching. Separate from whether the session is still open."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "briefing_notes": {
                  "type": "string",
                  "description": "UI document: Briefing. Server-prepared coaching context."
                },
                "headline": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "One-line coaching-session summary used in session lists."
                },
                "summary_notes": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "UI document: Summary. Saved when the coaching session closes."
                },
                "started_at": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "ended_at": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "Closed when set; In progress when null. This is derived session state, not a stored status enum."
                },
                "url": {
                  "type": "string",
                  "format": "uri",
                  "description": "Internal app link to coaching session details; distinct from source_url."
                },
                "duration_minutes": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "actions_created": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "actions_reviewed": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                }
              },
              "required": [
                "id",
                "vendor",
                "source_url",
                "type",
                "briefing_notes",
                "headline",
                "summary_notes",
                "started_at",
                "ended_at",
                "url",
                "duration_minutes",
                "actions_created",
                "actions_reviewed"
              ],
              "additionalProperties": false
            },
            {
              "type": "null"
            }
          ]
        },
        "action_logs": {
          "type": "object",
          "properties": {
            "items": {
              "maxItems": 100,
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "action_id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "status": {
                    "type": "string",
                    "enum": [
                      "open",
                      "in_progress",
                      "done"
                    ],
                    "description": "Action status: Open, In progress or Done. The To do UI group includes Open and In progress; Overdue is derived, not a status."
                  },
                  "comment": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "session_id": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "recorded_at": {
                    "type": "string",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                  }
                },
                "required": [
                  "id",
                  "action_id",
                  "status",
                  "comment",
                  "session_id",
                  "recorded_at"
                ],
                "additionalProperties": false,
                "description": "Action log stored in action_logs. Records a status observation and optional comment. Action detail shows Comments, a filtered view rather than the complete status history; status and timestamps are immutable, and only the comment may be cleared."
              }
            },
            "next_cursor": {
              "anyOf": [
                {
                  "type": "string",
                  "minLength": 1
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "items",
            "next_cursor"
          ],
          "additionalProperties": false
        },
        "continuations": {
          "type": "object",
          "propertyNames": {
            "type": "string",
            "enum": [
              "cycles",
              "objectives",
              "results",
              "actions",
              "notes",
              "sessions",
              "result_logs",
              "habit_logs",
              "action_logs",
              "trend"
            ]
          },
          "additionalProperties": {
            "type": "string",
            "minLength": 1
          }
        }
      },
      "required": [
        "action",
        "cycle",
        "objective",
        "source_session",
        "action_logs",
        "continuations"
      ],
      "additionalProperties": false
    },
    "changed": {
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "entity": {
            "type": "string",
            "enum": [
              "user",
              "cycle",
              "objective",
              "result",
              "result_log",
              "action",
              "action_log",
              "session",
              "note",
              "habit_log"
            ]
          },
          "id": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
            "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
          }
        },
        "required": [
          "entity",
          "id"
        ],
        "additionalProperties": false
      }
    },
    "continuations": {
      "type": "object",
      "propertyNames": {
        "type": "string",
        "enum": [
          "cycles",
          "objectives",
          "results",
          "actions",
          "notes",
          "sessions",
          "result_logs",
          "habit_logs",
          "action_logs",
          "trend"
        ]
      },
      "additionalProperties": {
        "type": "string",
        "minLength": 1
      }
    }
  },
  "required": [
    "record",
    "changed",
    "continuations"
  ],
  "additionalProperties": false
}
Public MCP input/output shapes for comparison
[
  {
    "tool": "action_write",
    "collection": "actions",
    "specification": "docs/feature-specs/F5-actions.md#mcp-source-mapping--selected-target",
    "operation": "create",
    "binding": "planned",
    "mode": "adapted",
    "readiness": "contract-only",
    "services": [
      "actions.create"
    ],
    "gap": null,
    "projection": "Project record.action and changed on writes; list uses resolved cycle_id and original filters; history preserves its resolved window.",
    "input": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "oneOf": [
        {
          "type": "object",
          "properties": {
            "title": {
              "type": "string",
              "minLength": 1
            },
            "due_at": {
              "type": "string",
              "format": "date",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
              "description": "Calendar date as YYYY-MM-DD in the profile timezone."
            },
            "objective_id": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                {
                  "type": "null"
                }
              ]
            },
            "description": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ]
            },
            "operation": {
              "type": "string",
              "const": "create"
            }
          },
          "required": [
            "title",
            "due_at",
            "operation"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "title": {
              "type": "string",
              "minLength": 1
            },
            "description": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ]
            },
            "due_at": {
              "description": "New due date. Omit to preserve; a previously set date cannot be cleared.",
              "type": "string",
              "format": "date",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
            },
            "objective_id": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                {
                  "type": "null"
                }
              ]
            },
            "session_id": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                {
                  "type": "null"
                }
              ]
            },
            "operation": {
              "type": "string",
              "const": "update"
            }
          },
          "required": [
            "id",
            "operation"
          ],
          "additionalProperties": false
        }
      ]
    },
    "output": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "action": {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "cycle_id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "objective_id": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                {
                  "type": "null"
                }
              ]
            },
            "title": {
              "type": "string"
            },
            "description": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ]
            },
            "due_at": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                  "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                },
                {
                  "type": "null"
                }
              ],
              "description": "UI label: Due. May be unset on a web draft; a set date cannot be cleared."
            },
            "status": {
              "type": "string",
              "enum": [
                "open",
                "in_progress",
                "done"
              ],
              "description": "Action status: Open, In progress or Done. The To do UI group includes Open and In progress; Overdue is derived, not a status."
            },
            "sort_order": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Drag order within an action group; not a progress status."
            },
            "session_id": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                {
                  "type": "null"
                }
              ]
            },
            "created_at": {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
            },
            "url": {
              "type": "string",
              "format": "uri"
            },
            "overdue": {
              "type": "boolean"
            },
            "done_since_boundary": {
              "type": "boolean"
            }
          },
          "required": [
            "id",
            "cycle_id",
            "objective_id",
            "title",
            "description",
            "due_at",
            "status",
            "sort_order",
            "session_id",
            "created_at",
            "url",
            "overdue",
            "done_since_boundary"
          ],
          "additionalProperties": false
        },
        "changed": {
          "maxItems": 100,
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "entity": {
                "type": "string",
                "enum": [
                  "user",
                  "cycle",
                  "objective",
                  "result",
                  "result_log",
                  "action",
                  "action_log",
                  "session",
                  "note",
                  "habit_log"
                ]
              },
              "id": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
              }
            },
            "required": [
              "entity",
              "id"
            ],
            "additionalProperties": false
          }
        }
      },
      "required": [
        "action",
        "changed"
      ],
      "additionalProperties": false
    }
  }
]
actions.list · read · contract-only

Feature declaration: listActions

Requirement: docs/feature-specs/F5-actions.md · Access: retained-read

Tables: actions (read)

Trusted context: authenticated actor

Retry: Safe to retry with the same resolved filters and cursor.

Expected errors: UNAUTHORIZED, BAD_REQUEST, FORBIDDEN, NOT_FOUND, CONFLICT, NOT_IMPLEMENTED, INTERNAL_SERVER_ERROR

API consumers

[
  {
    "operation": "actions.list",
    "service": "actions.list",
    "binding": "bound"
  }
]

MCP consumers

[
  {
    "tool": "action_read",
    "collection": "actions",
    "specification": "docs/feature-specs/F5-actions.md#mcp-source-mapping--selected-target",
    "operation": "list",
    "binding": "planned",
    "mode": "adapted",
    "readiness": "contract-only",
    "services": [
      "actions.list"
    ],
    "gap": null,
    "projection": "Project record.action and changed on writes; list uses resolved cycle_id and original filters; history preserves its resolved window."
  }
]

Service input

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "cursor": {
      "type": "string",
      "minLength": 1
    },
    "limit": {
      "default": 20,
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "cycle_id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
    },
    "objective_id": {
      "anyOf": [
        {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
        },
        {
          "type": "null"
        }
      ]
    },
    "status": {
      "type": "string",
      "enum": [
        "open",
        "in_progress",
        "done"
      ],
      "description": "Action status: Open, In progress or Done. The To do UI group includes Open and In progress; Overdue is derived, not a status."
    },
    "due_before": {
      "type": "string",
      "format": "date",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      "description": "Calendar date as YYYY-MM-DD in the profile timezone."
    },
    "outstanding": {
      "description": "Only open or in_progress actions; exclude done across every page.",
      "type": "boolean",
      "const": true
    },
    "session_id": {
      "description": "Filter actions created in this owned session; combine with cycle_id to select its cycle explicitly.",
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "overdue": {
      "description": "Only non-done actions before due_before; requires an explicit local cutoff date for stable briefing pagination.",
      "type": "boolean",
      "const": true
    }
  },
  "additionalProperties": false
}

Service output

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "items": {
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
            "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
          },
          "cycle_id": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
            "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
          },
          "objective_id": {
            "anyOf": [
              {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
              },
              {
                "type": "null"
              }
            ]
          },
          "title": {
            "type": "string"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "due_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                "description": "Calendar date as YYYY-MM-DD in the profile timezone."
              },
              {
                "type": "null"
              }
            ],
            "description": "UI label: Due. May be unset on a web draft; a set date cannot be cleared."
          },
          "status": {
            "type": "string",
            "enum": [
              "open",
              "in_progress",
              "done"
            ],
            "description": "Action status: Open, In progress or Done. The To do UI group includes Open and In progress; Overdue is derived, not a status."
          },
          "sort_order": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "description": "Drag order within an action group; not a progress status."
          },
          "session_id": {
            "anyOf": [
              {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
              },
              {
                "type": "null"
              }
            ]
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "overdue": {
            "type": "boolean"
          },
          "done_since_boundary": {
            "type": "boolean"
          }
        },
        "required": [
          "id",
          "cycle_id",
          "objective_id",
          "title",
          "description",
          "due_at",
          "status",
          "sort_order",
          "session_id",
          "created_at",
          "url",
          "overdue",
          "done_since_boundary"
        ],
        "additionalProperties": false
      }
    },
    "next_cursor": {
      "anyOf": [
        {
          "type": "string",
          "minLength": 1
        },
        {
          "type": "null"
        }
      ]
    },
    "cycle_id": {
      "anyOf": [
        {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
        },
        {
          "type": "null"
        }
      ]
    }
  },
  "required": [
    "items",
    "next_cursor",
    "cycle_id"
  ],
  "additionalProperties": false
}
Public MCP input/output shapes for comparison
[
  {
    "tool": "action_read",
    "collection": "actions",
    "specification": "docs/feature-specs/F5-actions.md#mcp-source-mapping--selected-target",
    "operation": "list",
    "binding": "planned",
    "mode": "adapted",
    "readiness": "contract-only",
    "services": [
      "actions.list"
    ],
    "gap": null,
    "projection": "Project record.action and changed on writes; list uses resolved cycle_id and original filters; history preserves its resolved window.",
    "input": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "oneOf": [
        {
          "type": "object",
          "properties": {
            "cursor": {
              "type": "string",
              "minLength": 1
            },
            "limit": {
              "default": 20,
              "type": "integer",
              "minimum": 1,
              "maximum": 100
            },
            "cycle_id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "objective_id": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                {
                  "type": "null"
                }
              ]
            },
            "status": {
              "type": "string",
              "enum": [
                "open",
                "in_progress",
                "done"
              ],
              "description": "Action status: Open, In progress or Done. The To do UI group includes Open and In progress; Overdue is derived, not a status."
            },
            "due_before": {
              "type": "string",
              "format": "date",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
              "description": "Calendar date as YYYY-MM-DD in the profile timezone."
            },
            "outstanding": {
              "description": "Only open or in_progress actions; exclude done across every page.",
              "type": "boolean",
              "const": true
            },
            "session_id": {
              "description": "Filter actions created in this owned session; combine with cycle_id to select its cycle explicitly.",
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
            },
            "overdue": {
              "description": "Only non-done actions before due_before; requires an explicit local cutoff date for stable briefing pagination.",
              "type": "boolean",
              "const": true
            },
            "operation": {
              "type": "string",
              "const": "list"
            }
          },
          "required": [
            "operation"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "operation": {
              "type": "string",
              "const": "get"
            }
          },
          "required": [
            "id",
            "operation"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "cursor": {
              "type": "string",
              "minLength": 1
            },
            "limit": {
              "default": 20,
              "type": "integer",
              "minimum": 1,
              "maximum": 100
            },
            "action_id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "operation": {
              "type": "string",
              "const": "history"
            },
            "window": {
              "type": "object",
              "properties": {
                "since": {
                  "description": "Inclusive lower bound. Default: last completed session, falling back to active-cycle start. Date-only values use the profile timezone.",
                  "anyOf": [
                    {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "date",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                          "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                        },
                        {
                          "type": "string",
                          "format": "date-time",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                        }
                      ]
                    },
                    {
                      "type": "string",
                      "enum": [
                        "last_session",
                        "cycle_start"
                      ]
                    }
                  ]
                },
                "until": {
                  "description": "Exclusive upper bound; default is the server time captured on the first page.",
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                      "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                    },
                    {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    }
                  ]
                }
              },
              "additionalProperties": false
            }
          },
          "required": [
            "action_id",
            "operation"
          ],
          "additionalProperties": false
        }
      ]
    },
    "output": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "items": {
              "maxItems": 100,
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "cycle_id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "objective_id": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "title": {
                    "type": "string"
                  },
                  "description": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "due_at": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                        "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "UI label: Due. May be unset on a web draft; a set date cannot be cleared."
                  },
                  "status": {
                    "type": "string",
                    "enum": [
                      "open",
                      "in_progress",
                      "done"
                    ],
                    "description": "Action status: Open, In progress or Done. The To do UI group includes Open and In progress; Overdue is derived, not a status."
                  },
                  "sort_order": {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "Drag order within an action group; not a progress status."
                  },
                  "session_id": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "created_at": {
                    "type": "string",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                  },
                  "url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "overdue": {
                    "type": "boolean"
                  },
                  "done_since_boundary": {
                    "type": "boolean"
                  }
                },
                "required": [
                  "id",
                  "cycle_id",
                  "objective_id",
                  "title",
                  "description",
                  "due_at",
                  "status",
                  "sort_order",
                  "session_id",
                  "created_at",
                  "url",
                  "overdue",
                  "done_since_boundary"
                ],
                "additionalProperties": false
              }
            },
            "next_cursor": {
              "anyOf": [
                {
                  "type": "string",
                  "minLength": 1
                },
                {
                  "type": "null"
                }
              ]
            },
            "continuation": {
              "anyOf": [
                {
                  "type": "object",
                  "properties": {
                    "tool": {
                      "type": "string",
                      "const": "action_read"
                    },
                    "arguments": {
                      "type": "object",
                      "properties": {
                        "cursor": {
                          "type": "string",
                          "minLength": 1
                        },
                        "limit": {
                          "type": "integer",
                          "minimum": 1,
                          "maximum": 100
                        },
                        "cycle_id": {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                        },
                        "objective_id": {
                          "anyOf": [
                            {
                              "type": "string",
                              "format": "uuid",
                              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "status": {
                          "type": "string",
                          "enum": [
                            "open",
                            "in_progress",
                            "done"
                          ],
                          "description": "Action status: Open, In progress or Done. The To do UI group includes Open and In progress; Overdue is derived, not a status."
                        },
                        "due_before": {
                          "type": "string",
                          "format": "date",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                          "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                        },
                        "outstanding": {
                          "description": "Only open or in_progress actions; exclude done across every page.",
                          "type": "boolean",
                          "const": true
                        },
                        "session_id": {
                          "description": "Filter actions created in this owned session; combine with cycle_id to select its cycle explicitly.",
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                        },
                        "overdue": {
                          "description": "Only non-done actions before due_before; requires an explicit local cutoff date for stable briefing pagination.",
                          "type": "boolean",
                          "const": true
                        },
                        "operation": {
                          "type": "string",
                          "const": "list"
                        }
                      },
                      "required": [
                        "cursor",
                        "limit",
                        "cycle_id",
                        "operation"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "required": [
                    "tool",
                    "arguments"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "null"
                }
              ]
            },
            "operation": {
              "type": "string",
              "const": "list"
            }
          },
          "required": [
            "items",
            "next_cursor",
            "continuation",
            "operation"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "operation": {
              "type": "string",
              "const": "get"
            },
            "action": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "cycle_id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "objective_id": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "title": {
                  "type": "string"
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "due_at": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                      "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "UI label: Due. May be unset on a web draft; a set date cannot be cleared."
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "open",
                    "in_progress",
                    "done"
                  ],
                  "description": "Action status: Open, In progress or Done. The To do UI group includes Open and In progress; Overdue is derived, not a status."
                },
                "sort_order": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "Drag order within an action group; not a progress status."
                },
                "session_id": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "created_at": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                },
                "overdue": {
                  "type": "boolean"
                },
                "done_since_boundary": {
                  "type": "boolean"
                }
              },
              "required": [
                "id",
                "cycle_id",
                "objective_id",
                "title",
                "description",
                "due_at",
                "status",
                "sort_order",
                "session_id",
                "created_at",
                "url",
                "overdue",
                "done_since_boundary"
              ],
              "additionalProperties": false
            }
          },
          "required": [
            "operation",
            "action"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "items": {
              "maxItems": 100,
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "action_id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "status": {
                    "type": "string",
                    "enum": [
                      "open",
                      "in_progress",
                      "done"
                    ],
                    "description": "Action status: Open, In progress or Done. The To do UI group includes Open and In progress; Overdue is derived, not a status."
                  },
                  "comment": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "session_id": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "recorded_at": {
                    "type": "string",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                  }
                },
                "required": [
                  "id",
                  "action_id",
                  "status",
                  "comment",
                  "session_id",
                  "recorded_at"
                ],
                "additionalProperties": false,
                "description": "Action log stored in action_logs. Records a status observation and optional comment. Action detail shows Comments, a filtered view rather than the complete status history; status and timestamps are immutable, and only the comment may be cleared."
              }
            },
            "next_cursor": {
              "anyOf": [
                {
                  "type": "string",
                  "minLength": 1
                },
                {
                  "type": "null"
                }
              ]
            },
            "continuation": {
              "anyOf": [
                {
                  "type": "object",
                  "properties": {
                    "tool": {
                      "type": "string",
                      "const": "action_read"
                    },
                    "arguments": {
                      "type": "object",
                      "properties": {
                        "cursor": {
                          "type": "string",
                          "minLength": 1
                        },
                        "limit": {
                          "type": "integer",
                          "minimum": 1,
                          "maximum": 100
                        },
                        "action_id": {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                        },
                        "operation": {
                          "type": "string",
                          "const": "history"
                        },
                        "window": {
                          "type": "object",
                          "properties": {
                            "since": {
                              "type": "string",
                              "format": "date-time",
                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                            },
                            "until": {
                              "type": "string",
                              "format": "date-time",
                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                            }
                          },
                          "required": [
                            "since",
                            "until"
                          ],
                          "additionalProperties": false
                        }
                      },
                      "required": [
                        "cursor",
                        "limit",
                        "action_id",
                        "operation",
                        "window"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "required": [
                    "tool",
                    "arguments"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "null"
                }
              ]
            },
            "operation": {
              "type": "string",
              "const": "history"
            },
            "action_id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "window": {
              "type": "object",
              "properties": {
                "since": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "until": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                }
              },
              "required": [
                "since",
                "until"
              ],
              "additionalProperties": false
            }
          },
          "required": [
            "items",
            "next_cursor",
            "continuation",
            "operation",
            "action_id",
            "window"
          ],
          "additionalProperties": false
        }
      ]
    }
  }
]
actions.get · read · contract-only

Feature declaration: getAction

Requirement: docs/feature-specs/F5-actions.md · Access: retained-read

Tables: actions (read), cycles (read), objectives (read), sessions (read), action_logs (read)

Trusted context: authenticated actor

Retry: Safe to retry with the same resolved filters and cursor.

Expected errors: UNAUTHORIZED, BAD_REQUEST, FORBIDDEN, NOT_FOUND, CONFLICT, NOT_IMPLEMENTED, INTERNAL_SERVER_ERROR

API consumers

[
  {
    "operation": "actions.get",
    "service": "actions.get",
    "binding": "bound"
  }
]

MCP consumers

[
  {
    "tool": "action_read",
    "collection": "actions",
    "specification": "docs/feature-specs/F5-actions.md#mcp-source-mapping--selected-target",
    "operation": "get",
    "binding": "planned",
    "mode": "adapted",
    "readiness": "contract-only",
    "services": [
      "actions.get"
    ],
    "gap": null,
    "projection": "Project record.action and changed on writes; list uses resolved cycle_id and original filters; history preserves its resolved window."
  }
]

Service input

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}

Service output

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "action": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
        },
        "cycle_id": {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
        },
        "objective_id": {
          "anyOf": [
            {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            {
              "type": "null"
            }
          ]
        },
        "title": {
          "type": "string"
        },
        "description": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ]
        },
        "due_at": {
          "anyOf": [
            {
              "type": "string",
              "format": "date",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
              "description": "Calendar date as YYYY-MM-DD in the profile timezone."
            },
            {
              "type": "null"
            }
          ],
          "description": "UI label: Due. May be unset on a web draft; a set date cannot be cleared."
        },
        "status": {
          "type": "string",
          "enum": [
            "open",
            "in_progress",
            "done"
          ],
          "description": "Action status: Open, In progress or Done. The To do UI group includes Open and In progress; Overdue is derived, not a status."
        },
        "sort_order": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "description": "Drag order within an action group; not a progress status."
        },
        "session_id": {
          "anyOf": [
            {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            {
              "type": "null"
            }
          ]
        },
        "created_at": {
          "type": "string",
          "format": "date-time",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
        },
        "url": {
          "type": "string",
          "format": "uri"
        },
        "overdue": {
          "type": "boolean"
        },
        "done_since_boundary": {
          "type": "boolean"
        }
      },
      "required": [
        "id",
        "cycle_id",
        "objective_id",
        "title",
        "description",
        "due_at",
        "status",
        "sort_order",
        "session_id",
        "created_at",
        "url",
        "overdue",
        "done_since_boundary"
      ],
      "additionalProperties": false
    },
    "cycle": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
        },
        "intention": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "description": "UI label: Intention. Optional guiding focus; the cycle is identified by its date range, not a name."
        },
        "start_at": {
          "type": "string",
          "format": "date",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
          "description": "UI label: Starts."
        },
        "end_at": {
          "type": "string",
          "format": "date",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
          "description": "UI label: Ends."
        },
        "status": {
          "type": "string",
          "enum": [
            "active",
            "archived"
          ]
        },
        "created_at": {
          "type": "string",
          "format": "date-time",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
        },
        "url": {
          "type": "string",
          "format": "uri"
        },
        "achievement_pct": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "description": "UI label: Achievement. Derived from objective progress; unavailable when nothing is measurable."
        },
        "time_gone_pct": {
          "type": "number",
          "minimum": 0,
          "maximum": 100,
          "description": "UI label: Time gone. Derived percentage of the cycle elapsed."
        },
        "length_weeks": {
          "type": "integer",
          "minimum": -9007199254740991,
          "maximum": 9007199254740991,
          "description": "UI label: Length, in weeks; derived from Starts and Ends."
        }
      },
      "required": [
        "id",
        "intention",
        "start_at",
        "end_at",
        "status",
        "created_at",
        "url",
        "achievement_pct",
        "time_gone_pct",
        "length_weeks"
      ],
      "additionalProperties": false
    },
    "objective": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "cycle_id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "title": {
              "type": "string"
            },
            "description": {
              "type": "string"
            },
            "deadline_at": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                  "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                },
                {
                  "type": "null"
                }
              ],
              "description": "UI label: Deadline; null when no deadline has been set."
            },
            "status": {
              "type": "string",
              "enum": [
                "on_track",
                "off_track",
                "completed"
              ],
              "description": "Objective status: On track, Off track or Completed. Coaching judgment, independent of the derived Progress percentage."
            },
            "created_at": {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
            },
            "short_code": {
              "type": "string",
              "minLength": 1
            },
            "url": {
              "type": "string",
              "format": "uri"
            },
            "progress_pct": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "null"
                }
              ],
              "description": "UI label: Progress. Derived from measurable results, independently of Status."
            },
            "boundary_progress_pct": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Historical progress at the resolved last-session boundary; not current Progress."
            },
            "movement_pp": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "id",
            "cycle_id",
            "title",
            "description",
            "deadline_at",
            "status",
            "created_at",
            "short_code",
            "url",
            "progress_pct",
            "boundary_progress_pct",
            "movement_pp"
          ],
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ]
    },
    "source_session": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "vendor": {
              "type": "string",
              "enum": [
                "claude",
                "openai"
              ],
              "description": "Conversation host: claude is shown as Claude; openai is shown as ChatGPT."
            },
            "source_url": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "uri"
                },
                {
                  "type": "null"
                }
              ],
              "description": "External conversation link used by Open the conversation. Not the app detail URL."
            },
            "type": {
              "anyOf": [
                {
                  "type": "string",
                  "enum": [
                    "goal_setup",
                    "check_in",
                    "review",
                    "open_coaching"
                  ],
                  "description": "Coaching session type: Goal setup, Check-in, Review or Open coaching. Separate from whether the session is still open."
                },
                {
                  "type": "null"
                }
              ]
            },
            "briefing_notes": {
              "type": "string",
              "description": "UI document: Briefing. Server-prepared coaching context."
            },
            "headline": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "One-line coaching-session summary used in session lists."
            },
            "summary_notes": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "UI document: Summary. Saved when the coaching session closes."
            },
            "started_at": {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
            },
            "ended_at": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Closed when set; In progress when null. This is derived session state, not a stored status enum."
            },
            "url": {
              "type": "string",
              "format": "uri",
              "description": "Internal app link to coaching session details; distinct from source_url."
            },
            "duration_minutes": {
              "anyOf": [
                {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                {
                  "type": "null"
                }
              ]
            },
            "actions_created": {
              "type": "integer",
              "minimum": 0,
              "maximum": 9007199254740991
            },
            "actions_reviewed": {
              "type": "integer",
              "minimum": 0,
              "maximum": 9007199254740991
            }
          },
          "required": [
            "id",
            "vendor",
            "source_url",
            "type",
            "briefing_notes",
            "headline",
            "summary_notes",
            "started_at",
            "ended_at",
            "url",
            "duration_minutes",
            "actions_created",
            "actions_reviewed"
          ],
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ]
    },
    "action_logs": {
      "type": "object",
      "properties": {
        "items": {
          "maxItems": 100,
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
              },
              "action_id": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
              },
              "status": {
                "type": "string",
                "enum": [
                  "open",
                  "in_progress",
                  "done"
                ],
                "description": "Action status: Open, In progress or Done. The To do UI group includes Open and In progress; Overdue is derived, not a status."
              },
              "comment": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "session_id": {
                "anyOf": [
                  {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "recorded_at": {
                "type": "string",
                "format": "date-time",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
              }
            },
            "required": [
              "id",
              "action_id",
              "status",
              "comment",
              "session_id",
              "recorded_at"
            ],
            "additionalProperties": false,
            "description": "Action log stored in action_logs. Records a status observation and optional comment. Action detail shows Comments, a filtered view rather than the complete status history; status and timestamps are immutable, and only the comment may be cleared."
          }
        },
        "next_cursor": {
          "anyOf": [
            {
              "type": "string",
              "minLength": 1
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "required": [
        "items",
        "next_cursor"
      ],
      "additionalProperties": false
    },
    "continuations": {
      "type": "object",
      "propertyNames": {
        "type": "string",
        "enum": [
          "cycles",
          "objectives",
          "results",
          "actions",
          "notes",
          "sessions",
          "result_logs",
          "habit_logs",
          "action_logs",
          "trend"
        ]
      },
      "additionalProperties": {
        "type": "string",
        "minLength": 1
      }
    }
  },
  "required": [
    "action",
    "cycle",
    "objective",
    "source_session",
    "action_logs",
    "continuations"
  ],
  "additionalProperties": false
}
Public MCP input/output shapes for comparison
[
  {
    "tool": "action_read",
    "collection": "actions",
    "specification": "docs/feature-specs/F5-actions.md#mcp-source-mapping--selected-target",
    "operation": "get",
    "binding": "planned",
    "mode": "adapted",
    "readiness": "contract-only",
    "services": [
      "actions.get"
    ],
    "gap": null,
    "projection": "Project record.action and changed on writes; list uses resolved cycle_id and original filters; history preserves its resolved window.",
    "input": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "oneOf": [
        {
          "type": "object",
          "properties": {
            "cursor": {
              "type": "string",
              "minLength": 1
            },
            "limit": {
              "default": 20,
              "type": "integer",
              "minimum": 1,
              "maximum": 100
            },
            "cycle_id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "objective_id": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                {
                  "type": "null"
                }
              ]
            },
            "status": {
              "type": "string",
              "enum": [
                "open",
                "in_progress",
                "done"
              ],
              "description": "Action status: Open, In progress or Done. The To do UI group includes Open and In progress; Overdue is derived, not a status."
            },
            "due_before": {
              "type": "string",
              "format": "date",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
              "description": "Calendar date as YYYY-MM-DD in the profile timezone."
            },
            "outstanding": {
              "description": "Only open or in_progress actions; exclude done across every page.",
              "type": "boolean",
              "const": true
            },
            "session_id": {
              "description": "Filter actions created in this owned session; combine with cycle_id to select its cycle explicitly.",
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
            },
            "overdue": {
              "description": "Only non-done actions before due_before; requires an explicit local cutoff date for stable briefing pagination.",
              "type": "boolean",
              "const": true
            },
            "operation": {
              "type": "string",
              "const": "list"
            }
          },
          "required": [
            "operation"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "operation": {
              "type": "string",
              "const": "get"
            }
          },
          "required": [
            "id",
            "operation"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "cursor": {
              "type": "string",
              "minLength": 1
            },
            "limit": {
              "default": 20,
              "type": "integer",
              "minimum": 1,
              "maximum": 100
            },
            "action_id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "operation": {
              "type": "string",
              "const": "history"
            },
            "window": {
              "type": "object",
              "properties": {
                "since": {
                  "description": "Inclusive lower bound. Default: last completed session, falling back to active-cycle start. Date-only values use the profile timezone.",
                  "anyOf": [
                    {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "date",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                          "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                        },
                        {
                          "type": "string",
                          "format": "date-time",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                        }
                      ]
                    },
                    {
                      "type": "string",
                      "enum": [
                        "last_session",
                        "cycle_start"
                      ]
                    }
                  ]
                },
                "until": {
                  "description": "Exclusive upper bound; default is the server time captured on the first page.",
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                      "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                    },
                    {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    }
                  ]
                }
              },
              "additionalProperties": false
            }
          },
          "required": [
            "action_id",
            "operation"
          ],
          "additionalProperties": false
        }
      ]
    },
    "output": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "items": {
              "maxItems": 100,
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "cycle_id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "objective_id": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "title": {
                    "type": "string"
                  },
                  "description": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "due_at": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                        "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "UI label: Due. May be unset on a web draft; a set date cannot be cleared."
                  },
                  "status": {
                    "type": "string",
                    "enum": [
                      "open",
                      "in_progress",
                      "done"
                    ],
                    "description": "Action status: Open, In progress or Done. The To do UI group includes Open and In progress; Overdue is derived, not a status."
                  },
                  "sort_order": {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "Drag order within an action group; not a progress status."
                  },
                  "session_id": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "created_at": {
                    "type": "string",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                  },
                  "url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "overdue": {
                    "type": "boolean"
                  },
                  "done_since_boundary": {
                    "type": "boolean"
                  }
                },
                "required": [
                  "id",
                  "cycle_id",
                  "objective_id",
                  "title",
                  "description",
                  "due_at",
                  "status",
                  "sort_order",
                  "session_id",
                  "created_at",
                  "url",
                  "overdue",
                  "done_since_boundary"
                ],
                "additionalProperties": false
              }
            },
            "next_cursor": {
              "anyOf": [
                {
                  "type": "string",
                  "minLength": 1
                },
                {
                  "type": "null"
                }
              ]
            },
            "continuation": {
              "anyOf": [
                {
                  "type": "object",
                  "properties": {
                    "tool": {
                      "type": "string",
                      "const": "action_read"
                    },
                    "arguments": {
                      "type": "object",
                      "properties": {
                        "cursor": {
                          "type": "string",
                          "minLength": 1
                        },
                        "limit": {
                          "type": "integer",
                          "minimum": 1,
                          "maximum": 100
                        },
                        "cycle_id": {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                        },
                        "objective_id": {
                          "anyOf": [
                            {
                              "type": "string",
                              "format": "uuid",
                              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "status": {
                          "type": "string",
                          "enum": [
                            "open",
                            "in_progress",
                            "done"
                          ],
                          "description": "Action status: Open, In progress or Done. The To do UI group includes Open and In progress; Overdue is derived, not a status."
                        },
                        "due_before": {
                          "type": "string",
                          "format": "date",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                          "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                        },
                        "outstanding": {
                          "description": "Only open or in_progress actions; exclude done across every page.",
                          "type": "boolean",
                          "const": true
                        },
                        "session_id": {
                          "description": "Filter actions created in this owned session; combine with cycle_id to select its cycle explicitly.",
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                        },
                        "overdue": {
                          "description": "Only non-done actions before due_before; requires an explicit local cutoff date for stable briefing pagination.",
                          "type": "boolean",
                          "const": true
                        },
                        "operation": {
                          "type": "string",
                          "const": "list"
                        }
                      },
                      "required": [
                        "cursor",
                        "limit",
                        "cycle_id",
                        "operation"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "required": [
                    "tool",
                    "arguments"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "null"
                }
              ]
            },
            "operation": {
              "type": "string",
              "const": "list"
            }
          },
          "required": [
            "items",
            "next_cursor",
            "continuation",
            "operation"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "operation": {
              "type": "string",
              "const": "get"
            },
            "action": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "cycle_id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "objective_id": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "title": {
                  "type": "string"
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "due_at": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                      "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "UI label: Due. May be unset on a web draft; a set date cannot be cleared."
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "open",
                    "in_progress",
                    "done"
                  ],
                  "description": "Action status: Open, In progress or Done. The To do UI group includes Open and In progress; Overdue is derived, not a status."
                },
                "sort_order": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "Drag order within an action group; not a progress status."
                },
                "session_id": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "created_at": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                },
                "overdue": {
                  "type": "boolean"
                },
                "done_since_boundary": {
                  "type": "boolean"
                }
              },
              "required": [
                "id",
                "cycle_id",
                "objective_id",
                "title",
                "description",
                "due_at",
                "status",
                "sort_order",
                "session_id",
                "created_at",
                "url",
                "overdue",
                "done_since_boundary"
              ],
              "additionalProperties": false
            }
          },
          "required": [
            "operation",
            "action"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "items": {
              "maxItems": 100,
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "action_id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "status": {
                    "type": "string",
                    "enum": [
                      "open",
                      "in_progress",
                      "done"
                    ],
                    "description": "Action status: Open, In progress or Done. The To do UI group includes Open and In progress; Overdue is derived, not a status."
                  },
                  "comment": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "session_id": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "recorded_at": {
                    "type": "string",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                  }
                },
                "required": [
                  "id",
                  "action_id",
                  "status",
                  "comment",
                  "session_id",
                  "recorded_at"
                ],
                "additionalProperties": false,
                "description": "Action log stored in action_logs. Records a status observation and optional comment. Action detail shows Comments, a filtered view rather than the complete status history; status and timestamps are immutable, and only the comment may be cleared."
              }
            },
            "next_cursor": {
              "anyOf": [
                {
                  "type": "string",
                  "minLength": 1
                },
                {
                  "type": "null"
                }
              ]
            },
            "continuation": {
              "anyOf": [
                {
                  "type": "object",
                  "properties": {
                    "tool": {
                      "type": "string",
                      "const": "action_read"
                    },
                    "arguments": {
                      "type": "object",
                      "properties": {
                        "cursor": {
                          "type": "string",
                          "minLength": 1
                        },
                        "limit": {
                          "type": "integer",
                          "minimum": 1,
                          "maximum": 100
                        },
                        "action_id": {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                        },
                        "operation": {
                          "type": "string",
                          "const": "history"
                        },
                        "window": {
                          "type": "object",
                          "properties": {
                            "since": {
                              "type": "string",
                              "format": "date-time",
                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                            },
                            "until": {
                              "type": "string",
                              "format": "date-time",
                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                            }
                          },
                          "required": [
                            "since",
                            "until"
                          ],
                          "additionalProperties": false
                        }
                      },
                      "required": [
                        "cursor",
                        "limit",
                        "action_id",
                        "operation",
                        "window"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "required": [
                    "tool",
                    "arguments"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "null"
                }
              ]
            },
            "operation": {
              "type": "string",
              "const": "history"
            },
            "action_id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "window": {
              "type": "object",
              "properties": {
                "since": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "until": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                }
              },
              "required": [
                "since",
                "until"
              ],
              "additionalProperties": false
            }
          },
          "required": [
            "items",
            "next_cursor",
            "continuation",
            "operation",
            "action_id",
            "window"
          ],
          "additionalProperties": false
        }
      ]
    }
  }
]
actions.update · write · contract-only

Feature declaration: updateAction

Requirement: docs/feature-specs/F5-actions.md · Access: entitled-write

Tables: actions (write), cycles (read), objectives (read), sessions (read), action_logs (read)

Trusted context: authenticated actor

Retry: Inspect state after uncertain outcomes; never infer rollback from a response failure.

Expected errors: UNAUTHORIZED, BAD_REQUEST, FORBIDDEN, NOT_FOUND, CONFLICT, NOT_IMPLEMENTED, INTERNAL_SERVER_ERROR

API consumers

[
  {
    "operation": "actions.update",
    "service": "actions.update",
    "binding": "bound"
  }
]

MCP consumers

[
  {
    "tool": "action_write",
    "collection": "actions",
    "specification": "docs/feature-specs/F5-actions.md#mcp-source-mapping--selected-target",
    "operation": "update",
    "binding": "planned",
    "mode": "adapted",
    "readiness": "contract-only",
    "services": [
      "actions.update"
    ],
    "gap": null,
    "projection": "Project record.action and changed on writes; list uses resolved cycle_id and original filters; history preserves its resolved window."
  }
]

Service input

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
    },
    "title": {
      "type": "string"
    },
    "description": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ]
    },
    "due_at": {
      "description": "New due date. Omit to preserve; a previously set date cannot be cleared. Web creation may initially have no date.",
      "type": "string",
      "format": "date",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
    },
    "objective_id": {
      "anyOf": [
        {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
        },
        {
          "type": "null"
        }
      ]
    },
    "session_id": {
      "anyOf": [
        {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
        },
        {
          "type": "null"
        }
      ]
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}

Service output

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "record": {
      "type": "object",
      "properties": {
        "action": {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "cycle_id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "objective_id": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                {
                  "type": "null"
                }
              ]
            },
            "title": {
              "type": "string"
            },
            "description": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ]
            },
            "due_at": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                  "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                },
                {
                  "type": "null"
                }
              ],
              "description": "UI label: Due. May be unset on a web draft; a set date cannot be cleared."
            },
            "status": {
              "type": "string",
              "enum": [
                "open",
                "in_progress",
                "done"
              ],
              "description": "Action status: Open, In progress or Done. The To do UI group includes Open and In progress; Overdue is derived, not a status."
            },
            "sort_order": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Drag order within an action group; not a progress status."
            },
            "session_id": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                {
                  "type": "null"
                }
              ]
            },
            "created_at": {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
            },
            "url": {
              "type": "string",
              "format": "uri"
            },
            "overdue": {
              "type": "boolean"
            },
            "done_since_boundary": {
              "type": "boolean"
            }
          },
          "required": [
            "id",
            "cycle_id",
            "objective_id",
            "title",
            "description",
            "due_at",
            "status",
            "sort_order",
            "session_id",
            "created_at",
            "url",
            "overdue",
            "done_since_boundary"
          ],
          "additionalProperties": false
        },
        "cycle": {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "intention": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "UI label: Intention. Optional guiding focus; the cycle is identified by its date range, not a name."
            },
            "start_at": {
              "type": "string",
              "format": "date",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
              "description": "UI label: Starts."
            },
            "end_at": {
              "type": "string",
              "format": "date",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
              "description": "UI label: Ends."
            },
            "status": {
              "type": "string",
              "enum": [
                "active",
                "archived"
              ]
            },
            "created_at": {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
            },
            "url": {
              "type": "string",
              "format": "uri"
            },
            "achievement_pct": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "null"
                }
              ],
              "description": "UI label: Achievement. Derived from objective progress; unavailable when nothing is measurable."
            },
            "time_gone_pct": {
              "type": "number",
              "minimum": 0,
              "maximum": 100,
              "description": "UI label: Time gone. Derived percentage of the cycle elapsed."
            },
            "length_weeks": {
              "type": "integer",
              "minimum": -9007199254740991,
              "maximum": 9007199254740991,
              "description": "UI label: Length, in weeks; derived from Starts and Ends."
            }
          },
          "required": [
            "id",
            "intention",
            "start_at",
            "end_at",
            "status",
            "created_at",
            "url",
            "achievement_pct",
            "time_gone_pct",
            "length_weeks"
          ],
          "additionalProperties": false
        },
        "objective": {
          "anyOf": [
            {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "cycle_id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "title": {
                  "type": "string"
                },
                "description": {
                  "type": "string"
                },
                "deadline_at": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                      "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "UI label: Deadline; null when no deadline has been set."
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "on_track",
                    "off_track",
                    "completed"
                  ],
                  "description": "Objective status: On track, Off track or Completed. Coaching judgment, independent of the derived Progress percentage."
                },
                "created_at": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "short_code": {
                  "type": "string",
                  "minLength": 1
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                },
                "progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "UI label: Progress. Derived from measurable results, independently of Status."
                },
                "boundary_progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "Historical progress at the resolved last-session boundary; not current Progress."
                },
                "movement_pp": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "id",
                "cycle_id",
                "title",
                "description",
                "deadline_at",
                "status",
                "created_at",
                "short_code",
                "url",
                "progress_pct",
                "boundary_progress_pct",
                "movement_pp"
              ],
              "additionalProperties": false
            },
            {
              "type": "null"
            }
          ]
        },
        "source_session": {
          "anyOf": [
            {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "vendor": {
                  "type": "string",
                  "enum": [
                    "claude",
                    "openai"
                  ],
                  "description": "Conversation host: claude is shown as Claude; openai is shown as ChatGPT."
                },
                "source_url": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "uri"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "External conversation link used by Open the conversation. Not the app detail URL."
                },
                "type": {
                  "anyOf": [
                    {
                      "type": "string",
                      "enum": [
                        "goal_setup",
                        "check_in",
                        "review",
                        "open_coaching"
                      ],
                      "description": "Coaching session type: Goal setup, Check-in, Review or Open coaching. Separate from whether the session is still open."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "briefing_notes": {
                  "type": "string",
                  "description": "UI document: Briefing. Server-prepared coaching context."
                },
                "headline": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "One-line coaching-session summary used in session lists."
                },
                "summary_notes": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "UI document: Summary. Saved when the coaching session closes."
                },
                "started_at": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "ended_at": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "Closed when set; In progress when null. This is derived session state, not a stored status enum."
                },
                "url": {
                  "type": "string",
                  "format": "uri",
                  "description": "Internal app link to coaching session details; distinct from source_url."
                },
                "duration_minutes": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "actions_created": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "actions_reviewed": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                }
              },
              "required": [
                "id",
                "vendor",
                "source_url",
                "type",
                "briefing_notes",
                "headline",
                "summary_notes",
                "started_at",
                "ended_at",
                "url",
                "duration_minutes",
                "actions_created",
                "actions_reviewed"
              ],
              "additionalProperties": false
            },
            {
              "type": "null"
            }
          ]
        },
        "action_logs": {
          "type": "object",
          "properties": {
            "items": {
              "maxItems": 100,
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "action_id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "status": {
                    "type": "string",
                    "enum": [
                      "open",
                      "in_progress",
                      "done"
                    ],
                    "description": "Action status: Open, In progress or Done. The To do UI group includes Open and In progress; Overdue is derived, not a status."
                  },
                  "comment": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "session_id": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "recorded_at": {
                    "type": "string",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                  }
                },
                "required": [
                  "id",
                  "action_id",
                  "status",
                  "comment",
                  "session_id",
                  "recorded_at"
                ],
                "additionalProperties": false,
                "description": "Action log stored in action_logs. Records a status observation and optional comment. Action detail shows Comments, a filtered view rather than the complete status history; status and timestamps are immutable, and only the comment may be cleared."
              }
            },
            "next_cursor": {
              "anyOf": [
                {
                  "type": "string",
                  "minLength": 1
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "items",
            "next_cursor"
          ],
          "additionalProperties": false
        },
        "continuations": {
          "type": "object",
          "propertyNames": {
            "type": "string",
            "enum": [
              "cycles",
              "objectives",
              "results",
              "actions",
              "notes",
              "sessions",
              "result_logs",
              "habit_logs",
              "action_logs",
              "trend"
            ]
          },
          "additionalProperties": {
            "type": "string",
            "minLength": 1
          }
        }
      },
      "required": [
        "action",
        "cycle",
        "objective",
        "source_session",
        "action_logs",
        "continuations"
      ],
      "additionalProperties": false
    },
    "changed": {
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "entity": {
            "type": "string",
            "enum": [
              "user",
              "cycle",
              "objective",
              "result",
              "result_log",
              "action",
              "action_log",
              "session",
              "note",
              "habit_log"
            ]
          },
          "id": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
            "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
          }
        },
        "required": [
          "entity",
          "id"
        ],
        "additionalProperties": false
      }
    },
    "continuations": {
      "type": "object",
      "propertyNames": {
        "type": "string",
        "enum": [
          "cycles",
          "objectives",
          "results",
          "actions",
          "notes",
          "sessions",
          "result_logs",
          "habit_logs",
          "action_logs",
          "trend"
        ]
      },
      "additionalProperties": {
        "type": "string",
        "minLength": 1
      }
    }
  },
  "required": [
    "record",
    "changed",
    "continuations"
  ],
  "additionalProperties": false
}
Public MCP input/output shapes for comparison
[
  {
    "tool": "action_write",
    "collection": "actions",
    "specification": "docs/feature-specs/F5-actions.md#mcp-source-mapping--selected-target",
    "operation": "update",
    "binding": "planned",
    "mode": "adapted",
    "readiness": "contract-only",
    "services": [
      "actions.update"
    ],
    "gap": null,
    "projection": "Project record.action and changed on writes; list uses resolved cycle_id and original filters; history preserves its resolved window.",
    "input": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "oneOf": [
        {
          "type": "object",
          "properties": {
            "title": {
              "type": "string",
              "minLength": 1
            },
            "due_at": {
              "type": "string",
              "format": "date",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
              "description": "Calendar date as YYYY-MM-DD in the profile timezone."
            },
            "objective_id": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                {
                  "type": "null"
                }
              ]
            },
            "description": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ]
            },
            "operation": {
              "type": "string",
              "const": "create"
            }
          },
          "required": [
            "title",
            "due_at",
            "operation"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "title": {
              "type": "string",
              "minLength": 1
            },
            "description": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ]
            },
            "due_at": {
              "description": "New due date. Omit to preserve; a previously set date cannot be cleared.",
              "type": "string",
              "format": "date",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
            },
            "objective_id": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                {
                  "type": "null"
                }
              ]
            },
            "session_id": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                {
                  "type": "null"
                }
              ]
            },
            "operation": {
              "type": "string",
              "const": "update"
            }
          },
          "required": [
            "id",
            "operation"
          ],
          "additionalProperties": false
        }
      ]
    },
    "output": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "action": {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "cycle_id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "objective_id": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                {
                  "type": "null"
                }
              ]
            },
            "title": {
              "type": "string"
            },
            "description": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ]
            },
            "due_at": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                  "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                },
                {
                  "type": "null"
                }
              ],
              "description": "UI label: Due. May be unset on a web draft; a set date cannot be cleared."
            },
            "status": {
              "type": "string",
              "enum": [
                "open",
                "in_progress",
                "done"
              ],
              "description": "Action status: Open, In progress or Done. The To do UI group includes Open and In progress; Overdue is derived, not a status."
            },
            "sort_order": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Drag order within an action group; not a progress status."
            },
            "session_id": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                {
                  "type": "null"
                }
              ]
            },
            "created_at": {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
            },
            "url": {
              "type": "string",
              "format": "uri"
            },
            "overdue": {
              "type": "boolean"
            },
            "done_since_boundary": {
              "type": "boolean"
            }
          },
          "required": [
            "id",
            "cycle_id",
            "objective_id",
            "title",
            "description",
            "due_at",
            "status",
            "sort_order",
            "session_id",
            "created_at",
            "url",
            "overdue",
            "done_since_boundary"
          ],
          "additionalProperties": false
        },
        "changed": {
          "maxItems": 100,
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "entity": {
                "type": "string",
                "enum": [
                  "user",
                  "cycle",
                  "objective",
                  "result",
                  "result_log",
                  "action",
                  "action_log",
                  "session",
                  "note",
                  "habit_log"
                ]
              },
              "id": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
              }
            },
            "required": [
              "entity",
              "id"
            ],
            "additionalProperties": false
          }
        }
      },
      "required": [
        "action",
        "changed"
      ],
      "additionalProperties": false
    }
  }
]
actions.reorder · write · contract-only

Feature declaration: reorderAction

Requirement: docs/feature-specs/F5-actions.md · Access: entitled-write

Tables: actions (write), cycles (read), objectives (read), sessions (read), action_logs (read)

Trusted context: authenticated actor

Retry: Inspect state after uncertain outcomes; never infer rollback from a response failure.

Expected errors: UNAUTHORIZED, BAD_REQUEST, FORBIDDEN, NOT_FOUND, CONFLICT, NOT_IMPLEMENTED, INTERNAL_SERVER_ERROR

API consumers

[
  {
    "operation": "actions.reorder",
    "service": "actions.reorder",
    "binding": "bound"
  }
]

MCP consumers

[]

Service input

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
    },
    "sort_order": {
      "type": "number"
    }
  },
  "required": [
    "id",
    "sort_order"
  ],
  "additionalProperties": false
}

Service output

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "record": {
      "type": "object",
      "properties": {
        "action": {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "cycle_id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "objective_id": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                {
                  "type": "null"
                }
              ]
            },
            "title": {
              "type": "string"
            },
            "description": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ]
            },
            "due_at": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                  "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                },
                {
                  "type": "null"
                }
              ],
              "description": "UI label: Due. May be unset on a web draft; a set date cannot be cleared."
            },
            "status": {
              "type": "string",
              "enum": [
                "open",
                "in_progress",
                "done"
              ],
              "description": "Action status: Open, In progress or Done. The To do UI group includes Open and In progress; Overdue is derived, not a status."
            },
            "sort_order": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Drag order within an action group; not a progress status."
            },
            "session_id": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                {
                  "type": "null"
                }
              ]
            },
            "created_at": {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
            },
            "url": {
              "type": "string",
              "format": "uri"
            },
            "overdue": {
              "type": "boolean"
            },
            "done_since_boundary": {
              "type": "boolean"
            }
          },
          "required": [
            "id",
            "cycle_id",
            "objective_id",
            "title",
            "description",
            "due_at",
            "status",
            "sort_order",
            "session_id",
            "created_at",
            "url",
            "overdue",
            "done_since_boundary"
          ],
          "additionalProperties": false
        },
        "cycle": {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "intention": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "UI label: Intention. Optional guiding focus; the cycle is identified by its date range, not a name."
            },
            "start_at": {
              "type": "string",
              "format": "date",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
              "description": "UI label: Starts."
            },
            "end_at": {
              "type": "string",
              "format": "date",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
              "description": "UI label: Ends."
            },
            "status": {
              "type": "string",
              "enum": [
                "active",
                "archived"
              ]
            },
            "created_at": {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
            },
            "url": {
              "type": "string",
              "format": "uri"
            },
            "achievement_pct": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "null"
                }
              ],
              "description": "UI label: Achievement. Derived from objective progress; unavailable when nothing is measurable."
            },
            "time_gone_pct": {
              "type": "number",
              "minimum": 0,
              "maximum": 100,
              "description": "UI label: Time gone. Derived percentage of the cycle elapsed."
            },
            "length_weeks": {
              "type": "integer",
              "minimum": -9007199254740991,
              "maximum": 9007199254740991,
              "description": "UI label: Length, in weeks; derived from Starts and Ends."
            }
          },
          "required": [
            "id",
            "intention",
            "start_at",
            "end_at",
            "status",
            "created_at",
            "url",
            "achievement_pct",
            "time_gone_pct",
            "length_weeks"
          ],
          "additionalProperties": false
        },
        "objective": {
          "anyOf": [
            {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "cycle_id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "title": {
                  "type": "string"
                },
                "description": {
                  "type": "string"
                },
                "deadline_at": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                      "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "UI label: Deadline; null when no deadline has been set."
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "on_track",
                    "off_track",
                    "completed"
                  ],
                  "description": "Objective status: On track, Off track or Completed. Coaching judgment, independent of the derived Progress percentage."
                },
                "created_at": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "short_code": {
                  "type": "string",
                  "minLength": 1
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                },
                "progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "UI label: Progress. Derived from measurable results, independently of Status."
                },
                "boundary_progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "Historical progress at the resolved last-session boundary; not current Progress."
                },
                "movement_pp": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "id",
                "cycle_id",
                "title",
                "description",
                "deadline_at",
                "status",
                "created_at",
                "short_code",
                "url",
                "progress_pct",
                "boundary_progress_pct",
                "movement_pp"
              ],
              "additionalProperties": false
            },
            {
              "type": "null"
            }
          ]
        },
        "source_session": {
          "anyOf": [
            {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "vendor": {
                  "type": "string",
                  "enum": [
                    "claude",
                    "openai"
                  ],
                  "description": "Conversation host: claude is shown as Claude; openai is shown as ChatGPT."
                },
                "source_url": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "uri"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "External conversation link used by Open the conversation. Not the app detail URL."
                },
                "type": {
                  "anyOf": [
                    {
                      "type": "string",
                      "enum": [
                        "goal_setup",
                        "check_in",
                        "review",
                        "open_coaching"
                      ],
                      "description": "Coaching session type: Goal setup, Check-in, Review or Open coaching. Separate from whether the session is still open."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "briefing_notes": {
                  "type": "string",
                  "description": "UI document: Briefing. Server-prepared coaching context."
                },
                "headline": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "One-line coaching-session summary used in session lists."
                },
                "summary_notes": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "UI document: Summary. Saved when the coaching session closes."
                },
                "started_at": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "ended_at": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "Closed when set; In progress when null. This is derived session state, not a stored status enum."
                },
                "url": {
                  "type": "string",
                  "format": "uri",
                  "description": "Internal app link to coaching session details; distinct from source_url."
                },
                "duration_minutes": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "actions_created": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "actions_reviewed": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                }
              },
              "required": [
                "id",
                "vendor",
                "source_url",
                "type",
                "briefing_notes",
                "headline",
                "summary_notes",
                "started_at",
                "ended_at",
                "url",
                "duration_minutes",
                "actions_created",
                "actions_reviewed"
              ],
              "additionalProperties": false
            },
            {
              "type": "null"
            }
          ]
        },
        "action_logs": {
          "type": "object",
          "properties": {
            "items": {
              "maxItems": 100,
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "action_id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "status": {
                    "type": "string",
                    "enum": [
                      "open",
                      "in_progress",
                      "done"
                    ],
                    "description": "Action status: Open, In progress or Done. The To do UI group includes Open and In progress; Overdue is derived, not a status."
                  },
                  "comment": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "session_id": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "recorded_at": {
                    "type": "string",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                  }
                },
                "required": [
                  "id",
                  "action_id",
                  "status",
                  "comment",
                  "session_id",
                  "recorded_at"
                ],
                "additionalProperties": false,
                "description": "Action log stored in action_logs. Records a status observation and optional comment. Action detail shows Comments, a filtered view rather than the complete status history; status and timestamps are immutable, and only the comment may be cleared."
              }
            },
            "next_cursor": {
              "anyOf": [
                {
                  "type": "string",
                  "minLength": 1
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "items",
            "next_cursor"
          ],
          "additionalProperties": false
        },
        "continuations": {
          "type": "object",
          "propertyNames": {
            "type": "string",
            "enum": [
              "cycles",
              "objectives",
              "results",
              "actions",
              "notes",
              "sessions",
              "result_logs",
              "habit_logs",
              "action_logs",
              "trend"
            ]
          },
          "additionalProperties": {
            "type": "string",
            "minLength": 1
          }
        }
      },
      "required": [
        "action",
        "cycle",
        "objective",
        "source_session",
        "action_logs",
        "continuations"
      ],
      "additionalProperties": false
    },
    "changed": {
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "entity": {
            "type": "string",
            "enum": [
              "user",
              "cycle",
              "objective",
              "result",
              "result_log",
              "action",
              "action_log",
              "session",
              "note",
              "habit_log"
            ]
          },
          "id": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
            "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
          }
        },
        "required": [
          "entity",
          "id"
        ],
        "additionalProperties": false
      }
    },
    "continuations": {
      "type": "object",
      "propertyNames": {
        "type": "string",
        "enum": [
          "cycles",
          "objectives",
          "results",
          "actions",
          "notes",
          "sessions",
          "result_logs",
          "habit_logs",
          "action_logs",
          "trend"
        ]
      },
      "additionalProperties": {
        "type": "string",
        "minLength": 1
      }
    }
  },
  "required": [
    "record",
    "changed",
    "continuations"
  ],
  "additionalProperties": false
}
Public MCP input/output shapes for comparison
[]
actions.delete · delete · contract-only

Feature declaration: deleteAction

Requirement: docs/feature-specs/F5-actions.md · Access: entitled-write

Tables: actions (delete)

Trusted context: authenticated actor

Retry: Inspect state after uncertain outcomes; never infer rollback from a response failure.

Expected errors: UNAUTHORIZED, BAD_REQUEST, FORBIDDEN, NOT_FOUND, CONFLICT, NOT_IMPLEMENTED, INTERNAL_SERVER_ERROR

API consumers

[
  {
    "operation": "actions.delete",
    "service": "actions.delete",
    "binding": "bound"
  }
]

MCP consumers

[
  {
    "tool": "action_delete",
    "collection": "actions",
    "specification": "docs/feature-specs/F5-actions.md#mcp-source-mapping--selected-target",
    "operation": "commit",
    "binding": "planned",
    "mode": "adapted",
    "readiness": "contract-only",
    "services": [
      "actions.delete"
    ],
    "gap": null,
    "projection": "Project record.action and changed on writes; list uses resolved cycle_id and original filters; history preserves its resolved window."
  }
]

Service input

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
    },
    "preview_id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "Server impact preview ID; trusted application approval must already exist."
    }
  },
  "required": [
    "id",
    "preview_id"
  ],
  "additionalProperties": false
}

Service output

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}
Public MCP input/output shapes for comparison
[
  {
    "tool": "action_delete",
    "collection": "actions",
    "specification": "docs/feature-specs/F5-actions.md#mcp-source-mapping--selected-target",
    "operation": "commit",
    "binding": "planned",
    "mode": "adapted",
    "readiness": "contract-only",
    "services": [
      "actions.delete"
    ],
    "gap": null,
    "projection": "Project record.action and changed on writes; list uses resolved cycle_id and original filters; history preserves its resolved window.",
    "input": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "oneOf": [
        {
          "type": "object",
          "properties": {
            "operation": {
              "type": "string",
              "const": "preview"
            },
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Exact owned record UUID. Resolve ambiguous targets before requesting impact."
            }
          },
          "required": [
            "operation",
            "id"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "operation": {
              "type": "string",
              "const": "commit"
            },
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "preview_id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Server preview ID for this target. Not consent: genuine approval must already be recorded by the trusted application."
            }
          },
          "required": [
            "operation",
            "id",
            "preview_id"
          ],
          "additionalProperties": false
        }
      ]
    },
    "output": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "oneOf": [
        {
          "type": "object",
          "properties": {
            "operation": {
              "type": "string",
              "const": "preview"
            },
            "preview_id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "expires_at": {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
            },
            "target": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "title": {
                  "type": "string"
                }
              },
              "required": [
                "id",
                "title"
              ],
              "additionalProperties": false
            },
            "deleted": {
              "type": "object",
              "properties": {
                "actions": {
                  "type": "number",
                  "const": 1
                },
                "action_logs": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                }
              },
              "required": [
                "actions",
                "action_logs"
              ],
              "additionalProperties": false
            },
            "approval": {
              "type": "object",
              "properties": {
                "status": {
                  "type": "string",
                  "const": "required"
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                }
              },
              "required": [
                "status",
                "url"
              ],
              "additionalProperties": false
            }
          },
          "required": [
            "operation",
            "preview_id",
            "expires_at",
            "target",
            "deleted",
            "approval"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "operation": {
              "type": "string",
              "const": "commit"
            },
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            }
          },
          "required": [
            "operation",
            "id"
          ],
          "additionalProperties": false
        }
      ]
    }
  }
]
action_logs.create · write · contract-only

Feature declaration: createActionLog

Requirement: docs/feature-specs/F5-actions.md · Access: entitled-write

Tables: action_logs (write), actions (write), cycles (read), objectives (read), sessions (read), idempotency_keys (write)

Trusted context: authenticated actor

Retry: API requires client-key replay; unkeyed MCP calls must inspect state after an uncertain outcome.

Expected errors: UNAUTHORIZED, BAD_REQUEST, FORBIDDEN, NOT_FOUND, CONFLICT, NOT_IMPLEMENTED, INTERNAL_SERVER_ERROR

API consumers

[
  {
    "operation": "action_logs.create",
    "service": "action_logs.create",
    "binding": "bound"
  }
]

MCP consumers

[
  {
    "tool": "progress_record",
    "collection": "progress",
    "specification": "docs/feature-specs/F4-results.md#mcp-source-mapping--selected-target",
    "operation": "action",
    "binding": "planned",
    "mode": "adapted",
    "readiness": "contract-only",
    "services": [
      "action_logs.create"
    ],
    "gap": null,
    "projection": "Dispatch result evidence, habit day/comment and action outcome to their existing shared operations; project the affected record and changed IDs."
  }
]

Service input

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "anyOf": [
    {
      "type": "object",
      "properties": {
        "action_id": {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
        },
        "status": {
          "type": "string",
          "enum": [
            "open",
            "in_progress",
            "done"
          ],
          "description": "Action status: Open, In progress or Done. The To do UI group includes Open and In progress; Overdue is derived, not a status."
        },
        "comment": {
          "type": "string",
          "minLength": 1
        },
        "idempotency_key": {
          "type": "string",
          "minLength": 1,
          "maxLength": 255
        }
      },
      "required": [
        "action_id",
        "status",
        "idempotency_key"
      ],
      "additionalProperties": false
    },
    {
      "type": "object",
      "properties": {
        "action_id": {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
        },
        "status": {
          "type": "string",
          "enum": [
            "open",
            "in_progress",
            "done"
          ],
          "description": "Action status: Open, In progress or Done. The To do UI group includes Open and In progress; Overdue is derived, not a status."
        },
        "comment": {
          "type": "string",
          "minLength": 1
        }
      },
      "required": [
        "action_id",
        "status"
      ],
      "additionalProperties": false
    }
  ]
}

Service output

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "record": {
      "type": "object",
      "properties": {
        "action": {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "cycle_id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "objective_id": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                {
                  "type": "null"
                }
              ]
            },
            "title": {
              "type": "string"
            },
            "description": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ]
            },
            "due_at": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                  "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                },
                {
                  "type": "null"
                }
              ],
              "description": "UI label: Due. May be unset on a web draft; a set date cannot be cleared."
            },
            "status": {
              "type": "string",
              "enum": [
                "open",
                "in_progress",
                "done"
              ],
              "description": "Action status: Open, In progress or Done. The To do UI group includes Open and In progress; Overdue is derived, not a status."
            },
            "sort_order": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Drag order within an action group; not a progress status."
            },
            "session_id": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                {
                  "type": "null"
                }
              ]
            },
            "created_at": {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
            },
            "url": {
              "type": "string",
              "format": "uri"
            },
            "overdue": {
              "type": "boolean"
            },
            "done_since_boundary": {
              "type": "boolean"
            }
          },
          "required": [
            "id",
            "cycle_id",
            "objective_id",
            "title",
            "description",
            "due_at",
            "status",
            "sort_order",
            "session_id",
            "created_at",
            "url",
            "overdue",
            "done_since_boundary"
          ],
          "additionalProperties": false
        },
        "cycle": {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "intention": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "UI label: Intention. Optional guiding focus; the cycle is identified by its date range, not a name."
            },
            "start_at": {
              "type": "string",
              "format": "date",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
              "description": "UI label: Starts."
            },
            "end_at": {
              "type": "string",
              "format": "date",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
              "description": "UI label: Ends."
            },
            "status": {
              "type": "string",
              "enum": [
                "active",
                "archived"
              ]
            },
            "created_at": {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
            },
            "url": {
              "type": "string",
              "format": "uri"
            },
            "achievement_pct": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "null"
                }
              ],
              "description": "UI label: Achievement. Derived from objective progress; unavailable when nothing is measurable."
            },
            "time_gone_pct": {
              "type": "number",
              "minimum": 0,
              "maximum": 100,
              "description": "UI label: Time gone. Derived percentage of the cycle elapsed."
            },
            "length_weeks": {
              "type": "integer",
              "minimum": -9007199254740991,
              "maximum": 9007199254740991,
              "description": "UI label: Length, in weeks; derived from Starts and Ends."
            }
          },
          "required": [
            "id",
            "intention",
            "start_at",
            "end_at",
            "status",
            "created_at",
            "url",
            "achievement_pct",
            "time_gone_pct",
            "length_weeks"
          ],
          "additionalProperties": false
        },
        "objective": {
          "anyOf": [
            {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "cycle_id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "title": {
                  "type": "string"
                },
                "description": {
                  "type": "string"
                },
                "deadline_at": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                      "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "UI label: Deadline; null when no deadline has been set."
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "on_track",
                    "off_track",
                    "completed"
                  ],
                  "description": "Objective status: On track, Off track or Completed. Coaching judgment, independent of the derived Progress percentage."
                },
                "created_at": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "short_code": {
                  "type": "string",
                  "minLength": 1
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                },
                "progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "UI label: Progress. Derived from measurable results, independently of Status."
                },
                "boundary_progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "Historical progress at the resolved last-session boundary; not current Progress."
                },
                "movement_pp": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "id",
                "cycle_id",
                "title",
                "description",
                "deadline_at",
                "status",
                "created_at",
                "short_code",
                "url",
                "progress_pct",
                "boundary_progress_pct",
                "movement_pp"
              ],
              "additionalProperties": false
            },
            {
              "type": "null"
            }
          ]
        },
        "source_session": {
          "anyOf": [
            {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "vendor": {
                  "type": "string",
                  "enum": [
                    "claude",
                    "openai"
                  ],
                  "description": "Conversation host: claude is shown as Claude; openai is shown as ChatGPT."
                },
                "source_url": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "uri"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "External conversation link used by Open the conversation. Not the app detail URL."
                },
                "type": {
                  "anyOf": [
                    {
                      "type": "string",
                      "enum": [
                        "goal_setup",
                        "check_in",
                        "review",
                        "open_coaching"
                      ],
                      "description": "Coaching session type: Goal setup, Check-in, Review or Open coaching. Separate from whether the session is still open."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "briefing_notes": {
                  "type": "string",
                  "description": "UI document: Briefing. Server-prepared coaching context."
                },
                "headline": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "One-line coaching-session summary used in session lists."
                },
                "summary_notes": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "UI document: Summary. Saved when the coaching session closes."
                },
                "started_at": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "ended_at": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "Closed when set; In progress when null. This is derived session state, not a stored status enum."
                },
                "url": {
                  "type": "string",
                  "format": "uri",
                  "description": "Internal app link to coaching session details; distinct from source_url."
                },
                "duration_minutes": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "actions_created": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "actions_reviewed": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                }
              },
              "required": [
                "id",
                "vendor",
                "source_url",
                "type",
                "briefing_notes",
                "headline",
                "summary_notes",
                "started_at",
                "ended_at",
                "url",
                "duration_minutes",
                "actions_created",
                "actions_reviewed"
              ],
              "additionalProperties": false
            },
            {
              "type": "null"
            }
          ]
        },
        "action_logs": {
          "type": "object",
          "properties": {
            "items": {
              "maxItems": 100,
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "action_id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "status": {
                    "type": "string",
                    "enum": [
                      "open",
                      "in_progress",
                      "done"
                    ],
                    "description": "Action status: Open, In progress or Done. The To do UI group includes Open and In progress; Overdue is derived, not a status."
                  },
                  "comment": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "session_id": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "recorded_at": {
                    "type": "string",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                  }
                },
                "required": [
                  "id",
                  "action_id",
                  "status",
                  "comment",
                  "session_id",
                  "recorded_at"
                ],
                "additionalProperties": false,
                "description": "Action log stored in action_logs. Records a status observation and optional comment. Action detail shows Comments, a filtered view rather than the complete status history; status and timestamps are immutable, and only the comment may be cleared."
              }
            },
            "next_cursor": {
              "anyOf": [
                {
                  "type": "string",
                  "minLength": 1
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "items",
            "next_cursor"
          ],
          "additionalProperties": false
        },
        "continuations": {
          "type": "object",
          "propertyNames": {
            "type": "string",
            "enum": [
              "cycles",
              "objectives",
              "results",
              "actions",
              "notes",
              "sessions",
              "result_logs",
              "habit_logs",
              "action_logs",
              "trend"
            ]
          },
          "additionalProperties": {
            "type": "string",
            "minLength": 1
          }
        }
      },
      "required": [
        "action",
        "cycle",
        "objective",
        "source_session",
        "action_logs",
        "continuations"
      ],
      "additionalProperties": false
    },
    "changed": {
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "entity": {
            "type": "string",
            "enum": [
              "user",
              "cycle",
              "objective",
              "result",
              "result_log",
              "action",
              "action_log",
              "session",
              "note",
              "habit_log"
            ]
          },
          "id": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
            "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
          }
        },
        "required": [
          "entity",
          "id"
        ],
        "additionalProperties": false
      }
    },
    "continuations": {
      "type": "object",
      "propertyNames": {
        "type": "string",
        "enum": [
          "cycles",
          "objectives",
          "results",
          "actions",
          "notes",
          "sessions",
          "result_logs",
          "habit_logs",
          "action_logs",
          "trend"
        ]
      },
      "additionalProperties": {
        "type": "string",
        "minLength": 1
      }
    }
  },
  "required": [
    "record",
    "changed",
    "continuations"
  ],
  "additionalProperties": false
}
Public MCP input/output shapes for comparison
[
  {
    "tool": "progress_record",
    "collection": "progress",
    "specification": "docs/feature-specs/F4-results.md#mcp-source-mapping--selected-target",
    "operation": "action",
    "binding": "planned",
    "mode": "adapted",
    "readiness": "contract-only",
    "services": [
      "action_logs.create"
    ],
    "gap": null,
    "projection": "Dispatch result evidence, habit day/comment and action outcome to their existing shared operations; project the affected record and changed IDs.",
    "input": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "anyOf": [
        {
          "anyOf": [
            {
              "type": "object",
              "properties": {
                "result_id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "value": {
                  "type": "number"
                },
                "comment": {
                  "type": "string",
                  "minLength": 1
                },
                "target": {
                  "type": "string",
                  "const": "result"
                }
              },
              "required": [
                "result_id",
                "target"
              ],
              "additionalProperties": false
            },
            {
              "type": "object",
              "properties": {
                "comment": {
                  "type": "string",
                  "minLength": 1
                },
                "result_id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "day": {
                  "type": "string",
                  "format": "date",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                  "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                },
                "marked": {
                  "type": "boolean",
                  "description": "Desired calendar state: true marks the day; false unmarks it. Not an append-only history event."
                },
                "target": {
                  "type": "string",
                  "const": "result"
                }
              },
              "required": [
                "result_id",
                "day",
                "marked",
                "target"
              ],
              "additionalProperties": false
            }
          ]
        },
        {
          "type": "object",
          "properties": {
            "action_id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "status": {
              "type": "string",
              "enum": [
                "open",
                "in_progress",
                "done"
              ],
              "description": "Action status: Open, In progress or Done. The To do UI group includes Open and In progress; Overdue is derived, not a status."
            },
            "comment": {
              "type": "string",
              "minLength": 1
            },
            "target": {
              "type": "string",
              "const": "action"
            }
          },
          "required": [
            "action_id",
            "status",
            "target"
          ],
          "additionalProperties": false
        }
      ]
    },
    "output": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "result": {
              "oneOf": [
                {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    "objective_id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    "title": {
                      "type": "string"
                    },
                    "description": {
                      "anyOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "metric_type": {
                      "type": "string",
                      "const": "number"
                    },
                    "start_value": {
                      "type": "number"
                    },
                    "target_value": {
                      "type": "number"
                    },
                    "unit": {
                      "anyOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "null"
                        }
                      ],
                      "description": "UI label: Unit. Used by Number and Performance results."
                    },
                    "cadence": {
                      "type": "null"
                    },
                    "per": {
                      "type": "null"
                    },
                    "since": {
                      "type": "null"
                    },
                    "status": {
                      "type": "string",
                      "enum": [
                        "in_progress",
                        "completed"
                      ],
                      "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                    },
                    "created_at": {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    "short_code": {
                      "type": "string",
                      "minLength": 1
                    },
                    "url": {
                      "type": "string",
                      "format": "uri"
                    },
                    "current_value": {
                      "type": "number",
                      "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                    },
                    "boundary_value": {
                      "type": "number"
                    },
                    "progress_pct": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "boundary_progress_pct": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "movement": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "movement_pp": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "evidence_count": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    "last_recorded_at": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "date-time",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "habit_expected_since_boundary": {
                      "anyOf": [
                        {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "habit_logs_since_boundary": {
                      "anyOf": [
                        {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "performance_share": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "id",
                    "objective_id",
                    "title",
                    "description",
                    "metric_type",
                    "start_value",
                    "target_value",
                    "unit",
                    "cadence",
                    "per",
                    "since",
                    "status",
                    "created_at",
                    "short_code",
                    "url",
                    "current_value",
                    "boundary_value",
                    "progress_pct",
                    "boundary_progress_pct",
                    "movement",
                    "movement_pp",
                    "evidence_count",
                    "last_recorded_at",
                    "habit_expected_since_boundary",
                    "habit_logs_since_boundary",
                    "performance_share"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    "objective_id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    "title": {
                      "type": "string"
                    },
                    "description": {
                      "anyOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "metric_type": {
                      "type": "string",
                      "const": "percentage"
                    },
                    "start_value": {
                      "type": "number",
                      "minimum": 0,
                      "maximum": 100
                    },
                    "target_value": {
                      "type": "number",
                      "minimum": 0,
                      "maximum": 100
                    },
                    "unit": {
                      "type": "null"
                    },
                    "cadence": {
                      "type": "null"
                    },
                    "per": {
                      "type": "null"
                    },
                    "since": {
                      "type": "null"
                    },
                    "status": {
                      "type": "string",
                      "enum": [
                        "in_progress",
                        "completed"
                      ],
                      "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                    },
                    "created_at": {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    "short_code": {
                      "type": "string",
                      "minLength": 1
                    },
                    "url": {
                      "type": "string",
                      "format": "uri"
                    },
                    "current_value": {
                      "type": "number",
                      "minimum": 0,
                      "maximum": 100
                    },
                    "boundary_value": {
                      "type": "number",
                      "minimum": 0,
                      "maximum": 100
                    },
                    "progress_pct": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "boundary_progress_pct": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "movement": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "movement_pp": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "evidence_count": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    "last_recorded_at": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "date-time",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "habit_expected_since_boundary": {
                      "anyOf": [
                        {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "habit_logs_since_boundary": {
                      "anyOf": [
                        {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "performance_share": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "id",
                    "objective_id",
                    "title",
                    "description",
                    "metric_type",
                    "start_value",
                    "target_value",
                    "unit",
                    "cadence",
                    "per",
                    "since",
                    "status",
                    "created_at",
                    "short_code",
                    "url",
                    "current_value",
                    "boundary_value",
                    "progress_pct",
                    "boundary_progress_pct",
                    "movement",
                    "movement_pp",
                    "evidence_count",
                    "last_recorded_at",
                    "habit_expected_since_boundary",
                    "habit_logs_since_boundary",
                    "performance_share"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    "objective_id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    "title": {
                      "type": "string"
                    },
                    "description": {
                      "anyOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "metric_type": {
                      "type": "string",
                      "const": "milestone"
                    },
                    "start_value": {
                      "type": "number",
                      "const": 0
                    },
                    "target_value": {
                      "type": "number",
                      "const": 1
                    },
                    "unit": {
                      "type": "null"
                    },
                    "cadence": {
                      "type": "null"
                    },
                    "per": {
                      "type": "null"
                    },
                    "since": {
                      "type": "null"
                    },
                    "status": {
                      "type": "string",
                      "enum": [
                        "in_progress",
                        "completed"
                      ],
                      "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                    },
                    "created_at": {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    "short_code": {
                      "type": "string",
                      "minLength": 1
                    },
                    "url": {
                      "type": "string",
                      "format": "uri"
                    },
                    "current_value": {
                      "anyOf": [
                        {
                          "type": "number",
                          "const": 0
                        },
                        {
                          "type": "number",
                          "const": 1
                        }
                      ]
                    },
                    "boundary_value": {
                      "anyOf": [
                        {
                          "type": "number",
                          "const": 0
                        },
                        {
                          "type": "number",
                          "const": 1
                        }
                      ]
                    },
                    "progress_pct": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "boundary_progress_pct": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "movement": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "movement_pp": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "evidence_count": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    "last_recorded_at": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "date-time",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "habit_expected_since_boundary": {
                      "anyOf": [
                        {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "habit_logs_since_boundary": {
                      "anyOf": [
                        {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "performance_share": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "id",
                    "objective_id",
                    "title",
                    "description",
                    "metric_type",
                    "start_value",
                    "target_value",
                    "unit",
                    "cadence",
                    "per",
                    "since",
                    "status",
                    "created_at",
                    "short_code",
                    "url",
                    "current_value",
                    "boundary_value",
                    "progress_pct",
                    "boundary_progress_pct",
                    "movement",
                    "movement_pp",
                    "evidence_count",
                    "last_recorded_at",
                    "habit_expected_since_boundary",
                    "habit_logs_since_boundary",
                    "performance_share"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    "objective_id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    "title": {
                      "type": "string"
                    },
                    "description": {
                      "anyOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "metric_type": {
                      "type": "string",
                      "const": "habit"
                    },
                    "start_value": {
                      "type": "number",
                      "const": 0
                    },
                    "target_value": {
                      "type": "number",
                      "const": 100
                    },
                    "unit": {
                      "type": "null"
                    },
                    "cadence": {
                      "type": "string",
                      "enum": [
                        "weekly",
                        "monthly"
                      ],
                      "description": "UI label: Cadence. Weekly or Monthly; per supplies the Times value."
                    },
                    "per": {
                      "type": "integer",
                      "exclusiveMinimum": 0,
                      "maximum": 9007199254740991
                    },
                    "since": {
                      "type": "string",
                      "format": "date",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                      "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                    },
                    "status": {
                      "type": "string",
                      "enum": [
                        "in_progress",
                        "completed"
                      ],
                      "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                    },
                    "created_at": {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    "short_code": {
                      "type": "string",
                      "minLength": 1
                    },
                    "url": {
                      "type": "string",
                      "format": "uri"
                    },
                    "current_value": {
                      "type": "number",
                      "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                    },
                    "boundary_value": {
                      "type": "number"
                    },
                    "progress_pct": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "boundary_progress_pct": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "movement": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "movement_pp": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "evidence_count": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    "last_recorded_at": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "date-time",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "habit_expected_since_boundary": {
                      "anyOf": [
                        {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "habit_logs_since_boundary": {
                      "anyOf": [
                        {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "performance_share": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "id",
                    "objective_id",
                    "title",
                    "description",
                    "metric_type",
                    "start_value",
                    "target_value",
                    "unit",
                    "cadence",
                    "per",
                    "since",
                    "status",
                    "created_at",
                    "short_code",
                    "url",
                    "current_value",
                    "boundary_value",
                    "progress_pct",
                    "boundary_progress_pct",
                    "movement",
                    "movement_pp",
                    "evidence_count",
                    "last_recorded_at",
                    "habit_expected_since_boundary",
                    "habit_logs_since_boundary",
                    "performance_share"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    "objective_id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    "title": {
                      "type": "string"
                    },
                    "description": {
                      "anyOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "metric_type": {
                      "type": "string",
                      "const": "performance"
                    },
                    "start_value": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ],
                      "description": "UI label: Start. Metric baseline; habit baselines are derived rather than stored."
                    },
                    "target_value": {
                      "type": "number"
                    },
                    "unit": {
                      "anyOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "null"
                        }
                      ],
                      "description": "UI label: Unit. Used by Number and Performance results."
                    },
                    "cadence": {
                      "type": "null"
                    },
                    "per": {
                      "type": "null"
                    },
                    "since": {
                      "type": "string",
                      "format": "date",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                      "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                    },
                    "status": {
                      "type": "string",
                      "enum": [
                        "in_progress",
                        "completed"
                      ],
                      "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                    },
                    "created_at": {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    "short_code": {
                      "type": "string",
                      "minLength": 1
                    },
                    "url": {
                      "type": "string",
                      "format": "uri"
                    },
                    "current_value": {
                      "type": "number",
                      "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                    },
                    "boundary_value": {
                      "type": "number"
                    },
                    "progress_pct": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "boundary_progress_pct": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "movement": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "movement_pp": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "evidence_count": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    "last_recorded_at": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "date-time",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "habit_expected_since_boundary": {
                      "anyOf": [
                        {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "habit_logs_since_boundary": {
                      "anyOf": [
                        {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "performance_share": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "id",
                    "objective_id",
                    "title",
                    "description",
                    "metric_type",
                    "start_value",
                    "target_value",
                    "unit",
                    "cadence",
                    "per",
                    "since",
                    "status",
                    "created_at",
                    "short_code",
                    "url",
                    "current_value",
                    "boundary_value",
                    "progress_pct",
                    "boundary_progress_pct",
                    "movement",
                    "movement_pp",
                    "evidence_count",
                    "last_recorded_at",
                    "habit_expected_since_boundary",
                    "habit_logs_since_boundary",
                    "performance_share"
                  ],
                  "additionalProperties": false
                }
              ]
            },
            "changed": {
              "maxItems": 100,
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "entity": {
                    "type": "string",
                    "enum": [
                      "user",
                      "cycle",
                      "objective",
                      "result",
                      "result_log",
                      "action",
                      "action_log",
                      "session",
                      "note",
                      "habit_log"
                    ]
                  },
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  }
                },
                "required": [
                  "entity",
                  "id"
                ],
                "additionalProperties": false
              }
            }
          },
          "required": [
            "result",
            "changed"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "action": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "cycle_id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "objective_id": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "title": {
                  "type": "string"
                },
                "description": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "due_at": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                      "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "UI label: Due. May be unset on a web draft; a set date cannot be cleared."
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "open",
                    "in_progress",
                    "done"
                  ],
                  "description": "Action status: Open, In progress or Done. The To do UI group includes Open and In progress; Overdue is derived, not a status."
                },
                "sort_order": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "Drag order within an action group; not a progress status."
                },
                "session_id": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "created_at": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                },
                "overdue": {
                  "type": "boolean"
                },
                "done_since_boundary": {
                  "type": "boolean"
                }
              },
              "required": [
                "id",
                "cycle_id",
                "objective_id",
                "title",
                "description",
                "due_at",
                "status",
                "sort_order",
                "session_id",
                "created_at",
                "url",
                "overdue",
                "done_since_boundary"
              ],
              "additionalProperties": false
            },
            "changed": {
              "maxItems": 100,
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "entity": {
                    "type": "string",
                    "enum": [
                      "user",
                      "cycle",
                      "objective",
                      "result",
                      "result_log",
                      "action",
                      "action_log",
                      "session",
                      "note",
                      "habit_log"
                    ]
                  },
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  }
                },
                "required": [
                  "entity",
                  "id"
                ],
                "additionalProperties": false
              }
            }
          },
          "required": [
            "action",
            "changed"
          ],
          "additionalProperties": false
        }
      ]
    }
  }
]
action_logs.list · read · contract-only

Feature declaration: listActionLogs

Requirement: docs/feature-specs/F5-actions.md · Access: retained-read

Tables: action_logs (read)

Trusted context: authenticated actor

Retry: Safe to retry with the same resolved filters and cursor.

Expected errors: UNAUTHORIZED, BAD_REQUEST, FORBIDDEN, NOT_FOUND, CONFLICT, NOT_IMPLEMENTED, INTERNAL_SERVER_ERROR

API consumers

[
  {
    "operation": "action_logs.list",
    "service": "action_logs.list",
    "binding": "bound"
  }
]

MCP consumers

[]

Service input

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "cursor": {
      "type": "string",
      "minLength": 1
    },
    "limit": {
      "default": 20,
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "action_id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
    }
  },
  "required": [
    "action_id"
  ],
  "additionalProperties": false
}

Service output

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "items": {
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
            "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
          },
          "action_id": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
            "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
          },
          "status": {
            "type": "string",
            "enum": [
              "open",
              "in_progress",
              "done"
            ],
            "description": "Action status: Open, In progress or Done. The To do UI group includes Open and In progress; Overdue is derived, not a status."
          },
          "comment": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "session_id": {
            "anyOf": [
              {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
              },
              {
                "type": "null"
              }
            ]
          },
          "recorded_at": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
          }
        },
        "required": [
          "id",
          "action_id",
          "status",
          "comment",
          "session_id",
          "recorded_at"
        ],
        "additionalProperties": false,
        "description": "Action log stored in action_logs. Records a status observation and optional comment. Action detail shows Comments, a filtered view rather than the complete status history; status and timestamps are immutable, and only the comment may be cleared."
      }
    },
    "next_cursor": {
      "anyOf": [
        {
          "type": "string",
          "minLength": 1
        },
        {
          "type": "null"
        }
      ]
    }
  },
  "required": [
    "items",
    "next_cursor"
  ],
  "additionalProperties": false
}
Public MCP input/output shapes for comparison
[]
action_logs.clear_comment · write · contract-only

Feature declaration: clearActionLogComment

Requirement: docs/feature-specs/F5-actions.md · Access: entitled-write

Tables: action_logs (write), actions (read), cycles (read), objectives (read), sessions (read)

Trusted context: authenticated actor

Retry: Inspect state after uncertain outcomes; never infer rollback from a response failure.

Expected errors: UNAUTHORIZED, BAD_REQUEST, FORBIDDEN, NOT_FOUND, CONFLICT, NOT_IMPLEMENTED, INTERNAL_SERVER_ERROR

API consumers

[
  {
    "operation": "action_logs.clear_comment",
    "service": "action_logs.clear_comment",
    "binding": "bound"
  }
]

MCP consumers

[]

Service input

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}

Service output

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "record": {
      "type": "object",
      "properties": {
        "action": {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "cycle_id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "objective_id": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                {
                  "type": "null"
                }
              ]
            },
            "title": {
              "type": "string"
            },
            "description": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ]
            },
            "due_at": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                  "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                },
                {
                  "type": "null"
                }
              ],
              "description": "UI label: Due. May be unset on a web draft; a set date cannot be cleared."
            },
            "status": {
              "type": "string",
              "enum": [
                "open",
                "in_progress",
                "done"
              ],
              "description": "Action status: Open, In progress or Done. The To do UI group includes Open and In progress; Overdue is derived, not a status."
            },
            "sort_order": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Drag order within an action group; not a progress status."
            },
            "session_id": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                {
                  "type": "null"
                }
              ]
            },
            "created_at": {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
            },
            "url": {
              "type": "string",
              "format": "uri"
            },
            "overdue": {
              "type": "boolean"
            },
            "done_since_boundary": {
              "type": "boolean"
            }
          },
          "required": [
            "id",
            "cycle_id",
            "objective_id",
            "title",
            "description",
            "due_at",
            "status",
            "sort_order",
            "session_id",
            "created_at",
            "url",
            "overdue",
            "done_since_boundary"
          ],
          "additionalProperties": false
        },
        "cycle": {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "intention": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "UI label: Intention. Optional guiding focus; the cycle is identified by its date range, not a name."
            },
            "start_at": {
              "type": "string",
              "format": "date",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
              "description": "UI label: Starts."
            },
            "end_at": {
              "type": "string",
              "format": "date",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
              "description": "UI label: Ends."
            },
            "status": {
              "type": "string",
              "enum": [
                "active",
                "archived"
              ]
            },
            "created_at": {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
            },
            "url": {
              "type": "string",
              "format": "uri"
            },
            "achievement_pct": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "null"
                }
              ],
              "description": "UI label: Achievement. Derived from objective progress; unavailable when nothing is measurable."
            },
            "time_gone_pct": {
              "type": "number",
              "minimum": 0,
              "maximum": 100,
              "description": "UI label: Time gone. Derived percentage of the cycle elapsed."
            },
            "length_weeks": {
              "type": "integer",
              "minimum": -9007199254740991,
              "maximum": 9007199254740991,
              "description": "UI label: Length, in weeks; derived from Starts and Ends."
            }
          },
          "required": [
            "id",
            "intention",
            "start_at",
            "end_at",
            "status",
            "created_at",
            "url",
            "achievement_pct",
            "time_gone_pct",
            "length_weeks"
          ],
          "additionalProperties": false
        },
        "objective": {
          "anyOf": [
            {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "cycle_id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "title": {
                  "type": "string"
                },
                "description": {
                  "type": "string"
                },
                "deadline_at": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                      "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "UI label: Deadline; null when no deadline has been set."
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "on_track",
                    "off_track",
                    "completed"
                  ],
                  "description": "Objective status: On track, Off track or Completed. Coaching judgment, independent of the derived Progress percentage."
                },
                "created_at": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "short_code": {
                  "type": "string",
                  "minLength": 1
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                },
                "progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "UI label: Progress. Derived from measurable results, independently of Status."
                },
                "boundary_progress_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "Historical progress at the resolved last-session boundary; not current Progress."
                },
                "movement_pp": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "id",
                "cycle_id",
                "title",
                "description",
                "deadline_at",
                "status",
                "created_at",
                "short_code",
                "url",
                "progress_pct",
                "boundary_progress_pct",
                "movement_pp"
              ],
              "additionalProperties": false
            },
            {
              "type": "null"
            }
          ]
        },
        "source_session": {
          "anyOf": [
            {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "vendor": {
                  "type": "string",
                  "enum": [
                    "claude",
                    "openai"
                  ],
                  "description": "Conversation host: claude is shown as Claude; openai is shown as ChatGPT."
                },
                "source_url": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "uri"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "External conversation link used by Open the conversation. Not the app detail URL."
                },
                "type": {
                  "anyOf": [
                    {
                      "type": "string",
                      "enum": [
                        "goal_setup",
                        "check_in",
                        "review",
                        "open_coaching"
                      ],
                      "description": "Coaching session type: Goal setup, Check-in, Review or Open coaching. Separate from whether the session is still open."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "briefing_notes": {
                  "type": "string",
                  "description": "UI document: Briefing. Server-prepared coaching context."
                },
                "headline": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "One-line coaching-session summary used in session lists."
                },
                "summary_notes": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "UI document: Summary. Saved when the coaching session closes."
                },
                "started_at": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "ended_at": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "Closed when set; In progress when null. This is derived session state, not a stored status enum."
                },
                "url": {
                  "type": "string",
                  "format": "uri",
                  "description": "Internal app link to coaching session details; distinct from source_url."
                },
                "duration_minutes": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "actions_created": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "actions_reviewed": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                }
              },
              "required": [
                "id",
                "vendor",
                "source_url",
                "type",
                "briefing_notes",
                "headline",
                "summary_notes",
                "started_at",
                "ended_at",
                "url",
                "duration_minutes",
                "actions_created",
                "actions_reviewed"
              ],
              "additionalProperties": false
            },
            {
              "type": "null"
            }
          ]
        },
        "action_logs": {
          "type": "object",
          "properties": {
            "items": {
              "maxItems": 100,
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "action_id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "status": {
                    "type": "string",
                    "enum": [
                      "open",
                      "in_progress",
                      "done"
                    ],
                    "description": "Action status: Open, In progress or Done. The To do UI group includes Open and In progress; Overdue is derived, not a status."
                  },
                  "comment": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "session_id": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "recorded_at": {
                    "type": "string",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                  }
                },
                "required": [
                  "id",
                  "action_id",
                  "status",
                  "comment",
                  "session_id",
                  "recorded_at"
                ],
                "additionalProperties": false,
                "description": "Action log stored in action_logs. Records a status observation and optional comment. Action detail shows Comments, a filtered view rather than the complete status history; status and timestamps are immutable, and only the comment may be cleared."
              }
            },
            "next_cursor": {
              "anyOf": [
                {
                  "type": "string",
                  "minLength": 1
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "items",
            "next_cursor"
          ],
          "additionalProperties": false
        },
        "continuations": {
          "type": "object",
          "propertyNames": {
            "type": "string",
            "enum": [
              "cycles",
              "objectives",
              "results",
              "actions",
              "notes",
              "sessions",
              "result_logs",
              "habit_logs",
              "action_logs",
              "trend"
            ]
          },
          "additionalProperties": {
            "type": "string",
            "minLength": 1
          }
        }
      },
      "required": [
        "action",
        "cycle",
        "objective",
        "source_session",
        "action_logs",
        "continuations"
      ],
      "additionalProperties": false
    },
    "changed": {
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "entity": {
            "type": "string",
            "enum": [
              "user",
              "cycle",
              "objective",
              "result",
              "result_log",
              "action",
              "action_log",
              "session",
              "note",
              "habit_log"
            ]
          },
          "id": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
            "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
          }
        },
        "required": [
          "entity",
          "id"
        ],
        "additionalProperties": false
      }
    },
    "continuations": {
      "type": "object",
      "propertyNames": {
        "type": "string",
        "enum": [
          "cycles",
          "objectives",
          "results",
          "actions",
          "notes",
          "sessions",
          "result_logs",
          "habit_logs",
          "action_logs",
          "trend"
        ]
      },
      "additionalProperties": {
        "type": "string",
        "minLength": 1
      }
    }
  },
  "required": [
    "record",
    "changed",
    "continuations"
  ],
  "additionalProperties": false
}
Public MCP input/output shapes for comparison
[]
notes.preview_deletion · write · contract-only

Feature declaration: previewNoteDeletion

Requirement: docs/feature-specs/F6-notes.md · Access: entitled-write

Tables: notes (read)

Trusted context: authenticated actor

Retry: Preview does not authorize deletion. Commit rechecks actor, target, impact, expiry and application approval; incomplete impact fails closed.

Expected errors: UNAUTHORIZED, BAD_REQUEST, FORBIDDEN, NOT_FOUND, CONFLICT, NOT_IMPLEMENTED, INTERNAL_SERVER_ERROR

API consumers

[
  {
    "operation": "notes.preview_deletion",
    "service": "notes.preview_deletion",
    "binding": "bound"
  }
]

MCP consumers

[
  {
    "tool": "note_delete",
    "collection": "notes",
    "specification": "docs/feature-specs/F6-notes.md#mcp-source-mapping--selected-target",
    "operation": "preview",
    "binding": "planned",
    "mode": "adapted",
    "readiness": "contract-only",
    "services": [
      "notes.preview_deletion"
    ],
    "gap": null,
    "projection": "Project record and changed on writes; list preserves its resolved window; get returns note only."
  }
]

Service input

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}

Service output

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "operation": {
      "type": "string",
      "const": "preview"
    },
    "preview_id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
    },
    "expires_at": {
      "type": "string",
      "format": "date-time",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
    },
    "target": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
        },
        "text": {
          "type": "string",
          "minLength": 1
        }
      },
      "required": [
        "id",
        "text"
      ],
      "additionalProperties": false
    },
    "deleted": {
      "type": "object",
      "properties": {
        "notes": {
          "type": "number",
          "const": 1
        }
      },
      "required": [
        "notes"
      ],
      "additionalProperties": false
    },
    "approval": {
      "type": "object",
      "properties": {
        "status": {
          "type": "string",
          "const": "required"
        },
        "url": {
          "type": "string",
          "format": "uri"
        }
      },
      "required": [
        "status",
        "url"
      ],
      "additionalProperties": false
    }
  },
  "required": [
    "operation",
    "preview_id",
    "expires_at",
    "target",
    "deleted",
    "approval"
  ],
  "additionalProperties": false
}
Public MCP input/output shapes for comparison
[
  {
    "tool": "note_delete",
    "collection": "notes",
    "specification": "docs/feature-specs/F6-notes.md#mcp-source-mapping--selected-target",
    "operation": "preview",
    "binding": "planned",
    "mode": "adapted",
    "readiness": "contract-only",
    "services": [
      "notes.preview_deletion"
    ],
    "gap": null,
    "projection": "Project record and changed on writes; list preserves its resolved window; get returns note only.",
    "input": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "oneOf": [
        {
          "type": "object",
          "properties": {
            "operation": {
              "type": "string",
              "const": "preview"
            },
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Exact owned record UUID. Resolve ambiguous targets before requesting impact."
            }
          },
          "required": [
            "operation",
            "id"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "operation": {
              "type": "string",
              "const": "commit"
            },
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "preview_id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Server preview ID for this target. Not consent: genuine approval must already be recorded by the trusted application."
            }
          },
          "required": [
            "operation",
            "id",
            "preview_id"
          ],
          "additionalProperties": false
        }
      ]
    },
    "output": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "oneOf": [
        {
          "type": "object",
          "properties": {
            "operation": {
              "type": "string",
              "const": "preview"
            },
            "preview_id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "expires_at": {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
            },
            "target": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "text": {
                  "type": "string",
                  "minLength": 1
                }
              },
              "required": [
                "id",
                "text"
              ],
              "additionalProperties": false
            },
            "deleted": {
              "type": "object",
              "properties": {
                "notes": {
                  "type": "number",
                  "const": 1
                }
              },
              "required": [
                "notes"
              ],
              "additionalProperties": false
            },
            "approval": {
              "type": "object",
              "properties": {
                "status": {
                  "type": "string",
                  "const": "required"
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                }
              },
              "required": [
                "status",
                "url"
              ],
              "additionalProperties": false
            }
          },
          "required": [
            "operation",
            "preview_id",
            "expires_at",
            "target",
            "deleted",
            "approval"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "operation": {
              "type": "string",
              "const": "commit"
            },
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            }
          },
          "required": [
            "operation",
            "id"
          ],
          "additionalProperties": false
        }
      ]
    }
  }
]
notes.create · write · contract-only

Feature declaration: addNote

Requirement: docs/feature-specs/F6-notes.md · Access: entitled-write

Tables: notes (write), idempotency_keys (write)

Trusted context: authenticated actor

Retry: API requires client-key replay; unkeyed MCP calls must inspect state after an uncertain outcome.

Expected errors: UNAUTHORIZED, BAD_REQUEST, FORBIDDEN, NOT_FOUND, CONFLICT, NOT_IMPLEMENTED, INTERNAL_SERVER_ERROR

API consumers

[
  {
    "operation": "notes.create",
    "service": "notes.create",
    "binding": "bound"
  }
]

MCP consumers

[
  {
    "tool": "note_write",
    "collection": "notes",
    "specification": "docs/feature-specs/F6-notes.md#mcp-source-mapping--selected-target",
    "operation": "create",
    "binding": "planned",
    "mode": "adapted",
    "readiness": "contract-only",
    "services": [
      "notes.create"
    ],
    "gap": null,
    "projection": "Project record and changed on writes; list preserves its resolved window; get returns note only."
  }
]

Service input

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "anyOf": [
    {
      "type": "object",
      "properties": {
        "text": {
          "type": "string",
          "minLength": 1
        },
        "idempotency_key": {
          "type": "string",
          "minLength": 1,
          "maxLength": 255
        }
      },
      "required": [
        "text",
        "idempotency_key"
      ],
      "additionalProperties": false
    },
    {
      "type": "object",
      "properties": {
        "text": {
          "type": "string",
          "minLength": 1
        }
      },
      "required": [
        "text"
      ],
      "additionalProperties": false
    }
  ]
}

Service output

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "record": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
        },
        "text": {
          "type": "string",
          "minLength": 1
        },
        "recorded_at": {
          "type": "string",
          "format": "date-time",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
        },
        "url": {
          "type": "string",
          "format": "uri"
        },
        "since_boundary": {
          "type": "boolean"
        }
      },
      "required": [
        "id",
        "text",
        "recorded_at",
        "url",
        "since_boundary"
      ],
      "additionalProperties": false
    },
    "changed": {
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "entity": {
            "type": "string",
            "enum": [
              "user",
              "cycle",
              "objective",
              "result",
              "result_log",
              "action",
              "action_log",
              "session",
              "note",
              "habit_log"
            ]
          },
          "id": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
            "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
          }
        },
        "required": [
          "entity",
          "id"
        ],
        "additionalProperties": false
      }
    },
    "continuations": {
      "type": "object",
      "propertyNames": {
        "type": "string",
        "enum": [
          "cycles",
          "objectives",
          "results",
          "actions",
          "notes",
          "sessions",
          "result_logs",
          "habit_logs",
          "action_logs",
          "trend"
        ]
      },
      "additionalProperties": {
        "type": "string",
        "minLength": 1
      }
    }
  },
  "required": [
    "record",
    "changed",
    "continuations"
  ],
  "additionalProperties": false
}
Public MCP input/output shapes for comparison
[
  {
    "tool": "note_write",
    "collection": "notes",
    "specification": "docs/feature-specs/F6-notes.md#mcp-source-mapping--selected-target",
    "operation": "create",
    "binding": "planned",
    "mode": "adapted",
    "readiness": "contract-only",
    "services": [
      "notes.create"
    ],
    "gap": null,
    "projection": "Project record and changed on writes; list preserves its resolved window; get returns note only.",
    "input": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "oneOf": [
        {
          "type": "object",
          "properties": {
            "text": {
              "type": "string",
              "minLength": 1
            },
            "operation": {
              "type": "string",
              "const": "create"
            }
          },
          "required": [
            "text",
            "operation"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "text": {
              "type": "string",
              "minLength": 1
            },
            "operation": {
              "type": "string",
              "const": "update"
            }
          },
          "required": [
            "id",
            "text",
            "operation"
          ],
          "additionalProperties": false
        }
      ]
    },
    "output": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "note": {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "text": {
              "type": "string",
              "minLength": 1
            },
            "recorded_at": {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
            },
            "url": {
              "type": "string",
              "format": "uri"
            },
            "since_boundary": {
              "type": "boolean"
            }
          },
          "required": [
            "id",
            "text",
            "recorded_at",
            "url",
            "since_boundary"
          ],
          "additionalProperties": false
        },
        "changed": {
          "maxItems": 100,
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "entity": {
                "type": "string",
                "enum": [
                  "user",
                  "cycle",
                  "objective",
                  "result",
                  "result_log",
                  "action",
                  "action_log",
                  "session",
                  "note",
                  "habit_log"
                ]
              },
              "id": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
              }
            },
            "required": [
              "entity",
              "id"
            ],
            "additionalProperties": false
          }
        }
      },
      "required": [
        "note",
        "changed"
      ],
      "additionalProperties": false
    }
  }
]
notes.update · write · contract-only

Feature declaration: updateNote

Requirement: docs/feature-specs/F6-notes.md · Access: entitled-write

Tables: notes (write)

Trusted context: authenticated actor

Retry: Inspect state after uncertain outcomes; never infer rollback from a response failure.

Expected errors: UNAUTHORIZED, BAD_REQUEST, FORBIDDEN, NOT_FOUND, CONFLICT, NOT_IMPLEMENTED, INTERNAL_SERVER_ERROR

API consumers

[
  {
    "operation": "notes.update",
    "service": "notes.update",
    "binding": "bound"
  }
]

MCP consumers

[
  {
    "tool": "note_write",
    "collection": "notes",
    "specification": "docs/feature-specs/F6-notes.md#mcp-source-mapping--selected-target",
    "operation": "update",
    "binding": "planned",
    "mode": "adapted",
    "readiness": "contract-only",
    "services": [
      "notes.update"
    ],
    "gap": null,
    "projection": "Project record and changed on writes; list preserves its resolved window; get returns note only."
  }
]

Service input

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
    },
    "text": {
      "type": "string",
      "minLength": 1
    }
  },
  "required": [
    "id",
    "text"
  ],
  "additionalProperties": false
}

Service output

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "record": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
        },
        "text": {
          "type": "string",
          "minLength": 1
        },
        "recorded_at": {
          "type": "string",
          "format": "date-time",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
        },
        "url": {
          "type": "string",
          "format": "uri"
        },
        "since_boundary": {
          "type": "boolean"
        }
      },
      "required": [
        "id",
        "text",
        "recorded_at",
        "url",
        "since_boundary"
      ],
      "additionalProperties": false
    },
    "changed": {
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "entity": {
            "type": "string",
            "enum": [
              "user",
              "cycle",
              "objective",
              "result",
              "result_log",
              "action",
              "action_log",
              "session",
              "note",
              "habit_log"
            ]
          },
          "id": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
            "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
          }
        },
        "required": [
          "entity",
          "id"
        ],
        "additionalProperties": false
      }
    },
    "continuations": {
      "type": "object",
      "propertyNames": {
        "type": "string",
        "enum": [
          "cycles",
          "objectives",
          "results",
          "actions",
          "notes",
          "sessions",
          "result_logs",
          "habit_logs",
          "action_logs",
          "trend"
        ]
      },
      "additionalProperties": {
        "type": "string",
        "minLength": 1
      }
    }
  },
  "required": [
    "record",
    "changed",
    "continuations"
  ],
  "additionalProperties": false
}
Public MCP input/output shapes for comparison
[
  {
    "tool": "note_write",
    "collection": "notes",
    "specification": "docs/feature-specs/F6-notes.md#mcp-source-mapping--selected-target",
    "operation": "update",
    "binding": "planned",
    "mode": "adapted",
    "readiness": "contract-only",
    "services": [
      "notes.update"
    ],
    "gap": null,
    "projection": "Project record and changed on writes; list preserves its resolved window; get returns note only.",
    "input": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "oneOf": [
        {
          "type": "object",
          "properties": {
            "text": {
              "type": "string",
              "minLength": 1
            },
            "operation": {
              "type": "string",
              "const": "create"
            }
          },
          "required": [
            "text",
            "operation"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "text": {
              "type": "string",
              "minLength": 1
            },
            "operation": {
              "type": "string",
              "const": "update"
            }
          },
          "required": [
            "id",
            "text",
            "operation"
          ],
          "additionalProperties": false
        }
      ]
    },
    "output": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "note": {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "text": {
              "type": "string",
              "minLength": 1
            },
            "recorded_at": {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
            },
            "url": {
              "type": "string",
              "format": "uri"
            },
            "since_boundary": {
              "type": "boolean"
            }
          },
          "required": [
            "id",
            "text",
            "recorded_at",
            "url",
            "since_boundary"
          ],
          "additionalProperties": false
        },
        "changed": {
          "maxItems": 100,
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "entity": {
                "type": "string",
                "enum": [
                  "user",
                  "cycle",
                  "objective",
                  "result",
                  "result_log",
                  "action",
                  "action_log",
                  "session",
                  "note",
                  "habit_log"
                ]
              },
              "id": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
              }
            },
            "required": [
              "entity",
              "id"
            ],
            "additionalProperties": false
          }
        }
      },
      "required": [
        "note",
        "changed"
      ],
      "additionalProperties": false
    }
  }
]
notes.list · read · contract-only

Feature declaration: listNotes

Requirement: docs/feature-specs/F6-notes.md · Access: retained-read

Tables: notes (read)

Trusted context: authenticated actor

Retry: Safe to retry with the same resolved filters and cursor.

Expected errors: UNAUTHORIZED, BAD_REQUEST, FORBIDDEN, NOT_FOUND, CONFLICT, NOT_IMPLEMENTED, INTERNAL_SERVER_ERROR

API consumers

[
  {
    "operation": "notes.list",
    "service": "notes.list",
    "binding": "bound"
  }
]

MCP consumers

[
  {
    "tool": "note_read",
    "collection": "notes",
    "specification": "docs/feature-specs/F6-notes.md#mcp-source-mapping--selected-target",
    "operation": "list",
    "binding": "planned",
    "mode": "adapted",
    "readiness": "contract-only",
    "services": [
      "notes.list"
    ],
    "gap": null,
    "projection": "Project record and changed on writes; list preserves its resolved window; get returns note only."
  }
]

Service input

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "cursor": {
      "type": "string",
      "minLength": 1
    },
    "limit": {
      "default": 20,
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "window": {
      "type": "object",
      "properties": {
        "since": {
          "description": "Inclusive lower bound. Default: last completed session, falling back to active-cycle start. Date-only values use the profile timezone.",
          "anyOf": [
            {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                  "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                },
                {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                }
              ]
            },
            {
              "type": "string",
              "enum": [
                "last_session",
                "cycle_start"
              ]
            }
          ]
        },
        "until": {
          "description": "Exclusive upper bound; default is the server time captured on the first page.",
          "anyOf": [
            {
              "type": "string",
              "format": "date",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
              "description": "Calendar date as YYYY-MM-DD in the profile timezone."
            },
            {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
            }
          ]
        }
      },
      "additionalProperties": false
    }
  },
  "additionalProperties": false
}

Service output

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "items": {
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
            "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
          },
          "text": {
            "type": "string",
            "minLength": 1
          },
          "recorded_at": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "since_boundary": {
            "type": "boolean"
          }
        },
        "required": [
          "id",
          "text",
          "recorded_at",
          "url",
          "since_boundary"
        ],
        "additionalProperties": false
      }
    },
    "next_cursor": {
      "anyOf": [
        {
          "type": "string",
          "minLength": 1
        },
        {
          "type": "null"
        }
      ]
    },
    "window": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "since": {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
            },
            "until": {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
            }
          },
          "required": [
            "since",
            "until"
          ],
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ]
    }
  },
  "required": [
    "items",
    "next_cursor",
    "window"
  ],
  "additionalProperties": false
}
Public MCP input/output shapes for comparison
[
  {
    "tool": "note_read",
    "collection": "notes",
    "specification": "docs/feature-specs/F6-notes.md#mcp-source-mapping--selected-target",
    "operation": "list",
    "binding": "planned",
    "mode": "adapted",
    "readiness": "contract-only",
    "services": [
      "notes.list"
    ],
    "gap": null,
    "projection": "Project record and changed on writes; list preserves its resolved window; get returns note only.",
    "input": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "oneOf": [
        {
          "type": "object",
          "properties": {
            "cursor": {
              "type": "string",
              "minLength": 1
            },
            "limit": {
              "default": 20,
              "type": "integer",
              "minimum": 1,
              "maximum": 100
            },
            "window": {
              "type": "object",
              "properties": {
                "since": {
                  "description": "Inclusive lower bound. Default: last completed session, falling back to active-cycle start. Date-only values use the profile timezone.",
                  "anyOf": [
                    {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "date",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                          "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                        },
                        {
                          "type": "string",
                          "format": "date-time",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                        }
                      ]
                    },
                    {
                      "type": "string",
                      "enum": [
                        "last_session",
                        "cycle_start"
                      ]
                    }
                  ]
                },
                "until": {
                  "description": "Exclusive upper bound; default is the server time captured on the first page.",
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                      "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                    },
                    {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    }
                  ]
                }
              },
              "additionalProperties": false
            },
            "operation": {
              "type": "string",
              "const": "list"
            }
          },
          "required": [
            "operation"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "operation": {
              "type": "string",
              "const": "get"
            }
          },
          "required": [
            "id",
            "operation"
          ],
          "additionalProperties": false
        }
      ]
    },
    "output": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "items": {
              "maxItems": 100,
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "text": {
                    "type": "string",
                    "minLength": 1
                  },
                  "recorded_at": {
                    "type": "string",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                  },
                  "url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "since_boundary": {
                    "type": "boolean"
                  }
                },
                "required": [
                  "id",
                  "text",
                  "recorded_at",
                  "url",
                  "since_boundary"
                ],
                "additionalProperties": false
              }
            },
            "next_cursor": {
              "anyOf": [
                {
                  "type": "string",
                  "minLength": 1
                },
                {
                  "type": "null"
                }
              ]
            },
            "continuation": {
              "anyOf": [
                {
                  "type": "object",
                  "properties": {
                    "tool": {
                      "type": "string",
                      "const": "note_read"
                    },
                    "arguments": {
                      "type": "object",
                      "properties": {
                        "cursor": {
                          "type": "string",
                          "minLength": 1
                        },
                        "limit": {
                          "type": "integer",
                          "minimum": 1,
                          "maximum": 100
                        },
                        "window": {
                          "type": "object",
                          "properties": {
                            "since": {
                              "type": "string",
                              "format": "date-time",
                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                            },
                            "until": {
                              "type": "string",
                              "format": "date-time",
                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                            }
                          },
                          "required": [
                            "since",
                            "until"
                          ],
                          "additionalProperties": false
                        },
                        "operation": {
                          "type": "string",
                          "const": "list"
                        }
                      },
                      "required": [
                        "cursor",
                        "limit",
                        "operation"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "required": [
                    "tool",
                    "arguments"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "null"
                }
              ]
            },
            "operation": {
              "type": "string",
              "const": "list"
            },
            "window": {
              "anyOf": [
                {
                  "type": "object",
                  "properties": {
                    "since": {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    "until": {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    }
                  },
                  "required": [
                    "since",
                    "until"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "items",
            "next_cursor",
            "continuation",
            "operation",
            "window"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "operation": {
              "type": "string",
              "const": "get"
            },
            "note": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "text": {
                  "type": "string",
                  "minLength": 1
                },
                "recorded_at": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                },
                "since_boundary": {
                  "type": "boolean"
                }
              },
              "required": [
                "id",
                "text",
                "recorded_at",
                "url",
                "since_boundary"
              ],
              "additionalProperties": false
            }
          },
          "required": [
            "operation",
            "note"
          ],
          "additionalProperties": false
        }
      ]
    }
  }
]
notes.get · read · contract-only

Feature declaration: getNote

Requirement: docs/feature-specs/F6-notes.md · Access: retained-read

Tables: notes (read)

Trusted context: authenticated actor

Retry: Safe to retry with the same resolved filters and cursor.

Expected errors: UNAUTHORIZED, BAD_REQUEST, FORBIDDEN, NOT_FOUND, CONFLICT, NOT_IMPLEMENTED, INTERNAL_SERVER_ERROR

API consumers

[
  {
    "operation": "notes.get",
    "service": "notes.get",
    "binding": "bound"
  }
]

MCP consumers

[
  {
    "tool": "note_read",
    "collection": "notes",
    "specification": "docs/feature-specs/F6-notes.md#mcp-source-mapping--selected-target",
    "operation": "get",
    "binding": "planned",
    "mode": "adapted",
    "readiness": "contract-only",
    "services": [
      "notes.get"
    ],
    "gap": null,
    "projection": "Project record and changed on writes; list preserves its resolved window; get returns note only."
  }
]

Service input

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}

Service output

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
    },
    "text": {
      "type": "string",
      "minLength": 1
    },
    "recorded_at": {
      "type": "string",
      "format": "date-time",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
    },
    "url": {
      "type": "string",
      "format": "uri"
    },
    "since_boundary": {
      "type": "boolean"
    }
  },
  "required": [
    "id",
    "text",
    "recorded_at",
    "url",
    "since_boundary"
  ],
  "additionalProperties": false
}
Public MCP input/output shapes for comparison
[
  {
    "tool": "note_read",
    "collection": "notes",
    "specification": "docs/feature-specs/F6-notes.md#mcp-source-mapping--selected-target",
    "operation": "get",
    "binding": "planned",
    "mode": "adapted",
    "readiness": "contract-only",
    "services": [
      "notes.get"
    ],
    "gap": null,
    "projection": "Project record and changed on writes; list preserves its resolved window; get returns note only.",
    "input": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "oneOf": [
        {
          "type": "object",
          "properties": {
            "cursor": {
              "type": "string",
              "minLength": 1
            },
            "limit": {
              "default": 20,
              "type": "integer",
              "minimum": 1,
              "maximum": 100
            },
            "window": {
              "type": "object",
              "properties": {
                "since": {
                  "description": "Inclusive lower bound. Default: last completed session, falling back to active-cycle start. Date-only values use the profile timezone.",
                  "anyOf": [
                    {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "date",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                          "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                        },
                        {
                          "type": "string",
                          "format": "date-time",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                        }
                      ]
                    },
                    {
                      "type": "string",
                      "enum": [
                        "last_session",
                        "cycle_start"
                      ]
                    }
                  ]
                },
                "until": {
                  "description": "Exclusive upper bound; default is the server time captured on the first page.",
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                      "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                    },
                    {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    }
                  ]
                }
              },
              "additionalProperties": false
            },
            "operation": {
              "type": "string",
              "const": "list"
            }
          },
          "required": [
            "operation"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "operation": {
              "type": "string",
              "const": "get"
            }
          },
          "required": [
            "id",
            "operation"
          ],
          "additionalProperties": false
        }
      ]
    },
    "output": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "items": {
              "maxItems": 100,
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "text": {
                    "type": "string",
                    "minLength": 1
                  },
                  "recorded_at": {
                    "type": "string",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                  },
                  "url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "since_boundary": {
                    "type": "boolean"
                  }
                },
                "required": [
                  "id",
                  "text",
                  "recorded_at",
                  "url",
                  "since_boundary"
                ],
                "additionalProperties": false
              }
            },
            "next_cursor": {
              "anyOf": [
                {
                  "type": "string",
                  "minLength": 1
                },
                {
                  "type": "null"
                }
              ]
            },
            "continuation": {
              "anyOf": [
                {
                  "type": "object",
                  "properties": {
                    "tool": {
                      "type": "string",
                      "const": "note_read"
                    },
                    "arguments": {
                      "type": "object",
                      "properties": {
                        "cursor": {
                          "type": "string",
                          "minLength": 1
                        },
                        "limit": {
                          "type": "integer",
                          "minimum": 1,
                          "maximum": 100
                        },
                        "window": {
                          "type": "object",
                          "properties": {
                            "since": {
                              "type": "string",
                              "format": "date-time",
                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                            },
                            "until": {
                              "type": "string",
                              "format": "date-time",
                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                            }
                          },
                          "required": [
                            "since",
                            "until"
                          ],
                          "additionalProperties": false
                        },
                        "operation": {
                          "type": "string",
                          "const": "list"
                        }
                      },
                      "required": [
                        "cursor",
                        "limit",
                        "operation"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "required": [
                    "tool",
                    "arguments"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "null"
                }
              ]
            },
            "operation": {
              "type": "string",
              "const": "list"
            },
            "window": {
              "anyOf": [
                {
                  "type": "object",
                  "properties": {
                    "since": {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    "until": {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    }
                  },
                  "required": [
                    "since",
                    "until"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "items",
            "next_cursor",
            "continuation",
            "operation",
            "window"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "operation": {
              "type": "string",
              "const": "get"
            },
            "note": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "text": {
                  "type": "string",
                  "minLength": 1
                },
                "recorded_at": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                },
                "since_boundary": {
                  "type": "boolean"
                }
              },
              "required": [
                "id",
                "text",
                "recorded_at",
                "url",
                "since_boundary"
              ],
              "additionalProperties": false
            }
          },
          "required": [
            "operation",
            "note"
          ],
          "additionalProperties": false
        }
      ]
    }
  }
]
notes.delete · delete · contract-only

Feature declaration: deleteNote

Requirement: docs/feature-specs/F6-notes.md · Access: entitled-write

Tables: notes (delete)

Trusted context: authenticated actor

Retry: Inspect state after uncertain outcomes; never infer rollback from a response failure.

Expected errors: UNAUTHORIZED, BAD_REQUEST, FORBIDDEN, NOT_FOUND, CONFLICT, NOT_IMPLEMENTED, INTERNAL_SERVER_ERROR

API consumers

[
  {
    "operation": "notes.delete",
    "service": "notes.delete",
    "binding": "bound"
  }
]

MCP consumers

[
  {
    "tool": "note_delete",
    "collection": "notes",
    "specification": "docs/feature-specs/F6-notes.md#mcp-source-mapping--selected-target",
    "operation": "commit",
    "binding": "planned",
    "mode": "adapted",
    "readiness": "contract-only",
    "services": [
      "notes.delete"
    ],
    "gap": null,
    "projection": "Project record and changed on writes; list preserves its resolved window; get returns note only."
  }
]

Service input

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
    },
    "preview_id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "Server impact preview ID; trusted application approval must already exist."
    }
  },
  "required": [
    "id",
    "preview_id"
  ],
  "additionalProperties": false
}

Service output

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}
Public MCP input/output shapes for comparison
[
  {
    "tool": "note_delete",
    "collection": "notes",
    "specification": "docs/feature-specs/F6-notes.md#mcp-source-mapping--selected-target",
    "operation": "commit",
    "binding": "planned",
    "mode": "adapted",
    "readiness": "contract-only",
    "services": [
      "notes.delete"
    ],
    "gap": null,
    "projection": "Project record and changed on writes; list preserves its resolved window; get returns note only.",
    "input": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "oneOf": [
        {
          "type": "object",
          "properties": {
            "operation": {
              "type": "string",
              "const": "preview"
            },
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Exact owned record UUID. Resolve ambiguous targets before requesting impact."
            }
          },
          "required": [
            "operation",
            "id"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "operation": {
              "type": "string",
              "const": "commit"
            },
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "preview_id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Server preview ID for this target. Not consent: genuine approval must already be recorded by the trusted application."
            }
          },
          "required": [
            "operation",
            "id",
            "preview_id"
          ],
          "additionalProperties": false
        }
      ]
    },
    "output": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "oneOf": [
        {
          "type": "object",
          "properties": {
            "operation": {
              "type": "string",
              "const": "preview"
            },
            "preview_id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "expires_at": {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
            },
            "target": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "text": {
                  "type": "string",
                  "minLength": 1
                }
              },
              "required": [
                "id",
                "text"
              ],
              "additionalProperties": false
            },
            "deleted": {
              "type": "object",
              "properties": {
                "notes": {
                  "type": "number",
                  "const": 1
                }
              },
              "required": [
                "notes"
              ],
              "additionalProperties": false
            },
            "approval": {
              "type": "object",
              "properties": {
                "status": {
                  "type": "string",
                  "const": "required"
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                }
              },
              "required": [
                "status",
                "url"
              ],
              "additionalProperties": false
            }
          },
          "required": [
            "operation",
            "preview_id",
            "expires_at",
            "target",
            "deleted",
            "approval"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "operation": {
              "type": "string",
              "const": "commit"
            },
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            }
          },
          "required": [
            "operation",
            "id"
          ],
          "additionalProperties": false
        }
      ]
    }
  }
]
sessions.get_stored · read · contract-only

Feature declaration: readStoredSession

Requirement: docs/feature-specs/F7-sessions.md · Access: retained-read

Tables: sessions (read)

Trusted context: authenticated actor

Retry: Safe to retry with the same resolved filters and cursor.

Expected errors: UNAUTHORIZED, BAD_REQUEST, FORBIDDEN, NOT_FOUND, CONFLICT, NOT_IMPLEMENTED, INTERNAL_SERVER_ERROR

API consumers

[]

MCP consumers

[
  {
    "tool": "session_read",
    "collection": "sessions",
    "specification": "docs/feature-specs/F7-sessions.md#mcp-source-mapping--selected-target",
    "operation": "get",
    "binding": "planned",
    "mode": "adapted",
    "readiness": "contract-only",
    "services": [
      "sessions.get_stored"
    ],
    "gap": null,
    "projection": "List omits documents and preserves resolved window/boundary; stored get preserves nullable session; start explicitly constructs the compact MCP briefing and supported-reader continuations; close preserves saved outcome."
  }
]

Service input

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "anyOf": [
        {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
        },
        {
          "type": "string",
          "const": "last_completed"
        }
      ],
      "description": "Exact session UUID, or last_completed for the most recently ended session; returns null when none exists."
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}

Service output

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "session": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "vendor": {
              "type": "string",
              "enum": [
                "claude",
                "openai"
              ],
              "description": "Conversation host: claude is shown as Claude; openai is shown as ChatGPT."
            },
            "source_url": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "uri"
                },
                {
                  "type": "null"
                }
              ],
              "description": "External conversation link used by Open the conversation. Not the app detail URL."
            },
            "type": {
              "anyOf": [
                {
                  "type": "string",
                  "enum": [
                    "goal_setup",
                    "check_in",
                    "review",
                    "open_coaching"
                  ],
                  "description": "Coaching session type: Goal setup, Check-in, Review or Open coaching. Separate from whether the session is still open."
                },
                {
                  "type": "null"
                }
              ]
            },
            "briefing_notes": {
              "type": "string",
              "description": "UI document: Briefing. Server-prepared coaching context."
            },
            "headline": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "One-line coaching-session summary used in session lists."
            },
            "summary_notes": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "UI document: Summary. Saved when the coaching session closes."
            },
            "started_at": {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
            },
            "ended_at": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Closed when set; In progress when null. This is derived session state, not a stored status enum."
            },
            "url": {
              "type": "string",
              "format": "uri",
              "description": "Internal app link to coaching session details; distinct from source_url."
            },
            "duration_minutes": {
              "anyOf": [
                {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                {
                  "type": "null"
                }
              ]
            },
            "actions_created": {
              "type": "integer",
              "minimum": 0,
              "maximum": 9007199254740991
            },
            "actions_reviewed": {
              "type": "integer",
              "minimum": 0,
              "maximum": 9007199254740991
            }
          },
          "required": [
            "id",
            "vendor",
            "source_url",
            "type",
            "briefing_notes",
            "headline",
            "summary_notes",
            "started_at",
            "ended_at",
            "url",
            "duration_minutes",
            "actions_created",
            "actions_reviewed"
          ],
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ]
    },
    "boundary": {
      "type": "object",
      "properties": {
        "at": {
          "anyOf": [
            {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
            },
            {
              "type": "null"
            }
          ]
        },
        "session_id": {
          "anyOf": [
            {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            {
              "type": "null"
            }
          ]
        },
        "source": {
          "type": "string",
          "enum": [
            "session",
            "cycle_start",
            "none"
          ]
        }
      },
      "required": [
        "at",
        "session_id",
        "source"
      ],
      "additionalProperties": false
    }
  },
  "required": [
    "session",
    "boundary"
  ],
  "additionalProperties": false
}
Public MCP input/output shapes for comparison
[
  {
    "tool": "session_read",
    "collection": "sessions",
    "specification": "docs/feature-specs/F7-sessions.md#mcp-source-mapping--selected-target",
    "operation": "get",
    "binding": "planned",
    "mode": "adapted",
    "readiness": "contract-only",
    "services": [
      "sessions.get_stored"
    ],
    "gap": null,
    "projection": "List omits documents and preserves resolved window/boundary; stored get preserves nullable session; start explicitly constructs the compact MCP briefing and supported-reader continuations; close preserves saved outcome.",
    "input": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "oneOf": [
        {
          "type": "object",
          "properties": {
            "cursor": {
              "type": "string",
              "minLength": 1
            },
            "limit": {
              "default": 20,
              "type": "integer",
              "minimum": 1,
              "maximum": 100
            },
            "window": {
              "type": "object",
              "properties": {
                "since": {
                  "description": "Inclusive lower bound. Default: last completed session, falling back to active-cycle start. Date-only values use the profile timezone.",
                  "anyOf": [
                    {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "date",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                          "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                        },
                        {
                          "type": "string",
                          "format": "date-time",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                        }
                      ]
                    },
                    {
                      "type": "string",
                      "enum": [
                        "last_session",
                        "cycle_start"
                      ]
                    }
                  ]
                },
                "until": {
                  "description": "Exclusive upper bound; default is the server time captured on the first page.",
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                      "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                    },
                    {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    }
                  ]
                }
              },
              "additionalProperties": false
            },
            "operation": {
              "type": "string",
              "const": "list"
            }
          },
          "required": [
            "operation"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "operation": {
              "type": "string",
              "const": "get"
            },
            "id": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                {
                  "type": "string",
                  "const": "last_completed"
                }
              ],
              "description": "Exact session UUID, or last_completed for the most recently ended session; returns null when none exists."
            }
          },
          "required": [
            "operation",
            "id"
          ],
          "additionalProperties": false
        }
      ]
    },
    "output": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "items": {
              "maxItems": 100,
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "vendor": {
                    "type": "string",
                    "enum": [
                      "claude",
                      "openai"
                    ],
                    "description": "Conversation host: claude is shown as Claude; openai is shown as ChatGPT."
                  },
                  "source_url": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uri"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "External conversation link used by Open the conversation. Not the app detail URL."
                  },
                  "type": {
                    "anyOf": [
                      {
                        "type": "string",
                        "enum": [
                          "goal_setup",
                          "check_in",
                          "review",
                          "open_coaching"
                        ],
                        "description": "Coaching session type: Goal setup, Check-in, Review or Open coaching. Separate from whether the session is still open."
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "headline": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "One-line coaching-session summary used in session lists."
                  },
                  "started_at": {
                    "type": "string",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                  },
                  "ended_at": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "Closed when set; In progress when null. This is derived session state, not a stored status enum."
                  },
                  "url": {
                    "type": "string",
                    "format": "uri",
                    "description": "Internal app link to coaching session details; distinct from source_url."
                  },
                  "duration_minutes": {
                    "anyOf": [
                      {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "actions_created": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 9007199254740991
                  },
                  "actions_reviewed": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 9007199254740991
                  }
                },
                "required": [
                  "id",
                  "vendor",
                  "source_url",
                  "type",
                  "headline",
                  "started_at",
                  "ended_at",
                  "url",
                  "duration_minutes",
                  "actions_created",
                  "actions_reviewed"
                ],
                "additionalProperties": false
              }
            },
            "next_cursor": {
              "anyOf": [
                {
                  "type": "string",
                  "minLength": 1
                },
                {
                  "type": "null"
                }
              ]
            },
            "continuation": {
              "anyOf": [
                {
                  "type": "object",
                  "properties": {
                    "tool": {
                      "type": "string",
                      "const": "session_read"
                    },
                    "arguments": {
                      "type": "object",
                      "properties": {
                        "cursor": {
                          "type": "string",
                          "minLength": 1
                        },
                        "limit": {
                          "type": "integer",
                          "minimum": 1,
                          "maximum": 100
                        },
                        "window": {
                          "type": "object",
                          "properties": {
                            "since": {
                              "type": "string",
                              "format": "date-time",
                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                            },
                            "until": {
                              "type": "string",
                              "format": "date-time",
                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                            }
                          },
                          "required": [
                            "since",
                            "until"
                          ],
                          "additionalProperties": false
                        },
                        "operation": {
                          "type": "string",
                          "const": "list"
                        }
                      },
                      "required": [
                        "cursor",
                        "limit",
                        "operation"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "required": [
                    "tool",
                    "arguments"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "null"
                }
              ]
            },
            "operation": {
              "type": "string",
              "const": "list"
            },
            "window": {
              "anyOf": [
                {
                  "type": "object",
                  "properties": {
                    "since": {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    "until": {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    }
                  },
                  "required": [
                    "since",
                    "until"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "null"
                }
              ]
            },
            "boundary": {
              "type": "object",
              "properties": {
                "at": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "session_id": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "source": {
                  "type": "string",
                  "enum": [
                    "session",
                    "cycle_start",
                    "none"
                  ]
                }
              },
              "required": [
                "at",
                "session_id",
                "source"
              ],
              "additionalProperties": false
            }
          },
          "required": [
            "items",
            "next_cursor",
            "continuation",
            "operation",
            "window",
            "boundary"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "operation": {
              "type": "string",
              "const": "get"
            },
            "session": {
              "anyOf": [
                {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    "vendor": {
                      "type": "string",
                      "enum": [
                        "claude",
                        "openai"
                      ],
                      "description": "Conversation host: claude is shown as Claude; openai is shown as ChatGPT."
                    },
                    "source_url": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "uri"
                        },
                        {
                          "type": "null"
                        }
                      ],
                      "description": "External conversation link used by Open the conversation. Not the app detail URL."
                    },
                    "type": {
                      "anyOf": [
                        {
                          "type": "string",
                          "enum": [
                            "goal_setup",
                            "check_in",
                            "review",
                            "open_coaching"
                          ],
                          "description": "Coaching session type: Goal setup, Check-in, Review or Open coaching. Separate from whether the session is still open."
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "briefing_notes": {
                      "type": "string",
                      "description": "UI document: Briefing. Server-prepared coaching context."
                    },
                    "headline": {
                      "anyOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "null"
                        }
                      ],
                      "description": "One-line coaching-session summary used in session lists."
                    },
                    "summary_notes": {
                      "anyOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "null"
                        }
                      ],
                      "description": "UI document: Summary. Saved when the coaching session closes."
                    },
                    "started_at": {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    "ended_at": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "date-time",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                        },
                        {
                          "type": "null"
                        }
                      ],
                      "description": "Closed when set; In progress when null. This is derived session state, not a stored status enum."
                    },
                    "url": {
                      "type": "string",
                      "format": "uri",
                      "description": "Internal app link to coaching session details; distinct from source_url."
                    },
                    "duration_minutes": {
                      "anyOf": [
                        {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "actions_created": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    "actions_reviewed": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    }
                  },
                  "required": [
                    "id",
                    "vendor",
                    "source_url",
                    "type",
                    "briefing_notes",
                    "headline",
                    "summary_notes",
                    "started_at",
                    "ended_at",
                    "url",
                    "duration_minutes",
                    "actions_created",
                    "actions_reviewed"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "null"
                }
              ]
            },
            "boundary": {
              "type": "object",
              "properties": {
                "at": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "session_id": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "source": {
                  "type": "string",
                  "enum": [
                    "session",
                    "cycle_start",
                    "none"
                  ]
                }
              },
              "required": [
                "at",
                "session_id",
                "source"
              ],
              "additionalProperties": false
            }
          },
          "required": [
            "operation",
            "session",
            "boundary"
          ],
          "additionalProperties": false
        }
      ]
    }
  }
]
sessions.start · write · contract-only

Feature declaration: loadBriefing

Requirement: docs/feature-specs/F7-sessions.md · Access: session-start

Tables: sessions (write), user (read), cycles (read), objectives (read), results (read), actions (read), notes (read)

Trusted context: session-origin

Retry: Inspect state after uncertain outcomes; never infer rollback from a response failure.

Expected errors: UNAUTHORIZED, BAD_REQUEST, FORBIDDEN, NOT_FOUND, CONFLICT, NOT_IMPLEMENTED, INTERNAL_SERVER_ERROR

API consumers

[
  {
    "operation": "sessions.start",
    "service": "sessions.start",
    "binding": "bound"
  }
]

MCP consumers

[
  {
    "tool": "session_start",
    "collection": "sessions",
    "specification": "docs/feature-specs/F7-sessions.md#mcp-source-mapping--selected-target",
    "operation": "call",
    "binding": "planned",
    "mode": "adapted",
    "readiness": "contract-only",
    "services": [
      "sessions.start"
    ],
    "gap": null,
    "projection": "List omits documents and preserves resolved window/boundary; stored get preserves nullable session; start explicitly constructs the compact MCP briefing and supported-reader continuations; close preserves saved outcome."
  }
]

Service input

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "force_new": {
      "type": "boolean"
    }
  },
  "additionalProperties": false
}

Service output

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "oneOf": [
    {
      "type": "object",
      "properties": {
        "access_state": {
          "type": "string",
          "const": "active"
        },
        "session": {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "started_at": {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
            },
            "stale": {
              "type": "boolean"
            }
          },
          "required": [
            "id",
            "started_at"
          ],
          "additionalProperties": false
        },
        "briefing_notes": {
          "type": "string"
        },
        "briefing": {
          "type": "object",
          "properties": {
            "as_of": {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
            },
            "current": {
              "type": "object",
              "properties": {
                "profile": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    "name": {
                      "type": "string",
                      "description": "Chosen coaching/display name, used verbatim. Target UI prompt: What should we call you? Empty means unknown; no separate surname."
                    },
                    "about_me": {
                      "type": "string",
                      "description": "UI label: About me."
                    },
                    "timezone": {
                      "type": "string",
                      "minLength": 1,
                      "description": "UI label: Time zone. IANA zone used for calendar dates and boundaries."
                    }
                  },
                  "required": [
                    "id",
                    "name",
                    "about_me",
                    "timezone"
                  ],
                  "additionalProperties": false
                },
                "boundary": {
                  "type": "object",
                  "properties": {
                    "at": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "date-time",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "session_id": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "source": {
                      "type": "string",
                      "enum": [
                        "session",
                        "cycle_start",
                        "none"
                      ]
                    }
                  },
                  "required": [
                    "at",
                    "session_id",
                    "source"
                  ],
                  "additionalProperties": false
                },
                "cycle_line": {
                  "anyOf": [
                    {
                      "type": "object",
                      "properties": {
                        "range": {
                          "type": "string"
                        },
                        "time_gone_pct": {
                          "type": "number",
                          "minimum": 0,
                          "maximum": 100
                        }
                      },
                      "required": [
                        "range",
                        "time_gone_pct"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "cycles": {
                  "type": "object",
                  "properties": {
                    "items": {
                      "maxItems": 50,
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "id": {
                            "type": "string",
                            "format": "uuid",
                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                            "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                          },
                          "intention": {
                            "anyOf": [
                              {
                                "type": "string"
                              },
                              {
                                "type": "null"
                              }
                            ],
                            "description": "UI label: Intention. Optional guiding focus; the cycle is identified by its date range, not a name."
                          },
                          "start_at": {
                            "type": "string",
                            "format": "date",
                            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                            "description": "UI label: Starts."
                          },
                          "end_at": {
                            "type": "string",
                            "format": "date",
                            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                            "description": "UI label: Ends."
                          },
                          "status": {
                            "type": "string",
                            "enum": [
                              "active",
                              "archived"
                            ]
                          },
                          "created_at": {
                            "type": "string",
                            "format": "date-time",
                            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                          },
                          "url": {
                            "type": "string",
                            "format": "uri"
                          },
                          "achievement_pct": {
                            "anyOf": [
                              {
                                "type": "number"
                              },
                              {
                                "type": "null"
                              }
                            ],
                            "description": "UI label: Achievement. Derived from objective progress; unavailable when nothing is measurable."
                          },
                          "time_gone_pct": {
                            "type": "number",
                            "minimum": 0,
                            "maximum": 100,
                            "description": "UI label: Time gone. Derived percentage of the cycle elapsed."
                          },
                          "length_weeks": {
                            "type": "integer",
                            "minimum": -9007199254740991,
                            "maximum": 9007199254740991,
                            "description": "UI label: Length, in weeks; derived from Starts and Ends."
                          }
                        },
                        "required": [
                          "id",
                          "intention",
                          "start_at",
                          "end_at",
                          "status",
                          "created_at",
                          "url",
                          "achievement_pct",
                          "time_gone_pct",
                          "length_weeks"
                        ],
                        "additionalProperties": false
                      }
                    },
                    "next_cursor": {
                      "anyOf": [
                        {
                          "type": "string",
                          "minLength": 1
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "items",
                    "next_cursor"
                  ],
                  "additionalProperties": false
                },
                "cycle": {
                  "anyOf": [
                    {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                        },
                        "intention": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "UI label: Intention. Optional guiding focus; the cycle is identified by its date range, not a name."
                        },
                        "start_at": {
                          "type": "string",
                          "format": "date",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                          "description": "UI label: Starts."
                        },
                        "end_at": {
                          "type": "string",
                          "format": "date",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                          "description": "UI label: Ends."
                        },
                        "status": {
                          "type": "string",
                          "enum": [
                            "active",
                            "archived"
                          ]
                        },
                        "created_at": {
                          "type": "string",
                          "format": "date-time",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                        },
                        "url": {
                          "type": "string",
                          "format": "uri"
                        },
                        "achievement_pct": {
                          "anyOf": [
                            {
                              "type": "number"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "UI label: Achievement. Derived from objective progress; unavailable when nothing is measurable."
                        },
                        "time_gone_pct": {
                          "type": "number",
                          "minimum": 0,
                          "maximum": 100,
                          "description": "UI label: Time gone. Derived percentage of the cycle elapsed."
                        },
                        "length_weeks": {
                          "type": "integer",
                          "minimum": -9007199254740991,
                          "maximum": 9007199254740991,
                          "description": "UI label: Length, in weeks; derived from Starts and Ends."
                        }
                      },
                      "required": [
                        "id",
                        "intention",
                        "start_at",
                        "end_at",
                        "status",
                        "created_at",
                        "url",
                        "achievement_pct",
                        "time_gone_pct",
                        "length_weeks"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "objectives": {
                  "type": "object",
                  "properties": {
                    "items": {
                      "maxItems": 50,
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "id": {
                            "type": "string",
                            "format": "uuid",
                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                            "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                          },
                          "cycle_id": {
                            "type": "string",
                            "format": "uuid",
                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                            "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                          },
                          "title": {
                            "type": "string"
                          },
                          "description": {
                            "type": "string"
                          },
                          "deadline_at": {
                            "anyOf": [
                              {
                                "type": "string",
                                "format": "date",
                                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                                "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                              },
                              {
                                "type": "null"
                              }
                            ],
                            "description": "UI label: Deadline; null when no deadline has been set."
                          },
                          "status": {
                            "type": "string",
                            "enum": [
                              "on_track",
                              "off_track",
                              "completed"
                            ],
                            "description": "Objective status: On track, Off track or Completed. Coaching judgment, independent of the derived Progress percentage."
                          },
                          "created_at": {
                            "type": "string",
                            "format": "date-time",
                            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                          },
                          "short_code": {
                            "type": "string",
                            "minLength": 1
                          },
                          "url": {
                            "type": "string",
                            "format": "uri"
                          },
                          "progress_pct": {
                            "anyOf": [
                              {
                                "type": "number"
                              },
                              {
                                "type": "null"
                              }
                            ],
                            "description": "UI label: Progress. Derived from measurable results, independently of Status."
                          },
                          "boundary_progress_pct": {
                            "anyOf": [
                              {
                                "type": "number"
                              },
                              {
                                "type": "null"
                              }
                            ],
                            "description": "Historical progress at the resolved last-session boundary; not current Progress."
                          },
                          "movement_pp": {
                            "anyOf": [
                              {
                                "type": "number"
                              },
                              {
                                "type": "null"
                              }
                            ]
                          }
                        },
                        "required": [
                          "id",
                          "cycle_id",
                          "title",
                          "description",
                          "deadline_at",
                          "status",
                          "created_at",
                          "short_code",
                          "url",
                          "progress_pct",
                          "boundary_progress_pct",
                          "movement_pp"
                        ],
                        "additionalProperties": false
                      }
                    },
                    "next_cursor": {
                      "anyOf": [
                        {
                          "type": "string",
                          "minLength": 1
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "items",
                    "next_cursor"
                  ],
                  "additionalProperties": false
                },
                "results": {
                  "type": "object",
                  "properties": {
                    "items": {
                      "maxItems": 50,
                      "type": "array",
                      "items": {
                        "oneOf": [
                          {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                              },
                              "objective_id": {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                              },
                              "title": {
                                "type": "string"
                              },
                              "description": {
                                "anyOf": [
                                  {
                                    "type": "string"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "metric_type": {
                                "type": "string",
                                "const": "number"
                              },
                              "start_value": {
                                "type": "number"
                              },
                              "target_value": {
                                "type": "number"
                              },
                              "unit": {
                                "anyOf": [
                                  {
                                    "type": "string"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ],
                                "description": "UI label: Unit. Used by Number and Performance results."
                              },
                              "cadence": {
                                "type": "null"
                              },
                              "per": {
                                "type": "null"
                              },
                              "since": {
                                "type": "null"
                              },
                              "status": {
                                "type": "string",
                                "enum": [
                                  "in_progress",
                                  "completed"
                                ],
                                "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                              },
                              "created_at": {
                                "type": "string",
                                "format": "date-time",
                                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                              },
                              "short_code": {
                                "type": "string",
                                "minLength": 1
                              },
                              "url": {
                                "type": "string",
                                "format": "uri"
                              },
                              "current_value": {
                                "type": "number",
                                "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                              },
                              "boundary_value": {
                                "type": "number"
                              },
                              "progress_pct": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "boundary_progress_pct": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "movement": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "movement_pp": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "evidence_count": {
                                "type": "integer",
                                "minimum": 0,
                                "maximum": 9007199254740991
                              },
                              "last_recorded_at": {
                                "anyOf": [
                                  {
                                    "type": "string",
                                    "format": "date-time",
                                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "habit_expected_since_boundary": {
                                "anyOf": [
                                  {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "habit_logs_since_boundary": {
                                "anyOf": [
                                  {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "performance_share": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              }
                            },
                            "required": [
                              "id",
                              "objective_id",
                              "title",
                              "description",
                              "metric_type",
                              "start_value",
                              "target_value",
                              "unit",
                              "cadence",
                              "per",
                              "since",
                              "status",
                              "created_at",
                              "short_code",
                              "url",
                              "current_value",
                              "boundary_value",
                              "progress_pct",
                              "boundary_progress_pct",
                              "movement",
                              "movement_pp",
                              "evidence_count",
                              "last_recorded_at",
                              "habit_expected_since_boundary",
                              "habit_logs_since_boundary",
                              "performance_share"
                            ],
                            "additionalProperties": false
                          },
                          {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                              },
                              "objective_id": {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                              },
                              "title": {
                                "type": "string"
                              },
                              "description": {
                                "anyOf": [
                                  {
                                    "type": "string"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "metric_type": {
                                "type": "string",
                                "const": "percentage"
                              },
                              "start_value": {
                                "type": "number",
                                "minimum": 0,
                                "maximum": 100
                              },
                              "target_value": {
                                "type": "number",
                                "minimum": 0,
                                "maximum": 100
                              },
                              "unit": {
                                "type": "null"
                              },
                              "cadence": {
                                "type": "null"
                              },
                              "per": {
                                "type": "null"
                              },
                              "since": {
                                "type": "null"
                              },
                              "status": {
                                "type": "string",
                                "enum": [
                                  "in_progress",
                                  "completed"
                                ],
                                "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                              },
                              "created_at": {
                                "type": "string",
                                "format": "date-time",
                                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                              },
                              "short_code": {
                                "type": "string",
                                "minLength": 1
                              },
                              "url": {
                                "type": "string",
                                "format": "uri"
                              },
                              "current_value": {
                                "type": "number",
                                "minimum": 0,
                                "maximum": 100
                              },
                              "boundary_value": {
                                "type": "number",
                                "minimum": 0,
                                "maximum": 100
                              },
                              "progress_pct": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "boundary_progress_pct": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "movement": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "movement_pp": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "evidence_count": {
                                "type": "integer",
                                "minimum": 0,
                                "maximum": 9007199254740991
                              },
                              "last_recorded_at": {
                                "anyOf": [
                                  {
                                    "type": "string",
                                    "format": "date-time",
                                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "habit_expected_since_boundary": {
                                "anyOf": [
                                  {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "habit_logs_since_boundary": {
                                "anyOf": [
                                  {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "performance_share": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              }
                            },
                            "required": [
                              "id",
                              "objective_id",
                              "title",
                              "description",
                              "metric_type",
                              "start_value",
                              "target_value",
                              "unit",
                              "cadence",
                              "per",
                              "since",
                              "status",
                              "created_at",
                              "short_code",
                              "url",
                              "current_value",
                              "boundary_value",
                              "progress_pct",
                              "boundary_progress_pct",
                              "movement",
                              "movement_pp",
                              "evidence_count",
                              "last_recorded_at",
                              "habit_expected_since_boundary",
                              "habit_logs_since_boundary",
                              "performance_share"
                            ],
                            "additionalProperties": false
                          },
                          {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                              },
                              "objective_id": {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                              },
                              "title": {
                                "type": "string"
                              },
                              "description": {
                                "anyOf": [
                                  {
                                    "type": "string"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "metric_type": {
                                "type": "string",
                                "const": "milestone"
                              },
                              "start_value": {
                                "type": "number",
                                "const": 0
                              },
                              "target_value": {
                                "type": "number",
                                "const": 1
                              },
                              "unit": {
                                "type": "null"
                              },
                              "cadence": {
                                "type": "null"
                              },
                              "per": {
                                "type": "null"
                              },
                              "since": {
                                "type": "null"
                              },
                              "status": {
                                "type": "string",
                                "enum": [
                                  "in_progress",
                                  "completed"
                                ],
                                "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                              },
                              "created_at": {
                                "type": "string",
                                "format": "date-time",
                                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                              },
                              "short_code": {
                                "type": "string",
                                "minLength": 1
                              },
                              "url": {
                                "type": "string",
                                "format": "uri"
                              },
                              "current_value": {
                                "anyOf": [
                                  {
                                    "type": "number",
                                    "const": 0
                                  },
                                  {
                                    "type": "number",
                                    "const": 1
                                  }
                                ]
                              },
                              "boundary_value": {
                                "anyOf": [
                                  {
                                    "type": "number",
                                    "const": 0
                                  },
                                  {
                                    "type": "number",
                                    "const": 1
                                  }
                                ]
                              },
                              "progress_pct": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "boundary_progress_pct": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "movement": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "movement_pp": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "evidence_count": {
                                "type": "integer",
                                "minimum": 0,
                                "maximum": 9007199254740991
                              },
                              "last_recorded_at": {
                                "anyOf": [
                                  {
                                    "type": "string",
                                    "format": "date-time",
                                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "habit_expected_since_boundary": {
                                "anyOf": [
                                  {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "habit_logs_since_boundary": {
                                "anyOf": [
                                  {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "performance_share": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              }
                            },
                            "required": [
                              "id",
                              "objective_id",
                              "title",
                              "description",
                              "metric_type",
                              "start_value",
                              "target_value",
                              "unit",
                              "cadence",
                              "per",
                              "since",
                              "status",
                              "created_at",
                              "short_code",
                              "url",
                              "current_value",
                              "boundary_value",
                              "progress_pct",
                              "boundary_progress_pct",
                              "movement",
                              "movement_pp",
                              "evidence_count",
                              "last_recorded_at",
                              "habit_expected_since_boundary",
                              "habit_logs_since_boundary",
                              "performance_share"
                            ],
                            "additionalProperties": false
                          },
                          {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                              },
                              "objective_id": {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                              },
                              "title": {
                                "type": "string"
                              },
                              "description": {
                                "anyOf": [
                                  {
                                    "type": "string"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "metric_type": {
                                "type": "string",
                                "const": "habit"
                              },
                              "start_value": {
                                "type": "number",
                                "const": 0
                              },
                              "target_value": {
                                "type": "number",
                                "const": 100
                              },
                              "unit": {
                                "type": "null"
                              },
                              "cadence": {
                                "type": "string",
                                "enum": [
                                  "weekly",
                                  "monthly"
                                ],
                                "description": "UI label: Cadence. Weekly or Monthly; per supplies the Times value."
                              },
                              "per": {
                                "type": "integer",
                                "exclusiveMinimum": 0,
                                "maximum": 9007199254740991
                              },
                              "since": {
                                "type": "string",
                                "format": "date",
                                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                                "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                              },
                              "status": {
                                "type": "string",
                                "enum": [
                                  "in_progress",
                                  "completed"
                                ],
                                "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                              },
                              "created_at": {
                                "type": "string",
                                "format": "date-time",
                                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                              },
                              "short_code": {
                                "type": "string",
                                "minLength": 1
                              },
                              "url": {
                                "type": "string",
                                "format": "uri"
                              },
                              "current_value": {
                                "type": "number",
                                "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                              },
                              "boundary_value": {
                                "type": "number"
                              },
                              "progress_pct": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "boundary_progress_pct": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "movement": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "movement_pp": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "evidence_count": {
                                "type": "integer",
                                "minimum": 0,
                                "maximum": 9007199254740991
                              },
                              "last_recorded_at": {
                                "anyOf": [
                                  {
                                    "type": "string",
                                    "format": "date-time",
                                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "habit_expected_since_boundary": {
                                "anyOf": [
                                  {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "habit_logs_since_boundary": {
                                "anyOf": [
                                  {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "performance_share": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              }
                            },
                            "required": [
                              "id",
                              "objective_id",
                              "title",
                              "description",
                              "metric_type",
                              "start_value",
                              "target_value",
                              "unit",
                              "cadence",
                              "per",
                              "since",
                              "status",
                              "created_at",
                              "short_code",
                              "url",
                              "current_value",
                              "boundary_value",
                              "progress_pct",
                              "boundary_progress_pct",
                              "movement",
                              "movement_pp",
                              "evidence_count",
                              "last_recorded_at",
                              "habit_expected_since_boundary",
                              "habit_logs_since_boundary",
                              "performance_share"
                            ],
                            "additionalProperties": false
                          },
                          {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                              },
                              "objective_id": {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                              },
                              "title": {
                                "type": "string"
                              },
                              "description": {
                                "anyOf": [
                                  {
                                    "type": "string"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "metric_type": {
                                "type": "string",
                                "const": "performance"
                              },
                              "start_value": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ],
                                "description": "UI label: Start. Metric baseline; habit baselines are derived rather than stored."
                              },
                              "target_value": {
                                "type": "number"
                              },
                              "unit": {
                                "anyOf": [
                                  {
                                    "type": "string"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ],
                                "description": "UI label: Unit. Used by Number and Performance results."
                              },
                              "cadence": {
                                "type": "null"
                              },
                              "per": {
                                "type": "null"
                              },
                              "since": {
                                "type": "string",
                                "format": "date",
                                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                                "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                              },
                              "status": {
                                "type": "string",
                                "enum": [
                                  "in_progress",
                                  "completed"
                                ],
                                "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                              },
                              "created_at": {
                                "type": "string",
                                "format": "date-time",
                                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                              },
                              "short_code": {
                                "type": "string",
                                "minLength": 1
                              },
                              "url": {
                                "type": "string",
                                "format": "uri"
                              },
                              "current_value": {
                                "type": "number",
                                "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                              },
                              "boundary_value": {
                                "type": "number"
                              },
                              "progress_pct": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "boundary_progress_pct": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "movement": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "movement_pp": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "evidence_count": {
                                "type": "integer",
                                "minimum": 0,
                                "maximum": 9007199254740991
                              },
                              "last_recorded_at": {
                                "anyOf": [
                                  {
                                    "type": "string",
                                    "format": "date-time",
                                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "habit_expected_since_boundary": {
                                "anyOf": [
                                  {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "habit_logs_since_boundary": {
                                "anyOf": [
                                  {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "performance_share": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              }
                            },
                            "required": [
                              "id",
                              "objective_id",
                              "title",
                              "description",
                              "metric_type",
                              "start_value",
                              "target_value",
                              "unit",
                              "cadence",
                              "per",
                              "since",
                              "status",
                              "created_at",
                              "short_code",
                              "url",
                              "current_value",
                              "boundary_value",
                              "progress_pct",
                              "boundary_progress_pct",
                              "movement",
                              "movement_pp",
                              "evidence_count",
                              "last_recorded_at",
                              "habit_expected_since_boundary",
                              "habit_logs_since_boundary",
                              "performance_share"
                            ],
                            "additionalProperties": false
                          }
                        ]
                      }
                    },
                    "next_cursor": {
                      "anyOf": [
                        {
                          "type": "string",
                          "minLength": 1
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "items",
                    "next_cursor"
                  ],
                  "additionalProperties": false
                },
                "actions": {
                  "type": "object",
                  "properties": {
                    "items": {
                      "maxItems": 50,
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "id": {
                            "type": "string",
                            "format": "uuid",
                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                            "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                          },
                          "cycle_id": {
                            "type": "string",
                            "format": "uuid",
                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                            "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                          },
                          "objective_id": {
                            "anyOf": [
                              {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "title": {
                            "type": "string"
                          },
                          "description": {
                            "anyOf": [
                              {
                                "type": "string"
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "due_at": {
                            "anyOf": [
                              {
                                "type": "string",
                                "format": "date",
                                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                                "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                              },
                              {
                                "type": "null"
                              }
                            ],
                            "description": "UI label: Due. May be unset on a web draft; a set date cannot be cleared."
                          },
                          "status": {
                            "type": "string",
                            "enum": [
                              "open",
                              "in_progress",
                              "done"
                            ],
                            "description": "Action status: Open, In progress or Done. The To do UI group includes Open and In progress; Overdue is derived, not a status."
                          },
                          "sort_order": {
                            "anyOf": [
                              {
                                "type": "number"
                              },
                              {
                                "type": "null"
                              }
                            ],
                            "description": "Drag order within an action group; not a progress status."
                          },
                          "session_id": {
                            "anyOf": [
                              {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "created_at": {
                            "type": "string",
                            "format": "date-time",
                            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                          },
                          "url": {
                            "type": "string",
                            "format": "uri"
                          },
                          "overdue": {
                            "type": "boolean"
                          },
                          "done_since_boundary": {
                            "type": "boolean"
                          }
                        },
                        "required": [
                          "id",
                          "cycle_id",
                          "objective_id",
                          "title",
                          "description",
                          "due_at",
                          "status",
                          "sort_order",
                          "session_id",
                          "created_at",
                          "url",
                          "overdue",
                          "done_since_boundary"
                        ],
                        "additionalProperties": false
                      }
                    },
                    "next_cursor": {
                      "anyOf": [
                        {
                          "type": "string",
                          "minLength": 1
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "items",
                    "next_cursor"
                  ],
                  "additionalProperties": false
                },
                "notes": {
                  "type": "object",
                  "properties": {
                    "notes": {
                      "type": "object",
                      "properties": {
                        "items": {
                          "maxItems": 50,
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                              },
                              "text": {
                                "type": "string",
                                "minLength": 1
                              },
                              "recorded_at": {
                                "type": "string",
                                "format": "date-time",
                                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                              },
                              "url": {
                                "type": "string",
                                "format": "uri"
                              },
                              "since_boundary": {
                                "type": "boolean"
                              }
                            },
                            "required": [
                              "id",
                              "text",
                              "recorded_at",
                              "url",
                              "since_boundary"
                            ],
                            "additionalProperties": false
                          }
                        },
                        "next_cursor": {
                          "anyOf": [
                            {
                              "type": "string",
                              "minLength": 1
                            },
                            {
                              "type": "null"
                            }
                          ]
                        }
                      },
                      "required": [
                        "items",
                        "next_cursor"
                      ],
                      "additionalProperties": false
                    },
                    "selection": {
                      "type": "string",
                      "enum": [
                        "since_boundary",
                        "recent_fallback",
                        "selected",
                        "history"
                      ]
                    },
                    "total": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    }
                  },
                  "required": [
                    "notes",
                    "selection",
                    "total"
                  ],
                  "additionalProperties": false
                },
                "last_completed_session": {
                  "anyOf": [
                    {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                        },
                        "vendor": {
                          "type": "string",
                          "enum": [
                            "claude",
                            "openai"
                          ],
                          "description": "Conversation host: claude is shown as Claude; openai is shown as ChatGPT."
                        },
                        "source_url": {
                          "anyOf": [
                            {
                              "type": "string",
                              "format": "uri"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "External conversation link used by Open the conversation. Not the app detail URL."
                        },
                        "type": {
                          "anyOf": [
                            {
                              "type": "string",
                              "enum": [
                                "goal_setup",
                                "check_in",
                                "review",
                                "open_coaching"
                              ],
                              "description": "Coaching session type: Goal setup, Check-in, Review or Open coaching. Separate from whether the session is still open."
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "briefing_notes": {
                          "type": "string",
                          "description": "UI document: Briefing. Server-prepared coaching context."
                        },
                        "headline": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "One-line coaching-session summary used in session lists."
                        },
                        "summary_notes": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "UI document: Summary. Saved when the coaching session closes."
                        },
                        "started_at": {
                          "type": "string",
                          "format": "date-time",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                        },
                        "ended_at": {
                          "anyOf": [
                            {
                              "type": "string",
                              "format": "date-time",
                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Closed when set; In progress when null. This is derived session state, not a stored status enum."
                        },
                        "url": {
                          "type": "string",
                          "format": "uri",
                          "description": "Internal app link to coaching session details; distinct from source_url."
                        },
                        "duration_minutes": {
                          "anyOf": [
                            {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "actions_created": {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        "actions_reviewed": {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        }
                      },
                      "required": [
                        "id",
                        "vendor",
                        "source_url",
                        "type",
                        "briefing_notes",
                        "headline",
                        "summary_notes",
                        "started_at",
                        "ended_at",
                        "url",
                        "duration_minutes",
                        "actions_created",
                        "actions_reviewed"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "selected": {
                  "type": "object",
                  "properties": {
                    "objective": {
                      "anyOf": [
                        {
                          "type": "object",
                          "properties": {
                            "id": {
                              "type": "string",
                              "format": "uuid",
                              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                            },
                            "cycle_id": {
                              "type": "string",
                              "format": "uuid",
                              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                            },
                            "title": {
                              "type": "string"
                            },
                            "description": {
                              "type": "string"
                            },
                            "deadline_at": {
                              "anyOf": [
                                {
                                  "type": "string",
                                  "format": "date",
                                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                                  "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                                },
                                {
                                  "type": "null"
                                }
                              ],
                              "description": "UI label: Deadline; null when no deadline has been set."
                            },
                            "status": {
                              "type": "string",
                              "enum": [
                                "on_track",
                                "off_track",
                                "completed"
                              ],
                              "description": "Objective status: On track, Off track or Completed. Coaching judgment, independent of the derived Progress percentage."
                            },
                            "created_at": {
                              "type": "string",
                              "format": "date-time",
                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                            },
                            "short_code": {
                              "type": "string",
                              "minLength": 1
                            },
                            "url": {
                              "type": "string",
                              "format": "uri"
                            },
                            "progress_pct": {
                              "anyOf": [
                                {
                                  "type": "number"
                                },
                                {
                                  "type": "null"
                                }
                              ],
                              "description": "UI label: Progress. Derived from measurable results, independently of Status."
                            },
                            "boundary_progress_pct": {
                              "anyOf": [
                                {
                                  "type": "number"
                                },
                                {
                                  "type": "null"
                                }
                              ],
                              "description": "Historical progress at the resolved last-session boundary; not current Progress."
                            },
                            "movement_pp": {
                              "anyOf": [
                                {
                                  "type": "number"
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            }
                          },
                          "required": [
                            "id",
                            "cycle_id",
                            "title",
                            "description",
                            "deadline_at",
                            "status",
                            "created_at",
                            "short_code",
                            "url",
                            "progress_pct",
                            "boundary_progress_pct",
                            "movement_pp"
                          ],
                          "additionalProperties": false
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "result": {
                      "anyOf": [
                        {
                          "oneOf": [
                            {
                              "type": "object",
                              "properties": {
                                "id": {
                                  "type": "string",
                                  "format": "uuid",
                                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                                },
                                "objective_id": {
                                  "type": "string",
                                  "format": "uuid",
                                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                                },
                                "title": {
                                  "type": "string"
                                },
                                "description": {
                                  "anyOf": [
                                    {
                                      "type": "string"
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                },
                                "metric_type": {
                                  "type": "string",
                                  "const": "number"
                                },
                                "start_value": {
                                  "type": "number"
                                },
                                "target_value": {
                                  "type": "number"
                                },
                                "unit": {
                                  "anyOf": [
                                    {
                                      "type": "string"
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ],
                                  "description": "UI label: Unit. Used by Number and Performance results."
                                },
                                "cadence": {
                                  "type": "null"
                                },
                                "per": {
                                  "type": "null"
                                },
                                "since": {
                                  "type": "null"
                                },
                                "status": {
                                  "type": "string",
                                  "enum": [
                                    "in_progress",
                                    "completed"
                                  ],
                                  "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                                },
                                "created_at": {
                                  "type": "string",
                                  "format": "date-time",
                                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                },
                                "short_code": {
                                  "type": "string",
                                  "minLength": 1
                                },
                                "url": {
                                  "type": "string",
                                  "format": "uri"
                                },
                                "current_value": {
                                  "type": "number",
                                  "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                                },
                                "boundary_value": {
                                  "type": "number"
                                },
                                "progress_pct": {
                                  "anyOf": [
                                    {
                                      "type": "number"
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                },
                                "boundary_progress_pct": {
                                  "anyOf": [
                                    {
                                      "type": "number"
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                },
                                "movement": {
                                  "anyOf": [
                                    {
                                      "type": "number"
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                },
                                "movement_pp": {
                                  "anyOf": [
                                    {
                                      "type": "number"
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                },
                                "evidence_count": {
                                  "type": "integer",
                                  "minimum": 0,
                                  "maximum": 9007199254740991
                                },
                                "last_recorded_at": {
                                  "anyOf": [
                                    {
                                      "type": "string",
                                      "format": "date-time",
                                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                },
                                "habit_expected_since_boundary": {
                                  "anyOf": [
                                    {
                                      "type": "integer",
                                      "minimum": 0,
                                      "maximum": 9007199254740991
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                },
                                "habit_logs_since_boundary": {
                                  "anyOf": [
                                    {
                                      "type": "integer",
                                      "minimum": 0,
                                      "maximum": 9007199254740991
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                },
                                "performance_share": {
                                  "anyOf": [
                                    {
                                      "type": "number"
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                }
                              },
                              "required": [
                                "id",
                                "objective_id",
                                "title",
                                "description",
                                "metric_type",
                                "start_value",
                                "target_value",
                                "unit",
                                "cadence",
                                "per",
                                "since",
                                "status",
                                "created_at",
                                "short_code",
                                "url",
                                "current_value",
                                "boundary_value",
                                "progress_pct",
                                "boundary_progress_pct",
                                "movement",
                                "movement_pp",
                                "evidence_count",
                                "last_recorded_at",
                                "habit_expected_since_boundary",
                                "habit_logs_since_boundary",
                                "performance_share"
                              ],
                              "additionalProperties": false
                            },
                            {
                              "type": "object",
                              "properties": {
                                "id": {
                                  "type": "string",
                                  "format": "uuid",
                                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                                },
                                "objective_id": {
                                  "type": "string",
                                  "format": "uuid",
                                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                                },
                                "title": {
                                  "type": "string"
                                },
                                "description": {
                                  "anyOf": [
                                    {
                                      "type": "string"
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                },
                                "metric_type": {
                                  "type": "string",
                                  "const": "percentage"
                                },
                                "start_value": {
                                  "type": "number",
                                  "minimum": 0,
                                  "maximum": 100
                                },
                                "target_value": {
                                  "type": "number",
                                  "minimum": 0,
                                  "maximum": 100
                                },
                                "unit": {
                                  "type": "null"
                                },
                                "cadence": {
                                  "type": "null"
                                },
                                "per": {
                                  "type": "null"
                                },
                                "since": {
                                  "type": "null"
                                },
                                "status": {
                                  "type": "string",
                                  "enum": [
                                    "in_progress",
                                    "completed"
                                  ],
                                  "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                                },
                                "created_at": {
                                  "type": "string",
                                  "format": "date-time",
                                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                },
                                "short_code": {
                                  "type": "string",
                                  "minLength": 1
                                },
                                "url": {
                                  "type": "string",
                                  "format": "uri"
                                },
                                "current_value": {
                                  "type": "number",
                                  "minimum": 0,
                                  "maximum": 100
                                },
                                "boundary_value": {
                                  "type": "number",
                                  "minimum": 0,
                                  "maximum": 100
                                },
                                "progress_pct": {
                                  "anyOf": [
                                    {
                                      "type": "number"
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                },
                                "boundary_progress_pct": {
                                  "anyOf": [
                                    {
                                      "type": "number"
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                },
                                "movement": {
                                  "anyOf": [
                                    {
                                      "type": "number"
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                },
                                "movement_pp": {
                                  "anyOf": [
                                    {
                                      "type": "number"
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                },
                                "evidence_count": {
                                  "type": "integer",
                                  "minimum": 0,
                                  "maximum": 9007199254740991
                                },
                                "last_recorded_at": {
                                  "anyOf": [
                                    {
                                      "type": "string",
                                      "format": "date-time",
                                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                },
                                "habit_expected_since_boundary": {
                                  "anyOf": [
                                    {
                                      "type": "integer",
                                      "minimum": 0,
                                      "maximum": 9007199254740991
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                },
                                "habit_logs_since_boundary": {
                                  "anyOf": [
                                    {
                                      "type": "integer",
                                      "minimum": 0,
                                      "maximum": 9007199254740991
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                },
                                "performance_share": {
                                  "anyOf": [
                                    {
                                      "type": "number"
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                }
                              },
                              "required": [
                                "id",
                                "objective_id",
                                "title",
                                "description",
                                "metric_type",
                                "start_value",
                                "target_value",
                                "unit",
                                "cadence",
                                "per",
                                "since",
                                "status",
                                "created_at",
                                "short_code",
                                "url",
                                "current_value",
                                "boundary_value",
                                "progress_pct",
                                "boundary_progress_pct",
                                "movement",
                                "movement_pp",
                                "evidence_count",
                                "last_recorded_at",
                                "habit_expected_since_boundary",
                                "habit_logs_since_boundary",
                                "performance_share"
                              ],
                              "additionalProperties": false
                            },
                            {
                              "type": "object",
                              "properties": {
                                "id": {
                                  "type": "string",
                                  "format": "uuid",
                                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                                },
                                "objective_id": {
                                  "type": "string",
                                  "format": "uuid",
                                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                                },
                                "title": {
                                  "type": "string"
                                },
                                "description": {
                                  "anyOf": [
                                    {
                                      "type": "string"
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                },
                                "metric_type": {
                                  "type": "string",
                                  "const": "milestone"
                                },
                                "start_value": {
                                  "type": "number",
                                  "const": 0
                                },
                                "target_value": {
                                  "type": "number",
                                  "const": 1
                                },
                                "unit": {
                                  "type": "null"
                                },
                                "cadence": {
                                  "type": "null"
                                },
                                "per": {
                                  "type": "null"
                                },
                                "since": {
                                  "type": "null"
                                },
                                "status": {
                                  "type": "string",
                                  "enum": [
                                    "in_progress",
                                    "completed"
                                  ],
                                  "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                                },
                                "created_at": {
                                  "type": "string",
                                  "format": "date-time",
                                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                },
                                "short_code": {
                                  "type": "string",
                                  "minLength": 1
                                },
                                "url": {
                                  "type": "string",
                                  "format": "uri"
                                },
                                "current_value": {
                                  "anyOf": [
                                    {
                                      "type": "number",
                                      "const": 0
                                    },
                                    {
                                      "type": "number",
                                      "const": 1
                                    }
                                  ]
                                },
                                "boundary_value": {
                                  "anyOf": [
                                    {
                                      "type": "number",
                                      "const": 0
                                    },
                                    {
                                      "type": "number",
                                      "const": 1
                                    }
                                  ]
                                },
                                "progress_pct": {
                                  "anyOf": [
                                    {
                                      "type": "number"
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                },
                                "boundary_progress_pct": {
                                  "anyOf": [
                                    {
                                      "type": "number"
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                },
                                "movement": {
                                  "anyOf": [
                                    {
                                      "type": "number"
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                },
                                "movement_pp": {
                                  "anyOf": [
                                    {
                                      "type": "number"
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                },
                                "evidence_count": {
                                  "type": "integer",
                                  "minimum": 0,
                                  "maximum": 9007199254740991
                                },
                                "last_recorded_at": {
                                  "anyOf": [
                                    {
                                      "type": "string",
                                      "format": "date-time",
                                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                },
                                "habit_expected_since_boundary": {
                                  "anyOf": [
                                    {
                                      "type": "integer",
                                      "minimum": 0,
                                      "maximum": 9007199254740991
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                },
                                "habit_logs_since_boundary": {
                                  "anyOf": [
                                    {
                                      "type": "integer",
                                      "minimum": 0,
                                      "maximum": 9007199254740991
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                },
                                "performance_share": {
                                  "anyOf": [
                                    {
                                      "type": "number"
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                }
                              },
                              "required": [
                                "id",
                                "objective_id",
                                "title",
                                "description",
                                "metric_type",
                                "start_value",
                                "target_value",
                                "unit",
                                "cadence",
                                "per",
                                "since",
                                "status",
                                "created_at",
                                "short_code",
                                "url",
                                "current_value",
                                "boundary_value",
                                "progress_pct",
                                "boundary_progress_pct",
                                "movement",
                                "movement_pp",
                                "evidence_count",
                                "last_recorded_at",
                                "habit_expected_since_boundary",
                                "habit_logs_since_boundary",
                                "performance_share"
                              ],
                              "additionalProperties": false
                            },
                            {
                              "type": "object",
                              "properties": {
                                "id": {
                                  "type": "string",
                                  "format": "uuid",
                                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                                },
                                "objective_id": {
                                  "type": "string",
                                  "format": "uuid",
                                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                                },
                                "title": {
                                  "type": "string"
                                },
                                "description": {
                                  "anyOf": [
                                    {
                                      "type": "string"
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                },
                                "metric_type": {
                                  "type": "string",
                                  "const": "habit"
                                },
                                "start_value": {
                                  "type": "number",
                                  "const": 0
                                },
                                "target_value": {
                                  "type": "number",
                                  "const": 100
                                },
                                "unit": {
                                  "type": "null"
                                },
                                "cadence": {
                                  "type": "string",
                                  "enum": [
                                    "weekly",
                                    "monthly"
                                  ],
                                  "description": "UI label: Cadence. Weekly or Monthly; per supplies the Times value."
                                },
                                "per": {
                                  "type": "integer",
                                  "exclusiveMinimum": 0,
                                  "maximum": 9007199254740991
                                },
                                "since": {
                                  "type": "string",
                                  "format": "date",
                                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                                  "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                                },
                                "status": {
                                  "type": "string",
                                  "enum": [
                                    "in_progress",
                                    "completed"
                                  ],
                                  "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                                },
                                "created_at": {
                                  "type": "string",
                                  "format": "date-time",
                                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                },
                                "short_code": {
                                  "type": "string",
                                  "minLength": 1
                                },
                                "url": {
                                  "type": "string",
                                  "format": "uri"
                                },
                                "current_value": {
                                  "type": "number",
                                  "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                                },
                                "boundary_value": {
                                  "type": "number"
                                },
                                "progress_pct": {
                                  "anyOf": [
                                    {
                                      "type": "number"
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                },
                                "boundary_progress_pct": {
                                  "anyOf": [
                                    {
                                      "type": "number"
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                },
                                "movement": {
                                  "anyOf": [
                                    {
                                      "type": "number"
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                },
                                "movement_pp": {
                                  "anyOf": [
                                    {
                                      "type": "number"
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                },
                                "evidence_count": {
                                  "type": "integer",
                                  "minimum": 0,
                                  "maximum": 9007199254740991
                                },
                                "last_recorded_at": {
                                  "anyOf": [
                                    {
                                      "type": "string",
                                      "format": "date-time",
                                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                },
                                "habit_expected_since_boundary": {
                                  "anyOf": [
                                    {
                                      "type": "integer",
                                      "minimum": 0,
                                      "maximum": 9007199254740991
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                },
                                "habit_logs_since_boundary": {
                                  "anyOf": [
                                    {
                                      "type": "integer",
                                      "minimum": 0,
                                      "maximum": 9007199254740991
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                },
                                "performance_share": {
                                  "anyOf": [
                                    {
                                      "type": "number"
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                }
                              },
                              "required": [
                                "id",
                                "objective_id",
                                "title",
                                "description",
                                "metric_type",
                                "start_value",
                                "target_value",
                                "unit",
                                "cadence",
                                "per",
                                "since",
                                "status",
                                "created_at",
                                "short_code",
                                "url",
                                "current_value",
                                "boundary_value",
                                "progress_pct",
                                "boundary_progress_pct",
                                "movement",
                                "movement_pp",
                                "evidence_count",
                                "last_recorded_at",
                                "habit_expected_since_boundary",
                                "habit_logs_since_boundary",
                                "performance_share"
                              ],
                              "additionalProperties": false
                            },
                            {
                              "type": "object",
                              "properties": {
                                "id": {
                                  "type": "string",
                                  "format": "uuid",
                                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                                },
                                "objective_id": {
                                  "type": "string",
                                  "format": "uuid",
                                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                                },
                                "title": {
                                  "type": "string"
                                },
                                "description": {
                                  "anyOf": [
                                    {
                                      "type": "string"
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                },
                                "metric_type": {
                                  "type": "string",
                                  "const": "performance"
                                },
                                "start_value": {
                                  "anyOf": [
                                    {
                                      "type": "number"
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ],
                                  "description": "UI label: Start. Metric baseline; habit baselines are derived rather than stored."
                                },
                                "target_value": {
                                  "type": "number"
                                },
                                "unit": {
                                  "anyOf": [
                                    {
                                      "type": "string"
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ],
                                  "description": "UI label: Unit. Used by Number and Performance results."
                                },
                                "cadence": {
                                  "type": "null"
                                },
                                "per": {
                                  "type": "null"
                                },
                                "since": {
                                  "type": "string",
                                  "format": "date",
                                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                                  "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                                },
                                "status": {
                                  "type": "string",
                                  "enum": [
                                    "in_progress",
                                    "completed"
                                  ],
                                  "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                                },
                                "created_at": {
                                  "type": "string",
                                  "format": "date-time",
                                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                },
                                "short_code": {
                                  "type": "string",
                                  "minLength": 1
                                },
                                "url": {
                                  "type": "string",
                                  "format": "uri"
                                },
                                "current_value": {
                                  "type": "number",
                                  "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                                },
                                "boundary_value": {
                                  "type": "number"
                                },
                                "progress_pct": {
                                  "anyOf": [
                                    {
                                      "type": "number"
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                },
                                "boundary_progress_pct": {
                                  "anyOf": [
                                    {
                                      "type": "number"
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                },
                                "movement": {
                                  "anyOf": [
                                    {
                                      "type": "number"
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                },
                                "movement_pp": {
                                  "anyOf": [
                                    {
                                      "type": "number"
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                },
                                "evidence_count": {
                                  "type": "integer",
                                  "minimum": 0,
                                  "maximum": 9007199254740991
                                },
                                "last_recorded_at": {
                                  "anyOf": [
                                    {
                                      "type": "string",
                                      "format": "date-time",
                                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                },
                                "habit_expected_since_boundary": {
                                  "anyOf": [
                                    {
                                      "type": "integer",
                                      "minimum": 0,
                                      "maximum": 9007199254740991
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                },
                                "habit_logs_since_boundary": {
                                  "anyOf": [
                                    {
                                      "type": "integer",
                                      "minimum": 0,
                                      "maximum": 9007199254740991
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                },
                                "performance_share": {
                                  "anyOf": [
                                    {
                                      "type": "number"
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                }
                              },
                              "required": [
                                "id",
                                "objective_id",
                                "title",
                                "description",
                                "metric_type",
                                "start_value",
                                "target_value",
                                "unit",
                                "cadence",
                                "per",
                                "since",
                                "status",
                                "created_at",
                                "short_code",
                                "url",
                                "current_value",
                                "boundary_value",
                                "progress_pct",
                                "boundary_progress_pct",
                                "movement",
                                "movement_pp",
                                "evidence_count",
                                "last_recorded_at",
                                "habit_expected_since_boundary",
                                "habit_logs_since_boundary",
                                "performance_share"
                              ],
                              "additionalProperties": false
                            }
                          ]
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "action": {
                      "anyOf": [
                        {
                          "type": "object",
                          "properties": {
                            "id": {
                              "type": "string",
                              "format": "uuid",
                              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                            },
                            "cycle_id": {
                              "type": "string",
                              "format": "uuid",
                              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                            },
                            "objective_id": {
                              "anyOf": [
                                {
                                  "type": "string",
                                  "format": "uuid",
                                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            },
                            "title": {
                              "type": "string"
                            },
                            "description": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            },
                            "due_at": {
                              "anyOf": [
                                {
                                  "type": "string",
                                  "format": "date",
                                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                                  "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                                },
                                {
                                  "type": "null"
                                }
                              ],
                              "description": "UI label: Due. May be unset on a web draft; a set date cannot be cleared."
                            },
                            "status": {
                              "type": "string",
                              "enum": [
                                "open",
                                "in_progress",
                                "done"
                              ],
                              "description": "Action status: Open, In progress or Done. The To do UI group includes Open and In progress; Overdue is derived, not a status."
                            },
                            "sort_order": {
                              "anyOf": [
                                {
                                  "type": "number"
                                },
                                {
                                  "type": "null"
                                }
                              ],
                              "description": "Drag order within an action group; not a progress status."
                            },
                            "session_id": {
                              "anyOf": [
                                {
                                  "type": "string",
                                  "format": "uuid",
                                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            },
                            "created_at": {
                              "type": "string",
                              "format": "date-time",
                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                            },
                            "url": {
                              "type": "string",
                              "format": "uri"
                            },
                            "overdue": {
                              "type": "boolean"
                            },
                            "done_since_boundary": {
                              "type": "boolean"
                            }
                          },
                          "required": [
                            "id",
                            "cycle_id",
                            "objective_id",
                            "title",
                            "description",
                            "due_at",
                            "status",
                            "sort_order",
                            "session_id",
                            "created_at",
                            "url",
                            "overdue",
                            "done_since_boundary"
                          ],
                          "additionalProperties": false
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "note": {
                      "anyOf": [
                        {
                          "type": "object",
                          "properties": {
                            "id": {
                              "type": "string",
                              "format": "uuid",
                              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                            },
                            "text": {
                              "type": "string",
                              "minLength": 1
                            },
                            "recorded_at": {
                              "type": "string",
                              "format": "date-time",
                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                            },
                            "url": {
                              "type": "string",
                              "format": "uri"
                            },
                            "since_boundary": {
                              "type": "boolean"
                            }
                          },
                          "required": [
                            "id",
                            "text",
                            "recorded_at",
                            "url",
                            "since_boundary"
                          ],
                          "additionalProperties": false
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "session": {
                      "anyOf": [
                        {
                          "type": "object",
                          "properties": {
                            "id": {
                              "type": "string",
                              "format": "uuid",
                              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                            },
                            "vendor": {
                              "type": "string",
                              "enum": [
                                "claude",
                                "openai"
                              ],
                              "description": "Conversation host: claude is shown as Claude; openai is shown as ChatGPT."
                            },
                            "source_url": {
                              "anyOf": [
                                {
                                  "type": "string",
                                  "format": "uri"
                                },
                                {
                                  "type": "null"
                                }
                              ],
                              "description": "External conversation link used by Open the conversation. Not the app detail URL."
                            },
                            "type": {
                              "anyOf": [
                                {
                                  "type": "string",
                                  "enum": [
                                    "goal_setup",
                                    "check_in",
                                    "review",
                                    "open_coaching"
                                  ],
                                  "description": "Coaching session type: Goal setup, Check-in, Review or Open coaching. Separate from whether the session is still open."
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            },
                            "briefing_notes": {
                              "type": "string",
                              "description": "UI document: Briefing. Server-prepared coaching context."
                            },
                            "headline": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "null"
                                }
                              ],
                              "description": "One-line coaching-session summary used in session lists."
                            },
                            "summary_notes": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "null"
                                }
                              ],
                              "description": "UI document: Summary. Saved when the coaching session closes."
                            },
                            "started_at": {
                              "type": "string",
                              "format": "date-time",
                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                            },
                            "ended_at": {
                              "anyOf": [
                                {
                                  "type": "string",
                                  "format": "date-time",
                                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                },
                                {
                                  "type": "null"
                                }
                              ],
                              "description": "Closed when set; In progress when null. This is derived session state, not a stored status enum."
                            },
                            "url": {
                              "type": "string",
                              "format": "uri",
                              "description": "Internal app link to coaching session details; distinct from source_url."
                            },
                            "duration_minutes": {
                              "anyOf": [
                                {
                                  "type": "integer",
                                  "minimum": 0,
                                  "maximum": 9007199254740991
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            },
                            "actions_created": {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            },
                            "actions_reviewed": {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            }
                          },
                          "required": [
                            "id",
                            "vendor",
                            "source_url",
                            "type",
                            "briefing_notes",
                            "headline",
                            "summary_notes",
                            "started_at",
                            "ended_at",
                            "url",
                            "duration_minutes",
                            "actions_created",
                            "actions_reviewed"
                          ],
                          "additionalProperties": false
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "objective",
                    "result",
                    "action",
                    "note",
                    "session"
                  ],
                  "additionalProperties": false
                },
                "continuations": {
                  "type": "object",
                  "propertyNames": {
                    "type": "string",
                    "enum": [
                      "cycles",
                      "objectives",
                      "results",
                      "actions",
                      "notes",
                      "sessions",
                      "result_logs",
                      "habit_logs",
                      "action_logs",
                      "trend"
                    ]
                  },
                  "additionalProperties": {
                    "type": "string",
                    "minLength": 1
                  }
                }
              },
              "required": [
                "profile",
                "boundary",
                "cycle_line",
                "cycles",
                "cycle",
                "objectives",
                "results",
                "actions",
                "notes",
                "last_completed_session",
                "selected",
                "continuations"
              ],
              "additionalProperties": false
            },
            "progress_by_type": {
              "type": "object",
              "properties": {
                "objectives": {
                  "type": "object",
                  "properties": {
                    "on_track": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991
                    },
                    "off_track": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991
                    },
                    "completed": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991
                    }
                  },
                  "required": [
                    "on_track",
                    "off_track",
                    "completed"
                  ],
                  "additionalProperties": false
                },
                "results": {
                  "type": "object",
                  "properties": {
                    "in_play": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991
                    },
                    "in_progress": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991
                    },
                    "completed": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991
                    },
                    "average_progress_pct": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "in_play",
                    "in_progress",
                    "completed",
                    "average_progress_pct"
                  ],
                  "additionalProperties": false
                },
                "actions": {
                  "type": "object",
                  "properties": {
                    "open": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991
                    },
                    "in_progress": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991
                    },
                    "done": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991
                    },
                    "overdue": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991
                    }
                  },
                  "required": [
                    "open",
                    "in_progress",
                    "done",
                    "overdue"
                  ],
                  "additionalProperties": false
                },
                "notes": {
                  "type": "object",
                  "properties": {
                    "total": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991
                    },
                    "since_boundary": {
                      "type": "integer",
                      "minimum": -9007199254740991,
                      "maximum": 9007199254740991
                    }
                  },
                  "required": [
                    "total",
                    "since_boundary"
                  ],
                  "additionalProperties": false
                }
              },
              "required": [
                "objectives",
                "results",
                "actions",
                "notes"
              ],
              "additionalProperties": false
            },
            "session_history": {
              "type": "object",
              "properties": {
                "items": {
                  "maxItems": 6,
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      "vendor": {
                        "type": "string",
                        "enum": [
                          "claude",
                          "openai"
                        ],
                        "description": "Conversation host: claude is shown as Claude; openai is shown as ChatGPT."
                      },
                      "source_url": {
                        "anyOf": [
                          {
                            "type": "string",
                            "format": "uri"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "External conversation link used by Open the conversation. Not the app detail URL."
                      },
                      "type": {
                        "anyOf": [
                          {
                            "type": "string",
                            "enum": [
                              "goal_setup",
                              "check_in",
                              "review",
                              "open_coaching"
                            ],
                            "description": "Coaching session type: Goal setup, Check-in, Review or Open coaching. Separate from whether the session is still open."
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "briefing_notes": {
                        "type": "string",
                        "description": "UI document: Briefing. Server-prepared coaching context."
                      },
                      "headline": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "One-line coaching-session summary used in session lists."
                      },
                      "summary_notes": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "UI document: Summary. Saved when the coaching session closes."
                      },
                      "started_at": {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      "ended_at": {
                        "anyOf": [
                          {
                            "type": "string",
                            "format": "date-time",
                            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "Closed when set; In progress when null. This is derived session state, not a stored status enum."
                      },
                      "url": {
                        "type": "string",
                        "format": "uri",
                        "description": "Internal app link to coaching session details; distinct from source_url."
                      },
                      "duration_minutes": {
                        "anyOf": [
                          {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "actions_created": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      },
                      "actions_reviewed": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      }
                    },
                    "required": [
                      "id",
                      "vendor",
                      "source_url",
                      "type",
                      "briefing_notes",
                      "headline",
                      "summary_notes",
                      "started_at",
                      "ended_at",
                      "url",
                      "duration_minutes",
                      "actions_created",
                      "actions_reviewed"
                    ],
                    "additionalProperties": false
                  }
                },
                "next_cursor": {
                  "anyOf": [
                    {
                      "type": "string",
                      "minLength": 1
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "items",
                "next_cursor"
              ],
              "additionalProperties": false
            },
            "attention": {
              "type": "object",
              "properties": {
                "overdue_actions": {
                  "type": "object",
                  "properties": {
                    "items": {
                      "maxItems": 50,
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "id": {
                            "type": "string",
                            "format": "uuid",
                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                            "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                          },
                          "cycle_id": {
                            "type": "string",
                            "format": "uuid",
                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                            "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                          },
                          "objective_id": {
                            "anyOf": [
                              {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "title": {
                            "type": "string"
                          },
                          "description": {
                            "anyOf": [
                              {
                                "type": "string"
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "due_at": {
                            "anyOf": [
                              {
                                "type": "string",
                                "format": "date",
                                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                                "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                              },
                              {
                                "type": "null"
                              }
                            ],
                            "description": "UI label: Due. May be unset on a web draft; a set date cannot be cleared."
                          },
                          "status": {
                            "type": "string",
                            "enum": [
                              "open",
                              "in_progress",
                              "done"
                            ],
                            "description": "Action status: Open, In progress or Done. The To do UI group includes Open and In progress; Overdue is derived, not a status."
                          },
                          "sort_order": {
                            "anyOf": [
                              {
                                "type": "number"
                              },
                              {
                                "type": "null"
                              }
                            ],
                            "description": "Drag order within an action group; not a progress status."
                          },
                          "session_id": {
                            "anyOf": [
                              {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "created_at": {
                            "type": "string",
                            "format": "date-time",
                            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                          },
                          "url": {
                            "type": "string",
                            "format": "uri"
                          },
                          "overdue": {
                            "type": "boolean"
                          },
                          "done_since_boundary": {
                            "type": "boolean"
                          }
                        },
                        "required": [
                          "id",
                          "cycle_id",
                          "objective_id",
                          "title",
                          "description",
                          "due_at",
                          "status",
                          "sort_order",
                          "session_id",
                          "created_at",
                          "url",
                          "overdue",
                          "done_since_boundary"
                        ],
                        "additionalProperties": false
                      }
                    },
                    "next_cursor": {
                      "anyOf": [
                        {
                          "type": "string",
                          "minLength": 1
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "items",
                    "next_cursor"
                  ],
                  "additionalProperties": false
                },
                "never_updated_results": {
                  "type": "object",
                  "properties": {
                    "items": {
                      "maxItems": 50,
                      "type": "array",
                      "items": {
                        "oneOf": [
                          {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                              },
                              "objective_id": {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                              },
                              "title": {
                                "type": "string"
                              },
                              "description": {
                                "anyOf": [
                                  {
                                    "type": "string"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "metric_type": {
                                "type": "string",
                                "const": "number"
                              },
                              "start_value": {
                                "type": "number"
                              },
                              "target_value": {
                                "type": "number"
                              },
                              "unit": {
                                "anyOf": [
                                  {
                                    "type": "string"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ],
                                "description": "UI label: Unit. Used by Number and Performance results."
                              },
                              "cadence": {
                                "type": "null"
                              },
                              "per": {
                                "type": "null"
                              },
                              "since": {
                                "type": "null"
                              },
                              "status": {
                                "type": "string",
                                "enum": [
                                  "in_progress",
                                  "completed"
                                ],
                                "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                              },
                              "created_at": {
                                "type": "string",
                                "format": "date-time",
                                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                              },
                              "short_code": {
                                "type": "string",
                                "minLength": 1
                              },
                              "url": {
                                "type": "string",
                                "format": "uri"
                              },
                              "current_value": {
                                "type": "number",
                                "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                              },
                              "boundary_value": {
                                "type": "number"
                              },
                              "progress_pct": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "boundary_progress_pct": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "movement": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "movement_pp": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "evidence_count": {
                                "type": "integer",
                                "minimum": 0,
                                "maximum": 9007199254740991
                              },
                              "last_recorded_at": {
                                "anyOf": [
                                  {
                                    "type": "string",
                                    "format": "date-time",
                                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "habit_expected_since_boundary": {
                                "anyOf": [
                                  {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "habit_logs_since_boundary": {
                                "anyOf": [
                                  {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "performance_share": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              }
                            },
                            "required": [
                              "id",
                              "objective_id",
                              "title",
                              "description",
                              "metric_type",
                              "start_value",
                              "target_value",
                              "unit",
                              "cadence",
                              "per",
                              "since",
                              "status",
                              "created_at",
                              "short_code",
                              "url",
                              "current_value",
                              "boundary_value",
                              "progress_pct",
                              "boundary_progress_pct",
                              "movement",
                              "movement_pp",
                              "evidence_count",
                              "last_recorded_at",
                              "habit_expected_since_boundary",
                              "habit_logs_since_boundary",
                              "performance_share"
                            ],
                            "additionalProperties": false
                          },
                          {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                              },
                              "objective_id": {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                              },
                              "title": {
                                "type": "string"
                              },
                              "description": {
                                "anyOf": [
                                  {
                                    "type": "string"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "metric_type": {
                                "type": "string",
                                "const": "percentage"
                              },
                              "start_value": {
                                "type": "number",
                                "minimum": 0,
                                "maximum": 100
                              },
                              "target_value": {
                                "type": "number",
                                "minimum": 0,
                                "maximum": 100
                              },
                              "unit": {
                                "type": "null"
                              },
                              "cadence": {
                                "type": "null"
                              },
                              "per": {
                                "type": "null"
                              },
                              "since": {
                                "type": "null"
                              },
                              "status": {
                                "type": "string",
                                "enum": [
                                  "in_progress",
                                  "completed"
                                ],
                                "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                              },
                              "created_at": {
                                "type": "string",
                                "format": "date-time",
                                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                              },
                              "short_code": {
                                "type": "string",
                                "minLength": 1
                              },
                              "url": {
                                "type": "string",
                                "format": "uri"
                              },
                              "current_value": {
                                "type": "number",
                                "minimum": 0,
                                "maximum": 100
                              },
                              "boundary_value": {
                                "type": "number",
                                "minimum": 0,
                                "maximum": 100
                              },
                              "progress_pct": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "boundary_progress_pct": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "movement": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "movement_pp": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "evidence_count": {
                                "type": "integer",
                                "minimum": 0,
                                "maximum": 9007199254740991
                              },
                              "last_recorded_at": {
                                "anyOf": [
                                  {
                                    "type": "string",
                                    "format": "date-time",
                                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "habit_expected_since_boundary": {
                                "anyOf": [
                                  {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "habit_logs_since_boundary": {
                                "anyOf": [
                                  {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "performance_share": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              }
                            },
                            "required": [
                              "id",
                              "objective_id",
                              "title",
                              "description",
                              "metric_type",
                              "start_value",
                              "target_value",
                              "unit",
                              "cadence",
                              "per",
                              "since",
                              "status",
                              "created_at",
                              "short_code",
                              "url",
                              "current_value",
                              "boundary_value",
                              "progress_pct",
                              "boundary_progress_pct",
                              "movement",
                              "movement_pp",
                              "evidence_count",
                              "last_recorded_at",
                              "habit_expected_since_boundary",
                              "habit_logs_since_boundary",
                              "performance_share"
                            ],
                            "additionalProperties": false
                          },
                          {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                              },
                              "objective_id": {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                              },
                              "title": {
                                "type": "string"
                              },
                              "description": {
                                "anyOf": [
                                  {
                                    "type": "string"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "metric_type": {
                                "type": "string",
                                "const": "milestone"
                              },
                              "start_value": {
                                "type": "number",
                                "const": 0
                              },
                              "target_value": {
                                "type": "number",
                                "const": 1
                              },
                              "unit": {
                                "type": "null"
                              },
                              "cadence": {
                                "type": "null"
                              },
                              "per": {
                                "type": "null"
                              },
                              "since": {
                                "type": "null"
                              },
                              "status": {
                                "type": "string",
                                "enum": [
                                  "in_progress",
                                  "completed"
                                ],
                                "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                              },
                              "created_at": {
                                "type": "string",
                                "format": "date-time",
                                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                              },
                              "short_code": {
                                "type": "string",
                                "minLength": 1
                              },
                              "url": {
                                "type": "string",
                                "format": "uri"
                              },
                              "current_value": {
                                "anyOf": [
                                  {
                                    "type": "number",
                                    "const": 0
                                  },
                                  {
                                    "type": "number",
                                    "const": 1
                                  }
                                ]
                              },
                              "boundary_value": {
                                "anyOf": [
                                  {
                                    "type": "number",
                                    "const": 0
                                  },
                                  {
                                    "type": "number",
                                    "const": 1
                                  }
                                ]
                              },
                              "progress_pct": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "boundary_progress_pct": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "movement": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "movement_pp": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "evidence_count": {
                                "type": "integer",
                                "minimum": 0,
                                "maximum": 9007199254740991
                              },
                              "last_recorded_at": {
                                "anyOf": [
                                  {
                                    "type": "string",
                                    "format": "date-time",
                                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "habit_expected_since_boundary": {
                                "anyOf": [
                                  {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "habit_logs_since_boundary": {
                                "anyOf": [
                                  {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "performance_share": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              }
                            },
                            "required": [
                              "id",
                              "objective_id",
                              "title",
                              "description",
                              "metric_type",
                              "start_value",
                              "target_value",
                              "unit",
                              "cadence",
                              "per",
                              "since",
                              "status",
                              "created_at",
                              "short_code",
                              "url",
                              "current_value",
                              "boundary_value",
                              "progress_pct",
                              "boundary_progress_pct",
                              "movement",
                              "movement_pp",
                              "evidence_count",
                              "last_recorded_at",
                              "habit_expected_since_boundary",
                              "habit_logs_since_boundary",
                              "performance_share"
                            ],
                            "additionalProperties": false
                          },
                          {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                              },
                              "objective_id": {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                              },
                              "title": {
                                "type": "string"
                              },
                              "description": {
                                "anyOf": [
                                  {
                                    "type": "string"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "metric_type": {
                                "type": "string",
                                "const": "habit"
                              },
                              "start_value": {
                                "type": "number",
                                "const": 0
                              },
                              "target_value": {
                                "type": "number",
                                "const": 100
                              },
                              "unit": {
                                "type": "null"
                              },
                              "cadence": {
                                "type": "string",
                                "enum": [
                                  "weekly",
                                  "monthly"
                                ],
                                "description": "UI label: Cadence. Weekly or Monthly; per supplies the Times value."
                              },
                              "per": {
                                "type": "integer",
                                "exclusiveMinimum": 0,
                                "maximum": 9007199254740991
                              },
                              "since": {
                                "type": "string",
                                "format": "date",
                                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                                "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                              },
                              "status": {
                                "type": "string",
                                "enum": [
                                  "in_progress",
                                  "completed"
                                ],
                                "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                              },
                              "created_at": {
                                "type": "string",
                                "format": "date-time",
                                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                              },
                              "short_code": {
                                "type": "string",
                                "minLength": 1
                              },
                              "url": {
                                "type": "string",
                                "format": "uri"
                              },
                              "current_value": {
                                "type": "number",
                                "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                              },
                              "boundary_value": {
                                "type": "number"
                              },
                              "progress_pct": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "boundary_progress_pct": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "movement": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "movement_pp": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "evidence_count": {
                                "type": "integer",
                                "minimum": 0,
                                "maximum": 9007199254740991
                              },
                              "last_recorded_at": {
                                "anyOf": [
                                  {
                                    "type": "string",
                                    "format": "date-time",
                                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "habit_expected_since_boundary": {
                                "anyOf": [
                                  {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "habit_logs_since_boundary": {
                                "anyOf": [
                                  {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "performance_share": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              }
                            },
                            "required": [
                              "id",
                              "objective_id",
                              "title",
                              "description",
                              "metric_type",
                              "start_value",
                              "target_value",
                              "unit",
                              "cadence",
                              "per",
                              "since",
                              "status",
                              "created_at",
                              "short_code",
                              "url",
                              "current_value",
                              "boundary_value",
                              "progress_pct",
                              "boundary_progress_pct",
                              "movement",
                              "movement_pp",
                              "evidence_count",
                              "last_recorded_at",
                              "habit_expected_since_boundary",
                              "habit_logs_since_boundary",
                              "performance_share"
                            ],
                            "additionalProperties": false
                          },
                          {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                              },
                              "objective_id": {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                              },
                              "title": {
                                "type": "string"
                              },
                              "description": {
                                "anyOf": [
                                  {
                                    "type": "string"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "metric_type": {
                                "type": "string",
                                "const": "performance"
                              },
                              "start_value": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ],
                                "description": "UI label: Start. Metric baseline; habit baselines are derived rather than stored."
                              },
                              "target_value": {
                                "type": "number"
                              },
                              "unit": {
                                "anyOf": [
                                  {
                                    "type": "string"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ],
                                "description": "UI label: Unit. Used by Number and Performance results."
                              },
                              "cadence": {
                                "type": "null"
                              },
                              "per": {
                                "type": "null"
                              },
                              "since": {
                                "type": "string",
                                "format": "date",
                                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                                "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                              },
                              "status": {
                                "type": "string",
                                "enum": [
                                  "in_progress",
                                  "completed"
                                ],
                                "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                              },
                              "created_at": {
                                "type": "string",
                                "format": "date-time",
                                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                              },
                              "short_code": {
                                "type": "string",
                                "minLength": 1
                              },
                              "url": {
                                "type": "string",
                                "format": "uri"
                              },
                              "current_value": {
                                "type": "number",
                                "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                              },
                              "boundary_value": {
                                "type": "number"
                              },
                              "progress_pct": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "boundary_progress_pct": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "movement": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "movement_pp": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "evidence_count": {
                                "type": "integer",
                                "minimum": 0,
                                "maximum": 9007199254740991
                              },
                              "last_recorded_at": {
                                "anyOf": [
                                  {
                                    "type": "string",
                                    "format": "date-time",
                                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "habit_expected_since_boundary": {
                                "anyOf": [
                                  {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "habit_logs_since_boundary": {
                                "anyOf": [
                                  {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "performance_share": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              }
                            },
                            "required": [
                              "id",
                              "objective_id",
                              "title",
                              "description",
                              "metric_type",
                              "start_value",
                              "target_value",
                              "unit",
                              "cadence",
                              "per",
                              "since",
                              "status",
                              "created_at",
                              "short_code",
                              "url",
                              "current_value",
                              "boundary_value",
                              "progress_pct",
                              "boundary_progress_pct",
                              "movement",
                              "movement_pp",
                              "evidence_count",
                              "last_recorded_at",
                              "habit_expected_since_boundary",
                              "habit_logs_since_boundary",
                              "performance_share"
                            ],
                            "additionalProperties": false
                          }
                        ]
                      }
                    },
                    "next_cursor": {
                      "anyOf": [
                        {
                          "type": "string",
                          "minLength": 1
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "items",
                    "next_cursor"
                  ],
                  "additionalProperties": false
                },
                "silent_results": {
                  "type": "object",
                  "properties": {
                    "items": {
                      "maxItems": 50,
                      "type": "array",
                      "items": {
                        "oneOf": [
                          {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                              },
                              "objective_id": {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                              },
                              "title": {
                                "type": "string"
                              },
                              "description": {
                                "anyOf": [
                                  {
                                    "type": "string"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "metric_type": {
                                "type": "string",
                                "const": "number"
                              },
                              "start_value": {
                                "type": "number"
                              },
                              "target_value": {
                                "type": "number"
                              },
                              "unit": {
                                "anyOf": [
                                  {
                                    "type": "string"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ],
                                "description": "UI label: Unit. Used by Number and Performance results."
                              },
                              "cadence": {
                                "type": "null"
                              },
                              "per": {
                                "type": "null"
                              },
                              "since": {
                                "type": "null"
                              },
                              "status": {
                                "type": "string",
                                "enum": [
                                  "in_progress",
                                  "completed"
                                ],
                                "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                              },
                              "created_at": {
                                "type": "string",
                                "format": "date-time",
                                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                              },
                              "short_code": {
                                "type": "string",
                                "minLength": 1
                              },
                              "url": {
                                "type": "string",
                                "format": "uri"
                              },
                              "current_value": {
                                "type": "number",
                                "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                              },
                              "boundary_value": {
                                "type": "number"
                              },
                              "progress_pct": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "boundary_progress_pct": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "movement": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "movement_pp": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "evidence_count": {
                                "type": "integer",
                                "minimum": 0,
                                "maximum": 9007199254740991
                              },
                              "last_recorded_at": {
                                "anyOf": [
                                  {
                                    "type": "string",
                                    "format": "date-time",
                                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "habit_expected_since_boundary": {
                                "anyOf": [
                                  {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "habit_logs_since_boundary": {
                                "anyOf": [
                                  {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "performance_share": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              }
                            },
                            "required": [
                              "id",
                              "objective_id",
                              "title",
                              "description",
                              "metric_type",
                              "start_value",
                              "target_value",
                              "unit",
                              "cadence",
                              "per",
                              "since",
                              "status",
                              "created_at",
                              "short_code",
                              "url",
                              "current_value",
                              "boundary_value",
                              "progress_pct",
                              "boundary_progress_pct",
                              "movement",
                              "movement_pp",
                              "evidence_count",
                              "last_recorded_at",
                              "habit_expected_since_boundary",
                              "habit_logs_since_boundary",
                              "performance_share"
                            ],
                            "additionalProperties": false
                          },
                          {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                              },
                              "objective_id": {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                              },
                              "title": {
                                "type": "string"
                              },
                              "description": {
                                "anyOf": [
                                  {
                                    "type": "string"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "metric_type": {
                                "type": "string",
                                "const": "percentage"
                              },
                              "start_value": {
                                "type": "number",
                                "minimum": 0,
                                "maximum": 100
                              },
                              "target_value": {
                                "type": "number",
                                "minimum": 0,
                                "maximum": 100
                              },
                              "unit": {
                                "type": "null"
                              },
                              "cadence": {
                                "type": "null"
                              },
                              "per": {
                                "type": "null"
                              },
                              "since": {
                                "type": "null"
                              },
                              "status": {
                                "type": "string",
                                "enum": [
                                  "in_progress",
                                  "completed"
                                ],
                                "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                              },
                              "created_at": {
                                "type": "string",
                                "format": "date-time",
                                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                              },
                              "short_code": {
                                "type": "string",
                                "minLength": 1
                              },
                              "url": {
                                "type": "string",
                                "format": "uri"
                              },
                              "current_value": {
                                "type": "number",
                                "minimum": 0,
                                "maximum": 100
                              },
                              "boundary_value": {
                                "type": "number",
                                "minimum": 0,
                                "maximum": 100
                              },
                              "progress_pct": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "boundary_progress_pct": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "movement": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "movement_pp": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "evidence_count": {
                                "type": "integer",
                                "minimum": 0,
                                "maximum": 9007199254740991
                              },
                              "last_recorded_at": {
                                "anyOf": [
                                  {
                                    "type": "string",
                                    "format": "date-time",
                                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "habit_expected_since_boundary": {
                                "anyOf": [
                                  {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "habit_logs_since_boundary": {
                                "anyOf": [
                                  {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "performance_share": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              }
                            },
                            "required": [
                              "id",
                              "objective_id",
                              "title",
                              "description",
                              "metric_type",
                              "start_value",
                              "target_value",
                              "unit",
                              "cadence",
                              "per",
                              "since",
                              "status",
                              "created_at",
                              "short_code",
                              "url",
                              "current_value",
                              "boundary_value",
                              "progress_pct",
                              "boundary_progress_pct",
                              "movement",
                              "movement_pp",
                              "evidence_count",
                              "last_recorded_at",
                              "habit_expected_since_boundary",
                              "habit_logs_since_boundary",
                              "performance_share"
                            ],
                            "additionalProperties": false
                          },
                          {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                              },
                              "objective_id": {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                              },
                              "title": {
                                "type": "string"
                              },
                              "description": {
                                "anyOf": [
                                  {
                                    "type": "string"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "metric_type": {
                                "type": "string",
                                "const": "milestone"
                              },
                              "start_value": {
                                "type": "number",
                                "const": 0
                              },
                              "target_value": {
                                "type": "number",
                                "const": 1
                              },
                              "unit": {
                                "type": "null"
                              },
                              "cadence": {
                                "type": "null"
                              },
                              "per": {
                                "type": "null"
                              },
                              "since": {
                                "type": "null"
                              },
                              "status": {
                                "type": "string",
                                "enum": [
                                  "in_progress",
                                  "completed"
                                ],
                                "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                              },
                              "created_at": {
                                "type": "string",
                                "format": "date-time",
                                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                              },
                              "short_code": {
                                "type": "string",
                                "minLength": 1
                              },
                              "url": {
                                "type": "string",
                                "format": "uri"
                              },
                              "current_value": {
                                "anyOf": [
                                  {
                                    "type": "number",
                                    "const": 0
                                  },
                                  {
                                    "type": "number",
                                    "const": 1
                                  }
                                ]
                              },
                              "boundary_value": {
                                "anyOf": [
                                  {
                                    "type": "number",
                                    "const": 0
                                  },
                                  {
                                    "type": "number",
                                    "const": 1
                                  }
                                ]
                              },
                              "progress_pct": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "boundary_progress_pct": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "movement": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "movement_pp": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "evidence_count": {
                                "type": "integer",
                                "minimum": 0,
                                "maximum": 9007199254740991
                              },
                              "last_recorded_at": {
                                "anyOf": [
                                  {
                                    "type": "string",
                                    "format": "date-time",
                                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "habit_expected_since_boundary": {
                                "anyOf": [
                                  {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "habit_logs_since_boundary": {
                                "anyOf": [
                                  {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "performance_share": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              }
                            },
                            "required": [
                              "id",
                              "objective_id",
                              "title",
                              "description",
                              "metric_type",
                              "start_value",
                              "target_value",
                              "unit",
                              "cadence",
                              "per",
                              "since",
                              "status",
                              "created_at",
                              "short_code",
                              "url",
                              "current_value",
                              "boundary_value",
                              "progress_pct",
                              "boundary_progress_pct",
                              "movement",
                              "movement_pp",
                              "evidence_count",
                              "last_recorded_at",
                              "habit_expected_since_boundary",
                              "habit_logs_since_boundary",
                              "performance_share"
                            ],
                            "additionalProperties": false
                          },
                          {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                              },
                              "objective_id": {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                              },
                              "title": {
                                "type": "string"
                              },
                              "description": {
                                "anyOf": [
                                  {
                                    "type": "string"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "metric_type": {
                                "type": "string",
                                "const": "habit"
                              },
                              "start_value": {
                                "type": "number",
                                "const": 0
                              },
                              "target_value": {
                                "type": "number",
                                "const": 100
                              },
                              "unit": {
                                "type": "null"
                              },
                              "cadence": {
                                "type": "string",
                                "enum": [
                                  "weekly",
                                  "monthly"
                                ],
                                "description": "UI label: Cadence. Weekly or Monthly; per supplies the Times value."
                              },
                              "per": {
                                "type": "integer",
                                "exclusiveMinimum": 0,
                                "maximum": 9007199254740991
                              },
                              "since": {
                                "type": "string",
                                "format": "date",
                                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                                "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                              },
                              "status": {
                                "type": "string",
                                "enum": [
                                  "in_progress",
                                  "completed"
                                ],
                                "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                              },
                              "created_at": {
                                "type": "string",
                                "format": "date-time",
                                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                              },
                              "short_code": {
                                "type": "string",
                                "minLength": 1
                              },
                              "url": {
                                "type": "string",
                                "format": "uri"
                              },
                              "current_value": {
                                "type": "number",
                                "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                              },
                              "boundary_value": {
                                "type": "number"
                              },
                              "progress_pct": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "boundary_progress_pct": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "movement": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "movement_pp": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "evidence_count": {
                                "type": "integer",
                                "minimum": 0,
                                "maximum": 9007199254740991
                              },
                              "last_recorded_at": {
                                "anyOf": [
                                  {
                                    "type": "string",
                                    "format": "date-time",
                                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "habit_expected_since_boundary": {
                                "anyOf": [
                                  {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "habit_logs_since_boundary": {
                                "anyOf": [
                                  {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "performance_share": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              }
                            },
                            "required": [
                              "id",
                              "objective_id",
                              "title",
                              "description",
                              "metric_type",
                              "start_value",
                              "target_value",
                              "unit",
                              "cadence",
                              "per",
                              "since",
                              "status",
                              "created_at",
                              "short_code",
                              "url",
                              "current_value",
                              "boundary_value",
                              "progress_pct",
                              "boundary_progress_pct",
                              "movement",
                              "movement_pp",
                              "evidence_count",
                              "last_recorded_at",
                              "habit_expected_since_boundary",
                              "habit_logs_since_boundary",
                              "performance_share"
                            ],
                            "additionalProperties": false
                          },
                          {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                              },
                              "objective_id": {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                              },
                              "title": {
                                "type": "string"
                              },
                              "description": {
                                "anyOf": [
                                  {
                                    "type": "string"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "metric_type": {
                                "type": "string",
                                "const": "performance"
                              },
                              "start_value": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ],
                                "description": "UI label: Start. Metric baseline; habit baselines are derived rather than stored."
                              },
                              "target_value": {
                                "type": "number"
                              },
                              "unit": {
                                "anyOf": [
                                  {
                                    "type": "string"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ],
                                "description": "UI label: Unit. Used by Number and Performance results."
                              },
                              "cadence": {
                                "type": "null"
                              },
                              "per": {
                                "type": "null"
                              },
                              "since": {
                                "type": "string",
                                "format": "date",
                                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                                "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                              },
                              "status": {
                                "type": "string",
                                "enum": [
                                  "in_progress",
                                  "completed"
                                ],
                                "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                              },
                              "created_at": {
                                "type": "string",
                                "format": "date-time",
                                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                              },
                              "short_code": {
                                "type": "string",
                                "minLength": 1
                              },
                              "url": {
                                "type": "string",
                                "format": "uri"
                              },
                              "current_value": {
                                "type": "number",
                                "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                              },
                              "boundary_value": {
                                "type": "number"
                              },
                              "progress_pct": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "boundary_progress_pct": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "movement": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "movement_pp": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "evidence_count": {
                                "type": "integer",
                                "minimum": 0,
                                "maximum": 9007199254740991
                              },
                              "last_recorded_at": {
                                "anyOf": [
                                  {
                                    "type": "string",
                                    "format": "date-time",
                                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "habit_expected_since_boundary": {
                                "anyOf": [
                                  {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "habit_logs_since_boundary": {
                                "anyOf": [
                                  {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "performance_share": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              }
                            },
                            "required": [
                              "id",
                              "objective_id",
                              "title",
                              "description",
                              "metric_type",
                              "start_value",
                              "target_value",
                              "unit",
                              "cadence",
                              "per",
                              "since",
                              "status",
                              "created_at",
                              "short_code",
                              "url",
                              "current_value",
                              "boundary_value",
                              "progress_pct",
                              "boundary_progress_pct",
                              "movement",
                              "movement_pp",
                              "evidence_count",
                              "last_recorded_at",
                              "habit_expected_since_boundary",
                              "habit_logs_since_boundary",
                              "performance_share"
                            ],
                            "additionalProperties": false
                          }
                        ]
                      }
                    },
                    "next_cursor": {
                      "anyOf": [
                        {
                          "type": "string",
                          "minLength": 1
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "items",
                    "next_cursor"
                  ],
                  "additionalProperties": false
                },
                "unmarked_habits": {
                  "type": "object",
                  "properties": {
                    "items": {
                      "maxItems": 50,
                      "type": "array",
                      "items": {
                        "oneOf": [
                          {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                              },
                              "objective_id": {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                              },
                              "title": {
                                "type": "string"
                              },
                              "description": {
                                "anyOf": [
                                  {
                                    "type": "string"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "metric_type": {
                                "type": "string",
                                "const": "number"
                              },
                              "start_value": {
                                "type": "number"
                              },
                              "target_value": {
                                "type": "number"
                              },
                              "unit": {
                                "anyOf": [
                                  {
                                    "type": "string"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ],
                                "description": "UI label: Unit. Used by Number and Performance results."
                              },
                              "cadence": {
                                "type": "null"
                              },
                              "per": {
                                "type": "null"
                              },
                              "since": {
                                "type": "null"
                              },
                              "status": {
                                "type": "string",
                                "enum": [
                                  "in_progress",
                                  "completed"
                                ],
                                "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                              },
                              "created_at": {
                                "type": "string",
                                "format": "date-time",
                                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                              },
                              "short_code": {
                                "type": "string",
                                "minLength": 1
                              },
                              "url": {
                                "type": "string",
                                "format": "uri"
                              },
                              "current_value": {
                                "type": "number",
                                "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                              },
                              "boundary_value": {
                                "type": "number"
                              },
                              "progress_pct": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "boundary_progress_pct": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "movement": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "movement_pp": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "evidence_count": {
                                "type": "integer",
                                "minimum": 0,
                                "maximum": 9007199254740991
                              },
                              "last_recorded_at": {
                                "anyOf": [
                                  {
                                    "type": "string",
                                    "format": "date-time",
                                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "habit_expected_since_boundary": {
                                "anyOf": [
                                  {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "habit_logs_since_boundary": {
                                "anyOf": [
                                  {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "performance_share": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              }
                            },
                            "required": [
                              "id",
                              "objective_id",
                              "title",
                              "description",
                              "metric_type",
                              "start_value",
                              "target_value",
                              "unit",
                              "cadence",
                              "per",
                              "since",
                              "status",
                              "created_at",
                              "short_code",
                              "url",
                              "current_value",
                              "boundary_value",
                              "progress_pct",
                              "boundary_progress_pct",
                              "movement",
                              "movement_pp",
                              "evidence_count",
                              "last_recorded_at",
                              "habit_expected_since_boundary",
                              "habit_logs_since_boundary",
                              "performance_share"
                            ],
                            "additionalProperties": false
                          },
                          {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                              },
                              "objective_id": {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                              },
                              "title": {
                                "type": "string"
                              },
                              "description": {
                                "anyOf": [
                                  {
                                    "type": "string"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "metric_type": {
                                "type": "string",
                                "const": "percentage"
                              },
                              "start_value": {
                                "type": "number",
                                "minimum": 0,
                                "maximum": 100
                              },
                              "target_value": {
                                "type": "number",
                                "minimum": 0,
                                "maximum": 100
                              },
                              "unit": {
                                "type": "null"
                              },
                              "cadence": {
                                "type": "null"
                              },
                              "per": {
                                "type": "null"
                              },
                              "since": {
                                "type": "null"
                              },
                              "status": {
                                "type": "string",
                                "enum": [
                                  "in_progress",
                                  "completed"
                                ],
                                "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                              },
                              "created_at": {
                                "type": "string",
                                "format": "date-time",
                                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                              },
                              "short_code": {
                                "type": "string",
                                "minLength": 1
                              },
                              "url": {
                                "type": "string",
                                "format": "uri"
                              },
                              "current_value": {
                                "type": "number",
                                "minimum": 0,
                                "maximum": 100
                              },
                              "boundary_value": {
                                "type": "number",
                                "minimum": 0,
                                "maximum": 100
                              },
                              "progress_pct": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "boundary_progress_pct": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "movement": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "movement_pp": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "evidence_count": {
                                "type": "integer",
                                "minimum": 0,
                                "maximum": 9007199254740991
                              },
                              "last_recorded_at": {
                                "anyOf": [
                                  {
                                    "type": "string",
                                    "format": "date-time",
                                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "habit_expected_since_boundary": {
                                "anyOf": [
                                  {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "habit_logs_since_boundary": {
                                "anyOf": [
                                  {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "performance_share": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              }
                            },
                            "required": [
                              "id",
                              "objective_id",
                              "title",
                              "description",
                              "metric_type",
                              "start_value",
                              "target_value",
                              "unit",
                              "cadence",
                              "per",
                              "since",
                              "status",
                              "created_at",
                              "short_code",
                              "url",
                              "current_value",
                              "boundary_value",
                              "progress_pct",
                              "boundary_progress_pct",
                              "movement",
                              "movement_pp",
                              "evidence_count",
                              "last_recorded_at",
                              "habit_expected_since_boundary",
                              "habit_logs_since_boundary",
                              "performance_share"
                            ],
                            "additionalProperties": false
                          },
                          {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                              },
                              "objective_id": {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                              },
                              "title": {
                                "type": "string"
                              },
                              "description": {
                                "anyOf": [
                                  {
                                    "type": "string"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "metric_type": {
                                "type": "string",
                                "const": "milestone"
                              },
                              "start_value": {
                                "type": "number",
                                "const": 0
                              },
                              "target_value": {
                                "type": "number",
                                "const": 1
                              },
                              "unit": {
                                "type": "null"
                              },
                              "cadence": {
                                "type": "null"
                              },
                              "per": {
                                "type": "null"
                              },
                              "since": {
                                "type": "null"
                              },
                              "status": {
                                "type": "string",
                                "enum": [
                                  "in_progress",
                                  "completed"
                                ],
                                "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                              },
                              "created_at": {
                                "type": "string",
                                "format": "date-time",
                                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                              },
                              "short_code": {
                                "type": "string",
                                "minLength": 1
                              },
                              "url": {
                                "type": "string",
                                "format": "uri"
                              },
                              "current_value": {
                                "anyOf": [
                                  {
                                    "type": "number",
                                    "const": 0
                                  },
                                  {
                                    "type": "number",
                                    "const": 1
                                  }
                                ]
                              },
                              "boundary_value": {
                                "anyOf": [
                                  {
                                    "type": "number",
                                    "const": 0
                                  },
                                  {
                                    "type": "number",
                                    "const": 1
                                  }
                                ]
                              },
                              "progress_pct": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "boundary_progress_pct": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "movement": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "movement_pp": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "evidence_count": {
                                "type": "integer",
                                "minimum": 0,
                                "maximum": 9007199254740991
                              },
                              "last_recorded_at": {
                                "anyOf": [
                                  {
                                    "type": "string",
                                    "format": "date-time",
                                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "habit_expected_since_boundary": {
                                "anyOf": [
                                  {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "habit_logs_since_boundary": {
                                "anyOf": [
                                  {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "performance_share": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              }
                            },
                            "required": [
                              "id",
                              "objective_id",
                              "title",
                              "description",
                              "metric_type",
                              "start_value",
                              "target_value",
                              "unit",
                              "cadence",
                              "per",
                              "since",
                              "status",
                              "created_at",
                              "short_code",
                              "url",
                              "current_value",
                              "boundary_value",
                              "progress_pct",
                              "boundary_progress_pct",
                              "movement",
                              "movement_pp",
                              "evidence_count",
                              "last_recorded_at",
                              "habit_expected_since_boundary",
                              "habit_logs_since_boundary",
                              "performance_share"
                            ],
                            "additionalProperties": false
                          },
                          {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                              },
                              "objective_id": {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                              },
                              "title": {
                                "type": "string"
                              },
                              "description": {
                                "anyOf": [
                                  {
                                    "type": "string"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "metric_type": {
                                "type": "string",
                                "const": "habit"
                              },
                              "start_value": {
                                "type": "number",
                                "const": 0
                              },
                              "target_value": {
                                "type": "number",
                                "const": 100
                              },
                              "unit": {
                                "type": "null"
                              },
                              "cadence": {
                                "type": "string",
                                "enum": [
                                  "weekly",
                                  "monthly"
                                ],
                                "description": "UI label: Cadence. Weekly or Monthly; per supplies the Times value."
                              },
                              "per": {
                                "type": "integer",
                                "exclusiveMinimum": 0,
                                "maximum": 9007199254740991
                              },
                              "since": {
                                "type": "string",
                                "format": "date",
                                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                                "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                              },
                              "status": {
                                "type": "string",
                                "enum": [
                                  "in_progress",
                                  "completed"
                                ],
                                "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                              },
                              "created_at": {
                                "type": "string",
                                "format": "date-time",
                                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                              },
                              "short_code": {
                                "type": "string",
                                "minLength": 1
                              },
                              "url": {
                                "type": "string",
                                "format": "uri"
                              },
                              "current_value": {
                                "type": "number",
                                "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                              },
                              "boundary_value": {
                                "type": "number"
                              },
                              "progress_pct": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "boundary_progress_pct": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "movement": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "movement_pp": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "evidence_count": {
                                "type": "integer",
                                "minimum": 0,
                                "maximum": 9007199254740991
                              },
                              "last_recorded_at": {
                                "anyOf": [
                                  {
                                    "type": "string",
                                    "format": "date-time",
                                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "habit_expected_since_boundary": {
                                "anyOf": [
                                  {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "habit_logs_since_boundary": {
                                "anyOf": [
                                  {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "performance_share": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              }
                            },
                            "required": [
                              "id",
                              "objective_id",
                              "title",
                              "description",
                              "metric_type",
                              "start_value",
                              "target_value",
                              "unit",
                              "cadence",
                              "per",
                              "since",
                              "status",
                              "created_at",
                              "short_code",
                              "url",
                              "current_value",
                              "boundary_value",
                              "progress_pct",
                              "boundary_progress_pct",
                              "movement",
                              "movement_pp",
                              "evidence_count",
                              "last_recorded_at",
                              "habit_expected_since_boundary",
                              "habit_logs_since_boundary",
                              "performance_share"
                            ],
                            "additionalProperties": false
                          },
                          {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                              },
                              "objective_id": {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                              },
                              "title": {
                                "type": "string"
                              },
                              "description": {
                                "anyOf": [
                                  {
                                    "type": "string"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "metric_type": {
                                "type": "string",
                                "const": "performance"
                              },
                              "start_value": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ],
                                "description": "UI label: Start. Metric baseline; habit baselines are derived rather than stored."
                              },
                              "target_value": {
                                "type": "number"
                              },
                              "unit": {
                                "anyOf": [
                                  {
                                    "type": "string"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ],
                                "description": "UI label: Unit. Used by Number and Performance results."
                              },
                              "cadence": {
                                "type": "null"
                              },
                              "per": {
                                "type": "null"
                              },
                              "since": {
                                "type": "string",
                                "format": "date",
                                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                                "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                              },
                              "status": {
                                "type": "string",
                                "enum": [
                                  "in_progress",
                                  "completed"
                                ],
                                "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                              },
                              "created_at": {
                                "type": "string",
                                "format": "date-time",
                                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                              },
                              "short_code": {
                                "type": "string",
                                "minLength": 1
                              },
                              "url": {
                                "type": "string",
                                "format": "uri"
                              },
                              "current_value": {
                                "type": "number",
                                "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                              },
                              "boundary_value": {
                                "type": "number"
                              },
                              "progress_pct": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "boundary_progress_pct": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "movement": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "movement_pp": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "evidence_count": {
                                "type": "integer",
                                "minimum": 0,
                                "maximum": 9007199254740991
                              },
                              "last_recorded_at": {
                                "anyOf": [
                                  {
                                    "type": "string",
                                    "format": "date-time",
                                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "habit_expected_since_boundary": {
                                "anyOf": [
                                  {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "habit_logs_since_boundary": {
                                "anyOf": [
                                  {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "performance_share": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              }
                            },
                            "required": [
                              "id",
                              "objective_id",
                              "title",
                              "description",
                              "metric_type",
                              "start_value",
                              "target_value",
                              "unit",
                              "cadence",
                              "per",
                              "since",
                              "status",
                              "created_at",
                              "short_code",
                              "url",
                              "current_value",
                              "boundary_value",
                              "progress_pct",
                              "boundary_progress_pct",
                              "movement",
                              "movement_pp",
                              "evidence_count",
                              "last_recorded_at",
                              "habit_expected_since_boundary",
                              "habit_logs_since_boundary",
                              "performance_share"
                            ],
                            "additionalProperties": false
                          }
                        ]
                      }
                    },
                    "next_cursor": {
                      "anyOf": [
                        {
                          "type": "string",
                          "minLength": 1
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "items",
                    "next_cursor"
                  ],
                  "additionalProperties": false
                }
              },
              "required": [
                "overdue_actions",
                "never_updated_results",
                "silent_results",
                "unmarked_habits"
              ],
              "additionalProperties": false
            },
            "pace": {
              "type": "string",
              "enum": [
                "ahead",
                "behind",
                "level",
                "nothing_measurable"
              ]
            },
            "next_due_action": {
              "anyOf": [
                {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    "cycle_id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    "objective_id": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "title": {
                      "type": "string"
                    },
                    "description": {
                      "anyOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "due_at": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "date",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                          "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                        },
                        {
                          "type": "null"
                        }
                      ],
                      "description": "UI label: Due. May be unset on a web draft; a set date cannot be cleared."
                    },
                    "status": {
                      "type": "string",
                      "enum": [
                        "open",
                        "in_progress",
                        "done"
                      ],
                      "description": "Action status: Open, In progress or Done. The To do UI group includes Open and In progress; Overdue is derived, not a status."
                    },
                    "sort_order": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ],
                      "description": "Drag order within an action group; not a progress status."
                    },
                    "session_id": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "created_at": {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    "url": {
                      "type": "string",
                      "format": "uri"
                    },
                    "overdue": {
                      "type": "boolean"
                    },
                    "done_since_boundary": {
                      "type": "boolean"
                    }
                  },
                  "required": [
                    "id",
                    "cycle_id",
                    "objective_id",
                    "title",
                    "description",
                    "due_at",
                    "status",
                    "sort_order",
                    "session_id",
                    "created_at",
                    "url",
                    "overdue",
                    "done_since_boundary"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "as_of",
            "current",
            "progress_by_type",
            "session_history",
            "attention",
            "pace",
            "next_due_action"
          ],
          "additionalProperties": false
        }
      },
      "required": [
        "access_state",
        "session",
        "briefing_notes",
        "briefing"
      ],
      "additionalProperties": false
    },
    {
      "type": "object",
      "properties": {
        "access_state": {
          "type": "string",
          "const": "unpaid"
        },
        "enablement": {
          "type": "object",
          "properties": {
            "instruction": {
              "type": "string"
            },
            "signup_url": {
              "type": "string",
              "format": "uri"
            }
          },
          "required": [
            "instruction",
            "signup_url"
          ],
          "additionalProperties": false
        }
      },
      "required": [
        "access_state",
        "enablement"
      ],
      "additionalProperties": false
    }
  ]
}
Public MCP input/output shapes for comparison
[
  {
    "tool": "session_start",
    "collection": "sessions",
    "specification": "docs/feature-specs/F7-sessions.md#mcp-source-mapping--selected-target",
    "operation": "call",
    "binding": "planned",
    "mode": "adapted",
    "readiness": "contract-only",
    "services": [
      "sessions.start"
    ],
    "gap": null,
    "projection": "List omits documents and preserves resolved window/boundary; stored get preserves nullable session; start explicitly constructs the compact MCP briefing and supported-reader continuations; close preserves saved outcome.",
    "input": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "force_new": {
          "type": "boolean"
        }
      },
      "additionalProperties": false
    },
    "output": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "oneOf": [
        {
          "type": "object",
          "properties": {
            "access_state": {
              "type": "string",
              "const": "active"
            },
            "session": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "started_at": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "stale": {
                  "type": "boolean"
                }
              },
              "required": [
                "id",
                "started_at"
              ],
              "additionalProperties": false
            },
            "briefing_notes": {
              "type": "string"
            },
            "briefing": {
              "type": "object",
              "properties": {
                "as_of": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "current": {
                  "type": "object",
                  "properties": {
                    "profile": {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                        },
                        "name": {
                          "type": "string",
                          "description": "Chosen coaching/display name, used verbatim. Target UI prompt: What should we call you? Empty means unknown; no separate surname."
                        },
                        "about_me": {
                          "type": "string",
                          "description": "UI label: About me."
                        },
                        "timezone": {
                          "type": "string",
                          "minLength": 1,
                          "description": "UI label: Time zone. IANA zone used for calendar dates and boundaries."
                        }
                      },
                      "required": [
                        "id",
                        "name",
                        "about_me",
                        "timezone"
                      ],
                      "additionalProperties": false
                    },
                    "boundary": {
                      "type": "object",
                      "properties": {
                        "at": {
                          "anyOf": [
                            {
                              "type": "string",
                              "format": "date-time",
                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "session_id": {
                          "anyOf": [
                            {
                              "type": "string",
                              "format": "uuid",
                              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "source": {
                          "type": "string",
                          "enum": [
                            "session",
                            "cycle_start",
                            "none"
                          ]
                        }
                      },
                      "required": [
                        "at",
                        "session_id",
                        "source"
                      ],
                      "additionalProperties": false
                    },
                    "cycle_line": {
                      "anyOf": [
                        {
                          "type": "object",
                          "properties": {
                            "range": {
                              "type": "string"
                            },
                            "time_gone_pct": {
                              "type": "number",
                              "minimum": 0,
                              "maximum": 100
                            }
                          },
                          "required": [
                            "range",
                            "time_gone_pct"
                          ],
                          "additionalProperties": false
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "cycles": {
                      "type": "object",
                      "properties": {
                        "items": {
                          "maxItems": 50,
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                              },
                              "intention": {
                                "anyOf": [
                                  {
                                    "type": "string"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ],
                                "description": "UI label: Intention. Optional guiding focus; the cycle is identified by its date range, not a name."
                              },
                              "start_at": {
                                "type": "string",
                                "format": "date",
                                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                                "description": "UI label: Starts."
                              },
                              "end_at": {
                                "type": "string",
                                "format": "date",
                                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                                "description": "UI label: Ends."
                              },
                              "status": {
                                "type": "string",
                                "enum": [
                                  "active",
                                  "archived"
                                ]
                              },
                              "created_at": {
                                "type": "string",
                                "format": "date-time",
                                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                              },
                              "url": {
                                "type": "string",
                                "format": "uri"
                              },
                              "achievement_pct": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ],
                                "description": "UI label: Achievement. Derived from objective progress; unavailable when nothing is measurable."
                              },
                              "time_gone_pct": {
                                "type": "number",
                                "minimum": 0,
                                "maximum": 100,
                                "description": "UI label: Time gone. Derived percentage of the cycle elapsed."
                              },
                              "length_weeks": {
                                "type": "integer",
                                "minimum": -9007199254740991,
                                "maximum": 9007199254740991,
                                "description": "UI label: Length, in weeks; derived from Starts and Ends."
                              }
                            },
                            "required": [
                              "id",
                              "intention",
                              "start_at",
                              "end_at",
                              "status",
                              "created_at",
                              "url",
                              "achievement_pct",
                              "time_gone_pct",
                              "length_weeks"
                            ],
                            "additionalProperties": false
                          }
                        },
                        "next_cursor": {
                          "anyOf": [
                            {
                              "type": "string",
                              "minLength": 1
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "continuation": {
                          "anyOf": [
                            {
                              "type": "object",
                              "properties": {
                                "tool": {
                                  "type": "string",
                                  "const": "cycle_read"
                                },
                                "arguments": {
                                  "type": "object",
                                  "properties": {
                                    "cursor": {
                                      "type": "string",
                                      "minLength": 1
                                    },
                                    "limit": {
                                      "type": "integer",
                                      "minimum": 1,
                                      "maximum": 100
                                    },
                                    "operation": {
                                      "type": "string",
                                      "const": "list"
                                    }
                                  },
                                  "required": [
                                    "cursor",
                                    "limit",
                                    "operation"
                                  ],
                                  "additionalProperties": false
                                }
                              },
                              "required": [
                                "tool",
                                "arguments"
                              ],
                              "additionalProperties": false
                            },
                            {
                              "type": "null"
                            }
                          ]
                        }
                      },
                      "required": [
                        "items",
                        "next_cursor",
                        "continuation"
                      ],
                      "additionalProperties": false
                    },
                    "cycle": {
                      "anyOf": [
                        {
                          "type": "object",
                          "properties": {
                            "id": {
                              "type": "string",
                              "format": "uuid",
                              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                            },
                            "intention": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "null"
                                }
                              ],
                              "description": "UI label: Intention. Optional guiding focus; the cycle is identified by its date range, not a name."
                            },
                            "start_at": {
                              "type": "string",
                              "format": "date",
                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                              "description": "UI label: Starts."
                            },
                            "end_at": {
                              "type": "string",
                              "format": "date",
                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                              "description": "UI label: Ends."
                            },
                            "status": {
                              "type": "string",
                              "enum": [
                                "active",
                                "archived"
                              ]
                            },
                            "created_at": {
                              "type": "string",
                              "format": "date-time",
                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                            },
                            "url": {
                              "type": "string",
                              "format": "uri"
                            },
                            "achievement_pct": {
                              "anyOf": [
                                {
                                  "type": "number"
                                },
                                {
                                  "type": "null"
                                }
                              ],
                              "description": "UI label: Achievement. Derived from objective progress; unavailable when nothing is measurable."
                            },
                            "time_gone_pct": {
                              "type": "number",
                              "minimum": 0,
                              "maximum": 100,
                              "description": "UI label: Time gone. Derived percentage of the cycle elapsed."
                            },
                            "length_weeks": {
                              "type": "integer",
                              "minimum": -9007199254740991,
                              "maximum": 9007199254740991,
                              "description": "UI label: Length, in weeks; derived from Starts and Ends."
                            }
                          },
                          "required": [
                            "id",
                            "intention",
                            "start_at",
                            "end_at",
                            "status",
                            "created_at",
                            "url",
                            "achievement_pct",
                            "time_gone_pct",
                            "length_weeks"
                          ],
                          "additionalProperties": false
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "objectives": {
                      "type": "object",
                      "properties": {
                        "items": {
                          "maxItems": 50,
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                              },
                              "cycle_id": {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                              },
                              "title": {
                                "type": "string"
                              },
                              "description": {
                                "type": "string"
                              },
                              "deadline_at": {
                                "anyOf": [
                                  {
                                    "type": "string",
                                    "format": "date",
                                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                                    "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                                  },
                                  {
                                    "type": "null"
                                  }
                                ],
                                "description": "UI label: Deadline; null when no deadline has been set."
                              },
                              "status": {
                                "type": "string",
                                "enum": [
                                  "on_track",
                                  "off_track",
                                  "completed"
                                ],
                                "description": "Objective status: On track, Off track or Completed. Coaching judgment, independent of the derived Progress percentage."
                              },
                              "created_at": {
                                "type": "string",
                                "format": "date-time",
                                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                              },
                              "short_code": {
                                "type": "string",
                                "minLength": 1
                              },
                              "url": {
                                "type": "string",
                                "format": "uri"
                              },
                              "progress_pct": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ],
                                "description": "UI label: Progress. Derived from measurable results, independently of Status."
                              },
                              "boundary_progress_pct": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ],
                                "description": "Historical progress at the resolved last-session boundary; not current Progress."
                              },
                              "movement_pp": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              }
                            },
                            "required": [
                              "id",
                              "cycle_id",
                              "title",
                              "description",
                              "deadline_at",
                              "status",
                              "created_at",
                              "short_code",
                              "url",
                              "progress_pct",
                              "boundary_progress_pct",
                              "movement_pp"
                            ],
                            "additionalProperties": false
                          }
                        },
                        "next_cursor": {
                          "anyOf": [
                            {
                              "type": "string",
                              "minLength": 1
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "continuation": {
                          "anyOf": [
                            {
                              "type": "object",
                              "properties": {
                                "tool": {
                                  "type": "string",
                                  "const": "objective_read"
                                },
                                "arguments": {
                                  "type": "object",
                                  "properties": {
                                    "cursor": {
                                      "type": "string",
                                      "minLength": 1
                                    },
                                    "limit": {
                                      "type": "integer",
                                      "minimum": 1,
                                      "maximum": 100
                                    },
                                    "cycle_id": {
                                      "type": "string",
                                      "format": "uuid",
                                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                                    },
                                    "operation": {
                                      "type": "string",
                                      "const": "list"
                                    }
                                  },
                                  "required": [
                                    "cursor",
                                    "limit",
                                    "cycle_id",
                                    "operation"
                                  ],
                                  "additionalProperties": false
                                }
                              },
                              "required": [
                                "tool",
                                "arguments"
                              ],
                              "additionalProperties": false
                            },
                            {
                              "type": "null"
                            }
                          ]
                        }
                      },
                      "required": [
                        "items",
                        "next_cursor",
                        "continuation"
                      ],
                      "additionalProperties": false
                    },
                    "results": {
                      "type": "object",
                      "properties": {
                        "items": {
                          "maxItems": 50,
                          "type": "array",
                          "items": {
                            "oneOf": [
                              {
                                "type": "object",
                                "properties": {
                                  "id": {
                                    "type": "string",
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                                  },
                                  "objective_id": {
                                    "type": "string",
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                                  },
                                  "title": {
                                    "type": "string"
                                  },
                                  "description": {
                                    "anyOf": [
                                      {
                                        "type": "string"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "metric_type": {
                                    "type": "string",
                                    "const": "number"
                                  },
                                  "start_value": {
                                    "type": "number"
                                  },
                                  "target_value": {
                                    "type": "number"
                                  },
                                  "unit": {
                                    "anyOf": [
                                      {
                                        "type": "string"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ],
                                    "description": "UI label: Unit. Used by Number and Performance results."
                                  },
                                  "cadence": {
                                    "type": "null"
                                  },
                                  "per": {
                                    "type": "null"
                                  },
                                  "since": {
                                    "type": "null"
                                  },
                                  "status": {
                                    "type": "string",
                                    "enum": [
                                      "in_progress",
                                      "completed"
                                    ],
                                    "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                                  },
                                  "created_at": {
                                    "type": "string",
                                    "format": "date-time",
                                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                  },
                                  "short_code": {
                                    "type": "string",
                                    "minLength": 1
                                  },
                                  "url": {
                                    "type": "string",
                                    "format": "uri"
                                  },
                                  "current_value": {
                                    "type": "number",
                                    "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                                  },
                                  "boundary_value": {
                                    "type": "number"
                                  },
                                  "progress_pct": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "boundary_progress_pct": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "movement": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "movement_pp": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "evidence_count": {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  "last_recorded_at": {
                                    "anyOf": [
                                      {
                                        "type": "string",
                                        "format": "date-time",
                                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "habit_expected_since_boundary": {
                                    "anyOf": [
                                      {
                                        "type": "integer",
                                        "minimum": 0,
                                        "maximum": 9007199254740991
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "habit_logs_since_boundary": {
                                    "anyOf": [
                                      {
                                        "type": "integer",
                                        "minimum": 0,
                                        "maximum": 9007199254740991
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "performance_share": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  }
                                },
                                "required": [
                                  "id",
                                  "objective_id",
                                  "title",
                                  "description",
                                  "metric_type",
                                  "start_value",
                                  "target_value",
                                  "unit",
                                  "cadence",
                                  "per",
                                  "since",
                                  "status",
                                  "created_at",
                                  "short_code",
                                  "url",
                                  "current_value",
                                  "boundary_value",
                                  "progress_pct",
                                  "boundary_progress_pct",
                                  "movement",
                                  "movement_pp",
                                  "evidence_count",
                                  "last_recorded_at",
                                  "habit_expected_since_boundary",
                                  "habit_logs_since_boundary",
                                  "performance_share"
                                ],
                                "additionalProperties": false
                              },
                              {
                                "type": "object",
                                "properties": {
                                  "id": {
                                    "type": "string",
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                                  },
                                  "objective_id": {
                                    "type": "string",
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                                  },
                                  "title": {
                                    "type": "string"
                                  },
                                  "description": {
                                    "anyOf": [
                                      {
                                        "type": "string"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "metric_type": {
                                    "type": "string",
                                    "const": "percentage"
                                  },
                                  "start_value": {
                                    "type": "number",
                                    "minimum": 0,
                                    "maximum": 100
                                  },
                                  "target_value": {
                                    "type": "number",
                                    "minimum": 0,
                                    "maximum": 100
                                  },
                                  "unit": {
                                    "type": "null"
                                  },
                                  "cadence": {
                                    "type": "null"
                                  },
                                  "per": {
                                    "type": "null"
                                  },
                                  "since": {
                                    "type": "null"
                                  },
                                  "status": {
                                    "type": "string",
                                    "enum": [
                                      "in_progress",
                                      "completed"
                                    ],
                                    "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                                  },
                                  "created_at": {
                                    "type": "string",
                                    "format": "date-time",
                                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                  },
                                  "short_code": {
                                    "type": "string",
                                    "minLength": 1
                                  },
                                  "url": {
                                    "type": "string",
                                    "format": "uri"
                                  },
                                  "current_value": {
                                    "type": "number",
                                    "minimum": 0,
                                    "maximum": 100
                                  },
                                  "boundary_value": {
                                    "type": "number",
                                    "minimum": 0,
                                    "maximum": 100
                                  },
                                  "progress_pct": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "boundary_progress_pct": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "movement": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "movement_pp": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "evidence_count": {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  "last_recorded_at": {
                                    "anyOf": [
                                      {
                                        "type": "string",
                                        "format": "date-time",
                                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "habit_expected_since_boundary": {
                                    "anyOf": [
                                      {
                                        "type": "integer",
                                        "minimum": 0,
                                        "maximum": 9007199254740991
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "habit_logs_since_boundary": {
                                    "anyOf": [
                                      {
                                        "type": "integer",
                                        "minimum": 0,
                                        "maximum": 9007199254740991
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "performance_share": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  }
                                },
                                "required": [
                                  "id",
                                  "objective_id",
                                  "title",
                                  "description",
                                  "metric_type",
                                  "start_value",
                                  "target_value",
                                  "unit",
                                  "cadence",
                                  "per",
                                  "since",
                                  "status",
                                  "created_at",
                                  "short_code",
                                  "url",
                                  "current_value",
                                  "boundary_value",
                                  "progress_pct",
                                  "boundary_progress_pct",
                                  "movement",
                                  "movement_pp",
                                  "evidence_count",
                                  "last_recorded_at",
                                  "habit_expected_since_boundary",
                                  "habit_logs_since_boundary",
                                  "performance_share"
                                ],
                                "additionalProperties": false
                              },
                              {
                                "type": "object",
                                "properties": {
                                  "id": {
                                    "type": "string",
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                                  },
                                  "objective_id": {
                                    "type": "string",
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                                  },
                                  "title": {
                                    "type": "string"
                                  },
                                  "description": {
                                    "anyOf": [
                                      {
                                        "type": "string"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "metric_type": {
                                    "type": "string",
                                    "const": "milestone"
                                  },
                                  "start_value": {
                                    "type": "number",
                                    "const": 0
                                  },
                                  "target_value": {
                                    "type": "number",
                                    "const": 1
                                  },
                                  "unit": {
                                    "type": "null"
                                  },
                                  "cadence": {
                                    "type": "null"
                                  },
                                  "per": {
                                    "type": "null"
                                  },
                                  "since": {
                                    "type": "null"
                                  },
                                  "status": {
                                    "type": "string",
                                    "enum": [
                                      "in_progress",
                                      "completed"
                                    ],
                                    "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                                  },
                                  "created_at": {
                                    "type": "string",
                                    "format": "date-time",
                                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                  },
                                  "short_code": {
                                    "type": "string",
                                    "minLength": 1
                                  },
                                  "url": {
                                    "type": "string",
                                    "format": "uri"
                                  },
                                  "current_value": {
                                    "anyOf": [
                                      {
                                        "type": "number",
                                        "const": 0
                                      },
                                      {
                                        "type": "number",
                                        "const": 1
                                      }
                                    ]
                                  },
                                  "boundary_value": {
                                    "anyOf": [
                                      {
                                        "type": "number",
                                        "const": 0
                                      },
                                      {
                                        "type": "number",
                                        "const": 1
                                      }
                                    ]
                                  },
                                  "progress_pct": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "boundary_progress_pct": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "movement": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "movement_pp": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "evidence_count": {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  "last_recorded_at": {
                                    "anyOf": [
                                      {
                                        "type": "string",
                                        "format": "date-time",
                                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "habit_expected_since_boundary": {
                                    "anyOf": [
                                      {
                                        "type": "integer",
                                        "minimum": 0,
                                        "maximum": 9007199254740991
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "habit_logs_since_boundary": {
                                    "anyOf": [
                                      {
                                        "type": "integer",
                                        "minimum": 0,
                                        "maximum": 9007199254740991
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "performance_share": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  }
                                },
                                "required": [
                                  "id",
                                  "objective_id",
                                  "title",
                                  "description",
                                  "metric_type",
                                  "start_value",
                                  "target_value",
                                  "unit",
                                  "cadence",
                                  "per",
                                  "since",
                                  "status",
                                  "created_at",
                                  "short_code",
                                  "url",
                                  "current_value",
                                  "boundary_value",
                                  "progress_pct",
                                  "boundary_progress_pct",
                                  "movement",
                                  "movement_pp",
                                  "evidence_count",
                                  "last_recorded_at",
                                  "habit_expected_since_boundary",
                                  "habit_logs_since_boundary",
                                  "performance_share"
                                ],
                                "additionalProperties": false
                              },
                              {
                                "type": "object",
                                "properties": {
                                  "id": {
                                    "type": "string",
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                                  },
                                  "objective_id": {
                                    "type": "string",
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                                  },
                                  "title": {
                                    "type": "string"
                                  },
                                  "description": {
                                    "anyOf": [
                                      {
                                        "type": "string"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "metric_type": {
                                    "type": "string",
                                    "const": "habit"
                                  },
                                  "start_value": {
                                    "type": "number",
                                    "const": 0
                                  },
                                  "target_value": {
                                    "type": "number",
                                    "const": 100
                                  },
                                  "unit": {
                                    "type": "null"
                                  },
                                  "cadence": {
                                    "type": "string",
                                    "enum": [
                                      "weekly",
                                      "monthly"
                                    ],
                                    "description": "UI label: Cadence. Weekly or Monthly; per supplies the Times value."
                                  },
                                  "per": {
                                    "type": "integer",
                                    "exclusiveMinimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  "since": {
                                    "type": "string",
                                    "format": "date",
                                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                                    "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                                  },
                                  "status": {
                                    "type": "string",
                                    "enum": [
                                      "in_progress",
                                      "completed"
                                    ],
                                    "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                                  },
                                  "created_at": {
                                    "type": "string",
                                    "format": "date-time",
                                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                  },
                                  "short_code": {
                                    "type": "string",
                                    "minLength": 1
                                  },
                                  "url": {
                                    "type": "string",
                                    "format": "uri"
                                  },
                                  "current_value": {
                                    "type": "number",
                                    "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                                  },
                                  "boundary_value": {
                                    "type": "number"
                                  },
                                  "progress_pct": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "boundary_progress_pct": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "movement": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "movement_pp": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "evidence_count": {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  "last_recorded_at": {
                                    "anyOf": [
                                      {
                                        "type": "string",
                                        "format": "date-time",
                                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "habit_expected_since_boundary": {
                                    "anyOf": [
                                      {
                                        "type": "integer",
                                        "minimum": 0,
                                        "maximum": 9007199254740991
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "habit_logs_since_boundary": {
                                    "anyOf": [
                                      {
                                        "type": "integer",
                                        "minimum": 0,
                                        "maximum": 9007199254740991
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "performance_share": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  }
                                },
                                "required": [
                                  "id",
                                  "objective_id",
                                  "title",
                                  "description",
                                  "metric_type",
                                  "start_value",
                                  "target_value",
                                  "unit",
                                  "cadence",
                                  "per",
                                  "since",
                                  "status",
                                  "created_at",
                                  "short_code",
                                  "url",
                                  "current_value",
                                  "boundary_value",
                                  "progress_pct",
                                  "boundary_progress_pct",
                                  "movement",
                                  "movement_pp",
                                  "evidence_count",
                                  "last_recorded_at",
                                  "habit_expected_since_boundary",
                                  "habit_logs_since_boundary",
                                  "performance_share"
                                ],
                                "additionalProperties": false
                              },
                              {
                                "type": "object",
                                "properties": {
                                  "id": {
                                    "type": "string",
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                                  },
                                  "objective_id": {
                                    "type": "string",
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                                  },
                                  "title": {
                                    "type": "string"
                                  },
                                  "description": {
                                    "anyOf": [
                                      {
                                        "type": "string"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "metric_type": {
                                    "type": "string",
                                    "const": "performance"
                                  },
                                  "start_value": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ],
                                    "description": "UI label: Start. Metric baseline; habit baselines are derived rather than stored."
                                  },
                                  "target_value": {
                                    "type": "number"
                                  },
                                  "unit": {
                                    "anyOf": [
                                      {
                                        "type": "string"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ],
                                    "description": "UI label: Unit. Used by Number and Performance results."
                                  },
                                  "cadence": {
                                    "type": "null"
                                  },
                                  "per": {
                                    "type": "null"
                                  },
                                  "since": {
                                    "type": "string",
                                    "format": "date",
                                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                                    "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                                  },
                                  "status": {
                                    "type": "string",
                                    "enum": [
                                      "in_progress",
                                      "completed"
                                    ],
                                    "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                                  },
                                  "created_at": {
                                    "type": "string",
                                    "format": "date-time",
                                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                  },
                                  "short_code": {
                                    "type": "string",
                                    "minLength": 1
                                  },
                                  "url": {
                                    "type": "string",
                                    "format": "uri"
                                  },
                                  "current_value": {
                                    "type": "number",
                                    "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                                  },
                                  "boundary_value": {
                                    "type": "number"
                                  },
                                  "progress_pct": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "boundary_progress_pct": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "movement": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "movement_pp": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "evidence_count": {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  "last_recorded_at": {
                                    "anyOf": [
                                      {
                                        "type": "string",
                                        "format": "date-time",
                                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "habit_expected_since_boundary": {
                                    "anyOf": [
                                      {
                                        "type": "integer",
                                        "minimum": 0,
                                        "maximum": 9007199254740991
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "habit_logs_since_boundary": {
                                    "anyOf": [
                                      {
                                        "type": "integer",
                                        "minimum": 0,
                                        "maximum": 9007199254740991
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "performance_share": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  }
                                },
                                "required": [
                                  "id",
                                  "objective_id",
                                  "title",
                                  "description",
                                  "metric_type",
                                  "start_value",
                                  "target_value",
                                  "unit",
                                  "cadence",
                                  "per",
                                  "since",
                                  "status",
                                  "created_at",
                                  "short_code",
                                  "url",
                                  "current_value",
                                  "boundary_value",
                                  "progress_pct",
                                  "boundary_progress_pct",
                                  "movement",
                                  "movement_pp",
                                  "evidence_count",
                                  "last_recorded_at",
                                  "habit_expected_since_boundary",
                                  "habit_logs_since_boundary",
                                  "performance_share"
                                ],
                                "additionalProperties": false
                              }
                            ]
                          }
                        },
                        "next_cursor": {
                          "anyOf": [
                            {
                              "type": "string",
                              "minLength": 1
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "continuation": {
                          "anyOf": [
                            {
                              "type": "object",
                              "properties": {
                                "tool": {
                                  "type": "string",
                                  "const": "result_read"
                                },
                                "arguments": {
                                  "type": "object",
                                  "properties": {
                                    "cursor": {
                                      "type": "string",
                                      "minLength": 1
                                    },
                                    "limit": {
                                      "type": "integer",
                                      "minimum": 1,
                                      "maximum": 100
                                    },
                                    "objective_id": {
                                      "type": "string",
                                      "format": "uuid",
                                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                                    },
                                    "cycle_id": {
                                      "description": "List results across one cycle instead of a single objective. Supply exactly one parent selector.",
                                      "type": "string",
                                      "format": "uuid",
                                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                                    },
                                    "attention": {
                                      "description": "Optional briefing subset: no evidence ever, no update in the window, or habit with no mark in the window.",
                                      "type": "string",
                                      "enum": [
                                        "never_updated",
                                        "silent",
                                        "unmarked"
                                      ]
                                    },
                                    "window": {
                                      "description": "Required for silent/unmarked attention. Use exact server-resolved briefing bounds; current result figures remain current.",
                                      "type": "object",
                                      "properties": {
                                        "since": {
                                          "type": "string",
                                          "format": "date-time",
                                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                        },
                                        "until": {
                                          "type": "string",
                                          "format": "date-time",
                                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                        }
                                      },
                                      "required": [
                                        "since",
                                        "until"
                                      ],
                                      "additionalProperties": false
                                    },
                                    "operation": {
                                      "type": "string",
                                      "const": "list"
                                    }
                                  },
                                  "required": [
                                    "cursor",
                                    "limit",
                                    "operation"
                                  ],
                                  "additionalProperties": false
                                }
                              },
                              "required": [
                                "tool",
                                "arguments"
                              ],
                              "additionalProperties": false
                            },
                            {
                              "type": "null"
                            }
                          ]
                        }
                      },
                      "required": [
                        "items",
                        "next_cursor",
                        "continuation"
                      ],
                      "additionalProperties": false
                    },
                    "actions": {
                      "type": "object",
                      "properties": {
                        "items": {
                          "maxItems": 50,
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                              },
                              "cycle_id": {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                              },
                              "objective_id": {
                                "anyOf": [
                                  {
                                    "type": "string",
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "title": {
                                "type": "string"
                              },
                              "description": {
                                "anyOf": [
                                  {
                                    "type": "string"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "due_at": {
                                "anyOf": [
                                  {
                                    "type": "string",
                                    "format": "date",
                                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                                    "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                                  },
                                  {
                                    "type": "null"
                                  }
                                ],
                                "description": "UI label: Due. May be unset on a web draft; a set date cannot be cleared."
                              },
                              "status": {
                                "type": "string",
                                "enum": [
                                  "open",
                                  "in_progress",
                                  "done"
                                ],
                                "description": "Action status: Open, In progress or Done. The To do UI group includes Open and In progress; Overdue is derived, not a status."
                              },
                              "sort_order": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ],
                                "description": "Drag order within an action group; not a progress status."
                              },
                              "session_id": {
                                "anyOf": [
                                  {
                                    "type": "string",
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "created_at": {
                                "type": "string",
                                "format": "date-time",
                                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                              },
                              "url": {
                                "type": "string",
                                "format": "uri"
                              },
                              "overdue": {
                                "type": "boolean"
                              },
                              "done_since_boundary": {
                                "type": "boolean"
                              }
                            },
                            "required": [
                              "id",
                              "cycle_id",
                              "objective_id",
                              "title",
                              "description",
                              "due_at",
                              "status",
                              "sort_order",
                              "session_id",
                              "created_at",
                              "url",
                              "overdue",
                              "done_since_boundary"
                            ],
                            "additionalProperties": false
                          }
                        },
                        "next_cursor": {
                          "anyOf": [
                            {
                              "type": "string",
                              "minLength": 1
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "continuation": {
                          "anyOf": [
                            {
                              "type": "object",
                              "properties": {
                                "tool": {
                                  "type": "string",
                                  "const": "action_read"
                                },
                                "arguments": {
                                  "type": "object",
                                  "properties": {
                                    "cursor": {
                                      "type": "string",
                                      "minLength": 1
                                    },
                                    "limit": {
                                      "type": "integer",
                                      "minimum": 1,
                                      "maximum": 100
                                    },
                                    "cycle_id": {
                                      "type": "string",
                                      "format": "uuid",
                                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                                    },
                                    "objective_id": {
                                      "anyOf": [
                                        {
                                          "type": "string",
                                          "format": "uuid",
                                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                                        },
                                        {
                                          "type": "null"
                                        }
                                      ]
                                    },
                                    "status": {
                                      "type": "string",
                                      "enum": [
                                        "open",
                                        "in_progress",
                                        "done"
                                      ],
                                      "description": "Action status: Open, In progress or Done. The To do UI group includes Open and In progress; Overdue is derived, not a status."
                                    },
                                    "due_before": {
                                      "type": "string",
                                      "format": "date",
                                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                                      "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                                    },
                                    "outstanding": {
                                      "type": "boolean",
                                      "const": true
                                    },
                                    "session_id": {
                                      "description": "Filter actions created in this owned session; combine with cycle_id to select its cycle explicitly.",
                                      "type": "string",
                                      "format": "uuid",
                                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                                    },
                                    "overdue": {
                                      "description": "Only non-done actions before due_before; requires an explicit local cutoff date for stable briefing pagination.",
                                      "type": "boolean",
                                      "const": true
                                    },
                                    "operation": {
                                      "type": "string",
                                      "const": "list"
                                    }
                                  },
                                  "required": [
                                    "cursor",
                                    "limit",
                                    "cycle_id",
                                    "outstanding",
                                    "operation"
                                  ],
                                  "additionalProperties": false
                                }
                              },
                              "required": [
                                "tool",
                                "arguments"
                              ],
                              "additionalProperties": false
                            },
                            {
                              "type": "null"
                            }
                          ]
                        }
                      },
                      "required": [
                        "items",
                        "next_cursor",
                        "continuation"
                      ],
                      "additionalProperties": false
                    },
                    "notes": {
                      "type": "object",
                      "properties": {
                        "notes": {
                          "type": "object",
                          "properties": {
                            "items": {
                              "maxItems": 50,
                              "type": "array",
                              "items": {
                                "type": "object",
                                "properties": {
                                  "id": {
                                    "type": "string",
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                                  },
                                  "text": {
                                    "type": "string",
                                    "minLength": 1
                                  },
                                  "recorded_at": {
                                    "type": "string",
                                    "format": "date-time",
                                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                  },
                                  "url": {
                                    "type": "string",
                                    "format": "uri"
                                  },
                                  "since_boundary": {
                                    "type": "boolean"
                                  }
                                },
                                "required": [
                                  "id",
                                  "text",
                                  "recorded_at",
                                  "url",
                                  "since_boundary"
                                ],
                                "additionalProperties": false
                              }
                            },
                            "next_cursor": {
                              "anyOf": [
                                {
                                  "type": "string",
                                  "minLength": 1
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            },
                            "continuation": {
                              "anyOf": [
                                {
                                  "type": "object",
                                  "properties": {
                                    "tool": {
                                      "type": "string",
                                      "const": "note_read"
                                    },
                                    "arguments": {
                                      "type": "object",
                                      "properties": {
                                        "cursor": {
                                          "type": "string",
                                          "minLength": 1
                                        },
                                        "limit": {
                                          "type": "integer",
                                          "minimum": 1,
                                          "maximum": 100
                                        },
                                        "window": {
                                          "type": "object",
                                          "properties": {
                                            "since": {
                                              "type": "string",
                                              "format": "date-time",
                                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                            },
                                            "until": {
                                              "type": "string",
                                              "format": "date-time",
                                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                            }
                                          },
                                          "required": [
                                            "since",
                                            "until"
                                          ],
                                          "additionalProperties": false
                                        },
                                        "operation": {
                                          "type": "string",
                                          "const": "list"
                                        }
                                      },
                                      "required": [
                                        "cursor",
                                        "limit",
                                        "operation"
                                      ],
                                      "additionalProperties": false
                                    }
                                  },
                                  "required": [
                                    "tool",
                                    "arguments"
                                  ],
                                  "additionalProperties": false
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            }
                          },
                          "required": [
                            "items",
                            "next_cursor",
                            "continuation"
                          ],
                          "additionalProperties": false
                        },
                        "selection": {
                          "type": "string",
                          "enum": [
                            "since_boundary",
                            "recent_fallback",
                            "selected",
                            "history"
                          ]
                        },
                        "total": {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        }
                      },
                      "required": [
                        "notes",
                        "selection",
                        "total"
                      ],
                      "additionalProperties": false
                    },
                    "last_completed_session": {
                      "anyOf": [
                        {
                          "type": "object",
                          "properties": {
                            "id": {
                              "type": "string",
                              "format": "uuid",
                              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                            },
                            "vendor": {
                              "type": "string",
                              "enum": [
                                "claude",
                                "openai"
                              ],
                              "description": "Conversation host: claude is shown as Claude; openai is shown as ChatGPT."
                            },
                            "source_url": {
                              "anyOf": [
                                {
                                  "type": "string",
                                  "format": "uri"
                                },
                                {
                                  "type": "null"
                                }
                              ],
                              "description": "External conversation link used by Open the conversation. Not the app detail URL."
                            },
                            "type": {
                              "anyOf": [
                                {
                                  "type": "string",
                                  "enum": [
                                    "goal_setup",
                                    "check_in",
                                    "review",
                                    "open_coaching"
                                  ],
                                  "description": "Coaching session type: Goal setup, Check-in, Review or Open coaching. Separate from whether the session is still open."
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            },
                            "briefing_notes": {
                              "type": "string",
                              "description": "UI document: Briefing. Server-prepared coaching context."
                            },
                            "headline": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "null"
                                }
                              ],
                              "description": "One-line coaching-session summary used in session lists."
                            },
                            "summary_notes": {
                              "anyOf": [
                                {
                                  "type": "string"
                                },
                                {
                                  "type": "null"
                                }
                              ],
                              "description": "UI document: Summary. Saved when the coaching session closes."
                            },
                            "started_at": {
                              "type": "string",
                              "format": "date-time",
                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                            },
                            "ended_at": {
                              "anyOf": [
                                {
                                  "type": "string",
                                  "format": "date-time",
                                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                },
                                {
                                  "type": "null"
                                }
                              ],
                              "description": "Closed when set; In progress when null. This is derived session state, not a stored status enum."
                            },
                            "url": {
                              "type": "string",
                              "format": "uri",
                              "description": "Internal app link to coaching session details; distinct from source_url."
                            },
                            "duration_minutes": {
                              "anyOf": [
                                {
                                  "type": "integer",
                                  "minimum": 0,
                                  "maximum": 9007199254740991
                                },
                                {
                                  "type": "null"
                                }
                              ]
                            },
                            "actions_created": {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            },
                            "actions_reviewed": {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            }
                          },
                          "required": [
                            "id",
                            "vendor",
                            "source_url",
                            "type",
                            "briefing_notes",
                            "headline",
                            "summary_notes",
                            "started_at",
                            "ended_at",
                            "url",
                            "duration_minutes",
                            "actions_created",
                            "actions_reviewed"
                          ],
                          "additionalProperties": false
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "selected": {
                      "type": "object",
                      "properties": {
                        "objective": {
                          "anyOf": [
                            {
                              "type": "object",
                              "properties": {
                                "id": {
                                  "type": "string",
                                  "format": "uuid",
                                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                                },
                                "cycle_id": {
                                  "type": "string",
                                  "format": "uuid",
                                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                                },
                                "title": {
                                  "type": "string"
                                },
                                "description": {
                                  "type": "string"
                                },
                                "deadline_at": {
                                  "anyOf": [
                                    {
                                      "type": "string",
                                      "format": "date",
                                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                                      "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ],
                                  "description": "UI label: Deadline; null when no deadline has been set."
                                },
                                "status": {
                                  "type": "string",
                                  "enum": [
                                    "on_track",
                                    "off_track",
                                    "completed"
                                  ],
                                  "description": "Objective status: On track, Off track or Completed. Coaching judgment, independent of the derived Progress percentage."
                                },
                                "created_at": {
                                  "type": "string",
                                  "format": "date-time",
                                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                },
                                "short_code": {
                                  "type": "string",
                                  "minLength": 1
                                },
                                "url": {
                                  "type": "string",
                                  "format": "uri"
                                },
                                "progress_pct": {
                                  "anyOf": [
                                    {
                                      "type": "number"
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ],
                                  "description": "UI label: Progress. Derived from measurable results, independently of Status."
                                },
                                "boundary_progress_pct": {
                                  "anyOf": [
                                    {
                                      "type": "number"
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ],
                                  "description": "Historical progress at the resolved last-session boundary; not current Progress."
                                },
                                "movement_pp": {
                                  "anyOf": [
                                    {
                                      "type": "number"
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                }
                              },
                              "required": [
                                "id",
                                "cycle_id",
                                "title",
                                "description",
                                "deadline_at",
                                "status",
                                "created_at",
                                "short_code",
                                "url",
                                "progress_pct",
                                "boundary_progress_pct",
                                "movement_pp"
                              ],
                              "additionalProperties": false
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "result": {
                          "anyOf": [
                            {
                              "oneOf": [
                                {
                                  "type": "object",
                                  "properties": {
                                    "id": {
                                      "type": "string",
                                      "format": "uuid",
                                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                                    },
                                    "objective_id": {
                                      "type": "string",
                                      "format": "uuid",
                                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                                    },
                                    "title": {
                                      "type": "string"
                                    },
                                    "description": {
                                      "anyOf": [
                                        {
                                          "type": "string"
                                        },
                                        {
                                          "type": "null"
                                        }
                                      ]
                                    },
                                    "metric_type": {
                                      "type": "string",
                                      "const": "number"
                                    },
                                    "start_value": {
                                      "type": "number"
                                    },
                                    "target_value": {
                                      "type": "number"
                                    },
                                    "unit": {
                                      "anyOf": [
                                        {
                                          "type": "string"
                                        },
                                        {
                                          "type": "null"
                                        }
                                      ],
                                      "description": "UI label: Unit. Used by Number and Performance results."
                                    },
                                    "cadence": {
                                      "type": "null"
                                    },
                                    "per": {
                                      "type": "null"
                                    },
                                    "since": {
                                      "type": "null"
                                    },
                                    "status": {
                                      "type": "string",
                                      "enum": [
                                        "in_progress",
                                        "completed"
                                      ],
                                      "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                                    },
                                    "created_at": {
                                      "type": "string",
                                      "format": "date-time",
                                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                    },
                                    "short_code": {
                                      "type": "string",
                                      "minLength": 1
                                    },
                                    "url": {
                                      "type": "string",
                                      "format": "uri"
                                    },
                                    "current_value": {
                                      "type": "number",
                                      "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                                    },
                                    "boundary_value": {
                                      "type": "number"
                                    },
                                    "progress_pct": {
                                      "anyOf": [
                                        {
                                          "type": "number"
                                        },
                                        {
                                          "type": "null"
                                        }
                                      ]
                                    },
                                    "boundary_progress_pct": {
                                      "anyOf": [
                                        {
                                          "type": "number"
                                        },
                                        {
                                          "type": "null"
                                        }
                                      ]
                                    },
                                    "movement": {
                                      "anyOf": [
                                        {
                                          "type": "number"
                                        },
                                        {
                                          "type": "null"
                                        }
                                      ]
                                    },
                                    "movement_pp": {
                                      "anyOf": [
                                        {
                                          "type": "number"
                                        },
                                        {
                                          "type": "null"
                                        }
                                      ]
                                    },
                                    "evidence_count": {
                                      "type": "integer",
                                      "minimum": 0,
                                      "maximum": 9007199254740991
                                    },
                                    "last_recorded_at": {
                                      "anyOf": [
                                        {
                                          "type": "string",
                                          "format": "date-time",
                                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                        },
                                        {
                                          "type": "null"
                                        }
                                      ]
                                    },
                                    "habit_expected_since_boundary": {
                                      "anyOf": [
                                        {
                                          "type": "integer",
                                          "minimum": 0,
                                          "maximum": 9007199254740991
                                        },
                                        {
                                          "type": "null"
                                        }
                                      ]
                                    },
                                    "habit_logs_since_boundary": {
                                      "anyOf": [
                                        {
                                          "type": "integer",
                                          "minimum": 0,
                                          "maximum": 9007199254740991
                                        },
                                        {
                                          "type": "null"
                                        }
                                      ]
                                    },
                                    "performance_share": {
                                      "anyOf": [
                                        {
                                          "type": "number"
                                        },
                                        {
                                          "type": "null"
                                        }
                                      ]
                                    }
                                  },
                                  "required": [
                                    "id",
                                    "objective_id",
                                    "title",
                                    "description",
                                    "metric_type",
                                    "start_value",
                                    "target_value",
                                    "unit",
                                    "cadence",
                                    "per",
                                    "since",
                                    "status",
                                    "created_at",
                                    "short_code",
                                    "url",
                                    "current_value",
                                    "boundary_value",
                                    "progress_pct",
                                    "boundary_progress_pct",
                                    "movement",
                                    "movement_pp",
                                    "evidence_count",
                                    "last_recorded_at",
                                    "habit_expected_since_boundary",
                                    "habit_logs_since_boundary",
                                    "performance_share"
                                  ],
                                  "additionalProperties": false
                                },
                                {
                                  "type": "object",
                                  "properties": {
                                    "id": {
                                      "type": "string",
                                      "format": "uuid",
                                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                                    },
                                    "objective_id": {
                                      "type": "string",
                                      "format": "uuid",
                                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                                    },
                                    "title": {
                                      "type": "string"
                                    },
                                    "description": {
                                      "anyOf": [
                                        {
                                          "type": "string"
                                        },
                                        {
                                          "type": "null"
                                        }
                                      ]
                                    },
                                    "metric_type": {
                                      "type": "string",
                                      "const": "percentage"
                                    },
                                    "start_value": {
                                      "type": "number",
                                      "minimum": 0,
                                      "maximum": 100
                                    },
                                    "target_value": {
                                      "type": "number",
                                      "minimum": 0,
                                      "maximum": 100
                                    },
                                    "unit": {
                                      "type": "null"
                                    },
                                    "cadence": {
                                      "type": "null"
                                    },
                                    "per": {
                                      "type": "null"
                                    },
                                    "since": {
                                      "type": "null"
                                    },
                                    "status": {
                                      "type": "string",
                                      "enum": [
                                        "in_progress",
                                        "completed"
                                      ],
                                      "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                                    },
                                    "created_at": {
                                      "type": "string",
                                      "format": "date-time",
                                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                    },
                                    "short_code": {
                                      "type": "string",
                                      "minLength": 1
                                    },
                                    "url": {
                                      "type": "string",
                                      "format": "uri"
                                    },
                                    "current_value": {
                                      "type": "number",
                                      "minimum": 0,
                                      "maximum": 100
                                    },
                                    "boundary_value": {
                                      "type": "number",
                                      "minimum": 0,
                                      "maximum": 100
                                    },
                                    "progress_pct": {
                                      "anyOf": [
                                        {
                                          "type": "number"
                                        },
                                        {
                                          "type": "null"
                                        }
                                      ]
                                    },
                                    "boundary_progress_pct": {
                                      "anyOf": [
                                        {
                                          "type": "number"
                                        },
                                        {
                                          "type": "null"
                                        }
                                      ]
                                    },
                                    "movement": {
                                      "anyOf": [
                                        {
                                          "type": "number"
                                        },
                                        {
                                          "type": "null"
                                        }
                                      ]
                                    },
                                    "movement_pp": {
                                      "anyOf": [
                                        {
                                          "type": "number"
                                        },
                                        {
                                          "type": "null"
                                        }
                                      ]
                                    },
                                    "evidence_count": {
                                      "type": "integer",
                                      "minimum": 0,
                                      "maximum": 9007199254740991
                                    },
                                    "last_recorded_at": {
                                      "anyOf": [
                                        {
                                          "type": "string",
                                          "format": "date-time",
                                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                        },
                                        {
                                          "type": "null"
                                        }
                                      ]
                                    },
                                    "habit_expected_since_boundary": {
                                      "anyOf": [
                                        {
                                          "type": "integer",
                                          "minimum": 0,
                                          "maximum": 9007199254740991
                                        },
                                        {
                                          "type": "null"
                                        }
                                      ]
                                    },
                                    "habit_logs_since_boundary": {
                                      "anyOf": [
                                        {
                                          "type": "integer",
                                          "minimum": 0,
                                          "maximum": 9007199254740991
                                        },
                                        {
                                          "type": "null"
                                        }
                                      ]
                                    },
                                    "performance_share": {
                                      "anyOf": [
                                        {
                                          "type": "number"
                                        },
                                        {
                                          "type": "null"
                                        }
                                      ]
                                    }
                                  },
                                  "required": [
                                    "id",
                                    "objective_id",
                                    "title",
                                    "description",
                                    "metric_type",
                                    "start_value",
                                    "target_value",
                                    "unit",
                                    "cadence",
                                    "per",
                                    "since",
                                    "status",
                                    "created_at",
                                    "short_code",
                                    "url",
                                    "current_value",
                                    "boundary_value",
                                    "progress_pct",
                                    "boundary_progress_pct",
                                    "movement",
                                    "movement_pp",
                                    "evidence_count",
                                    "last_recorded_at",
                                    "habit_expected_since_boundary",
                                    "habit_logs_since_boundary",
                                    "performance_share"
                                  ],
                                  "additionalProperties": false
                                },
                                {
                                  "type": "object",
                                  "properties": {
                                    "id": {
                                      "type": "string",
                                      "format": "uuid",
                                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                                    },
                                    "objective_id": {
                                      "type": "string",
                                      "format": "uuid",
                                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                                    },
                                    "title": {
                                      "type": "string"
                                    },
                                    "description": {
                                      "anyOf": [
                                        {
                                          "type": "string"
                                        },
                                        {
                                          "type": "null"
                                        }
                                      ]
                                    },
                                    "metric_type": {
                                      "type": "string",
                                      "const": "milestone"
                                    },
                                    "start_value": {
                                      "type": "number",
                                      "const": 0
                                    },
                                    "target_value": {
                                      "type": "number",
                                      "const": 1
                                    },
                                    "unit": {
                                      "type": "null"
                                    },
                                    "cadence": {
                                      "type": "null"
                                    },
                                    "per": {
                                      "type": "null"
                                    },
                                    "since": {
                                      "type": "null"
                                    },
                                    "status": {
                                      "type": "string",
                                      "enum": [
                                        "in_progress",
                                        "completed"
                                      ],
                                      "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                                    },
                                    "created_at": {
                                      "type": "string",
                                      "format": "date-time",
                                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                    },
                                    "short_code": {
                                      "type": "string",
                                      "minLength": 1
                                    },
                                    "url": {
                                      "type": "string",
                                      "format": "uri"
                                    },
                                    "current_value": {
                                      "anyOf": [
                                        {
                                          "type": "number",
                                          "const": 0
                                        },
                                        {
                                          "type": "number",
                                          "const": 1
                                        }
                                      ]
                                    },
                                    "boundary_value": {
                                      "anyOf": [
                                        {
                                          "type": "number",
                                          "const": 0
                                        },
                                        {
                                          "type": "number",
                                          "const": 1
                                        }
                                      ]
                                    },
                                    "progress_pct": {
                                      "anyOf": [
                                        {
                                          "type": "number"
                                        },
                                        {
                                          "type": "null"
                                        }
                                      ]
                                    },
                                    "boundary_progress_pct": {
                                      "anyOf": [
                                        {
                                          "type": "number"
                                        },
                                        {
                                          "type": "null"
                                        }
                                      ]
                                    },
                                    "movement": {
                                      "anyOf": [
                                        {
                                          "type": "number"
                                        },
                                        {
                                          "type": "null"
                                        }
                                      ]
                                    },
                                    "movement_pp": {
                                      "anyOf": [
                                        {
                                          "type": "number"
                                        },
                                        {
                                          "type": "null"
                                        }
                                      ]
                                    },
                                    "evidence_count": {
                                      "type": "integer",
                                      "minimum": 0,
                                      "maximum": 9007199254740991
                                    },
                                    "last_recorded_at": {
                                      "anyOf": [
                                        {
                                          "type": "string",
                                          "format": "date-time",
                                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                        },
                                        {
                                          "type": "null"
                                        }
                                      ]
                                    },
                                    "habit_expected_since_boundary": {
                                      "anyOf": [
                                        {
                                          "type": "integer",
                                          "minimum": 0,
                                          "maximum": 9007199254740991
                                        },
                                        {
                                          "type": "null"
                                        }
                                      ]
                                    },
                                    "habit_logs_since_boundary": {
                                      "anyOf": [
                                        {
                                          "type": "integer",
                                          "minimum": 0,
                                          "maximum": 9007199254740991
                                        },
                                        {
                                          "type": "null"
                                        }
                                      ]
                                    },
                                    "performance_share": {
                                      "anyOf": [
                                        {
                                          "type": "number"
                                        },
                                        {
                                          "type": "null"
                                        }
                                      ]
                                    }
                                  },
                                  "required": [
                                    "id",
                                    "objective_id",
                                    "title",
                                    "description",
                                    "metric_type",
                                    "start_value",
                                    "target_value",
                                    "unit",
                                    "cadence",
                                    "per",
                                    "since",
                                    "status",
                                    "created_at",
                                    "short_code",
                                    "url",
                                    "current_value",
                                    "boundary_value",
                                    "progress_pct",
                                    "boundary_progress_pct",
                                    "movement",
                                    "movement_pp",
                                    "evidence_count",
                                    "last_recorded_at",
                                    "habit_expected_since_boundary",
                                    "habit_logs_since_boundary",
                                    "performance_share"
                                  ],
                                  "additionalProperties": false
                                },
                                {
                                  "type": "object",
                                  "properties": {
                                    "id": {
                                      "type": "string",
                                      "format": "uuid",
                                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                                    },
                                    "objective_id": {
                                      "type": "string",
                                      "format": "uuid",
                                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                                    },
                                    "title": {
                                      "type": "string"
                                    },
                                    "description": {
                                      "anyOf": [
                                        {
                                          "type": "string"
                                        },
                                        {
                                          "type": "null"
                                        }
                                      ]
                                    },
                                    "metric_type": {
                                      "type": "string",
                                      "const": "habit"
                                    },
                                    "start_value": {
                                      "type": "number",
                                      "const": 0
                                    },
                                    "target_value": {
                                      "type": "number",
                                      "const": 100
                                    },
                                    "unit": {
                                      "type": "null"
                                    },
                                    "cadence": {
                                      "type": "string",
                                      "enum": [
                                        "weekly",
                                        "monthly"
                                      ],
                                      "description": "UI label: Cadence. Weekly or Monthly; per supplies the Times value."
                                    },
                                    "per": {
                                      "type": "integer",
                                      "exclusiveMinimum": 0,
                                      "maximum": 9007199254740991
                                    },
                                    "since": {
                                      "type": "string",
                                      "format": "date",
                                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                                      "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                                    },
                                    "status": {
                                      "type": "string",
                                      "enum": [
                                        "in_progress",
                                        "completed"
                                      ],
                                      "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                                    },
                                    "created_at": {
                                      "type": "string",
                                      "format": "date-time",
                                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                    },
                                    "short_code": {
                                      "type": "string",
                                      "minLength": 1
                                    },
                                    "url": {
                                      "type": "string",
                                      "format": "uri"
                                    },
                                    "current_value": {
                                      "type": "number",
                                      "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                                    },
                                    "boundary_value": {
                                      "type": "number"
                                    },
                                    "progress_pct": {
                                      "anyOf": [
                                        {
                                          "type": "number"
                                        },
                                        {
                                          "type": "null"
                                        }
                                      ]
                                    },
                                    "boundary_progress_pct": {
                                      "anyOf": [
                                        {
                                          "type": "number"
                                        },
                                        {
                                          "type": "null"
                                        }
                                      ]
                                    },
                                    "movement": {
                                      "anyOf": [
                                        {
                                          "type": "number"
                                        },
                                        {
                                          "type": "null"
                                        }
                                      ]
                                    },
                                    "movement_pp": {
                                      "anyOf": [
                                        {
                                          "type": "number"
                                        },
                                        {
                                          "type": "null"
                                        }
                                      ]
                                    },
                                    "evidence_count": {
                                      "type": "integer",
                                      "minimum": 0,
                                      "maximum": 9007199254740991
                                    },
                                    "last_recorded_at": {
                                      "anyOf": [
                                        {
                                          "type": "string",
                                          "format": "date-time",
                                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                        },
                                        {
                                          "type": "null"
                                        }
                                      ]
                                    },
                                    "habit_expected_since_boundary": {
                                      "anyOf": [
                                        {
                                          "type": "integer",
                                          "minimum": 0,
                                          "maximum": 9007199254740991
                                        },
                                        {
                                          "type": "null"
                                        }
                                      ]
                                    },
                                    "habit_logs_since_boundary": {
                                      "anyOf": [
                                        {
                                          "type": "integer",
                                          "minimum": 0,
                                          "maximum": 9007199254740991
                                        },
                                        {
                                          "type": "null"
                                        }
                                      ]
                                    },
                                    "performance_share": {
                                      "anyOf": [
                                        {
                                          "type": "number"
                                        },
                                        {
                                          "type": "null"
                                        }
                                      ]
                                    }
                                  },
                                  "required": [
                                    "id",
                                    "objective_id",
                                    "title",
                                    "description",
                                    "metric_type",
                                    "start_value",
                                    "target_value",
                                    "unit",
                                    "cadence",
                                    "per",
                                    "since",
                                    "status",
                                    "created_at",
                                    "short_code",
                                    "url",
                                    "current_value",
                                    "boundary_value",
                                    "progress_pct",
                                    "boundary_progress_pct",
                                    "movement",
                                    "movement_pp",
                                    "evidence_count",
                                    "last_recorded_at",
                                    "habit_expected_since_boundary",
                                    "habit_logs_since_boundary",
                                    "performance_share"
                                  ],
                                  "additionalProperties": false
                                },
                                {
                                  "type": "object",
                                  "properties": {
                                    "id": {
                                      "type": "string",
                                      "format": "uuid",
                                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                                    },
                                    "objective_id": {
                                      "type": "string",
                                      "format": "uuid",
                                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                                    },
                                    "title": {
                                      "type": "string"
                                    },
                                    "description": {
                                      "anyOf": [
                                        {
                                          "type": "string"
                                        },
                                        {
                                          "type": "null"
                                        }
                                      ]
                                    },
                                    "metric_type": {
                                      "type": "string",
                                      "const": "performance"
                                    },
                                    "start_value": {
                                      "anyOf": [
                                        {
                                          "type": "number"
                                        },
                                        {
                                          "type": "null"
                                        }
                                      ],
                                      "description": "UI label: Start. Metric baseline; habit baselines are derived rather than stored."
                                    },
                                    "target_value": {
                                      "type": "number"
                                    },
                                    "unit": {
                                      "anyOf": [
                                        {
                                          "type": "string"
                                        },
                                        {
                                          "type": "null"
                                        }
                                      ],
                                      "description": "UI label: Unit. Used by Number and Performance results."
                                    },
                                    "cadence": {
                                      "type": "null"
                                    },
                                    "per": {
                                      "type": "null"
                                    },
                                    "since": {
                                      "type": "string",
                                      "format": "date",
                                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                                      "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                                    },
                                    "status": {
                                      "type": "string",
                                      "enum": [
                                        "in_progress",
                                        "completed"
                                      ],
                                      "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                                    },
                                    "created_at": {
                                      "type": "string",
                                      "format": "date-time",
                                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                    },
                                    "short_code": {
                                      "type": "string",
                                      "minLength": 1
                                    },
                                    "url": {
                                      "type": "string",
                                      "format": "uri"
                                    },
                                    "current_value": {
                                      "type": "number",
                                      "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                                    },
                                    "boundary_value": {
                                      "type": "number"
                                    },
                                    "progress_pct": {
                                      "anyOf": [
                                        {
                                          "type": "number"
                                        },
                                        {
                                          "type": "null"
                                        }
                                      ]
                                    },
                                    "boundary_progress_pct": {
                                      "anyOf": [
                                        {
                                          "type": "number"
                                        },
                                        {
                                          "type": "null"
                                        }
                                      ]
                                    },
                                    "movement": {
                                      "anyOf": [
                                        {
                                          "type": "number"
                                        },
                                        {
                                          "type": "null"
                                        }
                                      ]
                                    },
                                    "movement_pp": {
                                      "anyOf": [
                                        {
                                          "type": "number"
                                        },
                                        {
                                          "type": "null"
                                        }
                                      ]
                                    },
                                    "evidence_count": {
                                      "type": "integer",
                                      "minimum": 0,
                                      "maximum": 9007199254740991
                                    },
                                    "last_recorded_at": {
                                      "anyOf": [
                                        {
                                          "type": "string",
                                          "format": "date-time",
                                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                        },
                                        {
                                          "type": "null"
                                        }
                                      ]
                                    },
                                    "habit_expected_since_boundary": {
                                      "anyOf": [
                                        {
                                          "type": "integer",
                                          "minimum": 0,
                                          "maximum": 9007199254740991
                                        },
                                        {
                                          "type": "null"
                                        }
                                      ]
                                    },
                                    "habit_logs_since_boundary": {
                                      "anyOf": [
                                        {
                                          "type": "integer",
                                          "minimum": 0,
                                          "maximum": 9007199254740991
                                        },
                                        {
                                          "type": "null"
                                        }
                                      ]
                                    },
                                    "performance_share": {
                                      "anyOf": [
                                        {
                                          "type": "number"
                                        },
                                        {
                                          "type": "null"
                                        }
                                      ]
                                    }
                                  },
                                  "required": [
                                    "id",
                                    "objective_id",
                                    "title",
                                    "description",
                                    "metric_type",
                                    "start_value",
                                    "target_value",
                                    "unit",
                                    "cadence",
                                    "per",
                                    "since",
                                    "status",
                                    "created_at",
                                    "short_code",
                                    "url",
                                    "current_value",
                                    "boundary_value",
                                    "progress_pct",
                                    "boundary_progress_pct",
                                    "movement",
                                    "movement_pp",
                                    "evidence_count",
                                    "last_recorded_at",
                                    "habit_expected_since_boundary",
                                    "habit_logs_since_boundary",
                                    "performance_share"
                                  ],
                                  "additionalProperties": false
                                }
                              ]
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "action": {
                          "anyOf": [
                            {
                              "type": "object",
                              "properties": {
                                "id": {
                                  "type": "string",
                                  "format": "uuid",
                                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                                },
                                "cycle_id": {
                                  "type": "string",
                                  "format": "uuid",
                                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                                },
                                "objective_id": {
                                  "anyOf": [
                                    {
                                      "type": "string",
                                      "format": "uuid",
                                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                },
                                "title": {
                                  "type": "string"
                                },
                                "description": {
                                  "anyOf": [
                                    {
                                      "type": "string"
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                },
                                "due_at": {
                                  "anyOf": [
                                    {
                                      "type": "string",
                                      "format": "date",
                                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                                      "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ],
                                  "description": "UI label: Due. May be unset on a web draft; a set date cannot be cleared."
                                },
                                "status": {
                                  "type": "string",
                                  "enum": [
                                    "open",
                                    "in_progress",
                                    "done"
                                  ],
                                  "description": "Action status: Open, In progress or Done. The To do UI group includes Open and In progress; Overdue is derived, not a status."
                                },
                                "sort_order": {
                                  "anyOf": [
                                    {
                                      "type": "number"
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ],
                                  "description": "Drag order within an action group; not a progress status."
                                },
                                "session_id": {
                                  "anyOf": [
                                    {
                                      "type": "string",
                                      "format": "uuid",
                                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                },
                                "created_at": {
                                  "type": "string",
                                  "format": "date-time",
                                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                },
                                "url": {
                                  "type": "string",
                                  "format": "uri"
                                },
                                "overdue": {
                                  "type": "boolean"
                                },
                                "done_since_boundary": {
                                  "type": "boolean"
                                }
                              },
                              "required": [
                                "id",
                                "cycle_id",
                                "objective_id",
                                "title",
                                "description",
                                "due_at",
                                "status",
                                "sort_order",
                                "session_id",
                                "created_at",
                                "url",
                                "overdue",
                                "done_since_boundary"
                              ],
                              "additionalProperties": false
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "note": {
                          "anyOf": [
                            {
                              "type": "object",
                              "properties": {
                                "id": {
                                  "type": "string",
                                  "format": "uuid",
                                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                                },
                                "text": {
                                  "type": "string",
                                  "minLength": 1
                                },
                                "recorded_at": {
                                  "type": "string",
                                  "format": "date-time",
                                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                },
                                "url": {
                                  "type": "string",
                                  "format": "uri"
                                },
                                "since_boundary": {
                                  "type": "boolean"
                                }
                              },
                              "required": [
                                "id",
                                "text",
                                "recorded_at",
                                "url",
                                "since_boundary"
                              ],
                              "additionalProperties": false
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "session": {
                          "anyOf": [
                            {
                              "type": "object",
                              "properties": {
                                "id": {
                                  "type": "string",
                                  "format": "uuid",
                                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                                },
                                "vendor": {
                                  "type": "string",
                                  "enum": [
                                    "claude",
                                    "openai"
                                  ],
                                  "description": "Conversation host: claude is shown as Claude; openai is shown as ChatGPT."
                                },
                                "source_url": {
                                  "anyOf": [
                                    {
                                      "type": "string",
                                      "format": "uri"
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ],
                                  "description": "External conversation link used by Open the conversation. Not the app detail URL."
                                },
                                "type": {
                                  "anyOf": [
                                    {
                                      "type": "string",
                                      "enum": [
                                        "goal_setup",
                                        "check_in",
                                        "review",
                                        "open_coaching"
                                      ],
                                      "description": "Coaching session type: Goal setup, Check-in, Review or Open coaching. Separate from whether the session is still open."
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                },
                                "briefing_notes": {
                                  "type": "string",
                                  "description": "UI document: Briefing. Server-prepared coaching context."
                                },
                                "headline": {
                                  "anyOf": [
                                    {
                                      "type": "string"
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ],
                                  "description": "One-line coaching-session summary used in session lists."
                                },
                                "summary_notes": {
                                  "anyOf": [
                                    {
                                      "type": "string"
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ],
                                  "description": "UI document: Summary. Saved when the coaching session closes."
                                },
                                "started_at": {
                                  "type": "string",
                                  "format": "date-time",
                                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                },
                                "ended_at": {
                                  "anyOf": [
                                    {
                                      "type": "string",
                                      "format": "date-time",
                                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ],
                                  "description": "Closed when set; In progress when null. This is derived session state, not a stored status enum."
                                },
                                "url": {
                                  "type": "string",
                                  "format": "uri",
                                  "description": "Internal app link to coaching session details; distinct from source_url."
                                },
                                "duration_minutes": {
                                  "anyOf": [
                                    {
                                      "type": "integer",
                                      "minimum": 0,
                                      "maximum": 9007199254740991
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                },
                                "actions_created": {
                                  "type": "integer",
                                  "minimum": 0,
                                  "maximum": 9007199254740991
                                },
                                "actions_reviewed": {
                                  "type": "integer",
                                  "minimum": 0,
                                  "maximum": 9007199254740991
                                }
                              },
                              "required": [
                                "id",
                                "vendor",
                                "source_url",
                                "type",
                                "briefing_notes",
                                "headline",
                                "summary_notes",
                                "started_at",
                                "ended_at",
                                "url",
                                "duration_minutes",
                                "actions_created",
                                "actions_reviewed"
                              ],
                              "additionalProperties": false
                            },
                            {
                              "type": "null"
                            }
                          ]
                        }
                      },
                      "required": [
                        "objective",
                        "result",
                        "action",
                        "note",
                        "session"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "required": [
                    "profile",
                    "boundary",
                    "cycle_line",
                    "cycles",
                    "cycle",
                    "objectives",
                    "results",
                    "actions",
                    "notes",
                    "last_completed_session",
                    "selected"
                  ],
                  "additionalProperties": false
                },
                "progress_by_type": {
                  "type": "object",
                  "properties": {
                    "objectives": {
                      "type": "object",
                      "properties": {
                        "on_track": {
                          "type": "integer",
                          "minimum": -9007199254740991,
                          "maximum": 9007199254740991
                        },
                        "off_track": {
                          "type": "integer",
                          "minimum": -9007199254740991,
                          "maximum": 9007199254740991
                        },
                        "completed": {
                          "type": "integer",
                          "minimum": -9007199254740991,
                          "maximum": 9007199254740991
                        }
                      },
                      "required": [
                        "on_track",
                        "off_track",
                        "completed"
                      ],
                      "additionalProperties": false
                    },
                    "results": {
                      "type": "object",
                      "properties": {
                        "in_play": {
                          "type": "integer",
                          "minimum": -9007199254740991,
                          "maximum": 9007199254740991
                        },
                        "in_progress": {
                          "type": "integer",
                          "minimum": -9007199254740991,
                          "maximum": 9007199254740991
                        },
                        "completed": {
                          "type": "integer",
                          "minimum": -9007199254740991,
                          "maximum": 9007199254740991
                        },
                        "average_progress_pct": {
                          "anyOf": [
                            {
                              "type": "number"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        }
                      },
                      "required": [
                        "in_play",
                        "in_progress",
                        "completed",
                        "average_progress_pct"
                      ],
                      "additionalProperties": false
                    },
                    "actions": {
                      "type": "object",
                      "properties": {
                        "open": {
                          "type": "integer",
                          "minimum": -9007199254740991,
                          "maximum": 9007199254740991
                        },
                        "in_progress": {
                          "type": "integer",
                          "minimum": -9007199254740991,
                          "maximum": 9007199254740991
                        },
                        "done": {
                          "type": "integer",
                          "minimum": -9007199254740991,
                          "maximum": 9007199254740991
                        },
                        "overdue": {
                          "type": "integer",
                          "minimum": -9007199254740991,
                          "maximum": 9007199254740991
                        }
                      },
                      "required": [
                        "open",
                        "in_progress",
                        "done",
                        "overdue"
                      ],
                      "additionalProperties": false
                    },
                    "notes": {
                      "type": "object",
                      "properties": {
                        "total": {
                          "type": "integer",
                          "minimum": -9007199254740991,
                          "maximum": 9007199254740991
                        },
                        "since_boundary": {
                          "type": "integer",
                          "minimum": -9007199254740991,
                          "maximum": 9007199254740991
                        }
                      },
                      "required": [
                        "total",
                        "since_boundary"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "required": [
                    "objectives",
                    "results",
                    "actions",
                    "notes"
                  ],
                  "additionalProperties": false
                },
                "session_history": {
                  "type": "object",
                  "properties": {
                    "items": {
                      "maxItems": 6,
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "id": {
                            "type": "string",
                            "format": "uuid",
                            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                            "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                          },
                          "vendor": {
                            "type": "string",
                            "enum": [
                              "claude",
                              "openai"
                            ],
                            "description": "Conversation host: claude is shown as Claude; openai is shown as ChatGPT."
                          },
                          "source_url": {
                            "anyOf": [
                              {
                                "type": "string",
                                "format": "uri"
                              },
                              {
                                "type": "null"
                              }
                            ],
                            "description": "External conversation link used by Open the conversation. Not the app detail URL."
                          },
                          "type": {
                            "anyOf": [
                              {
                                "type": "string",
                                "enum": [
                                  "goal_setup",
                                  "check_in",
                                  "review",
                                  "open_coaching"
                                ],
                                "description": "Coaching session type: Goal setup, Check-in, Review or Open coaching. Separate from whether the session is still open."
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "headline": {
                            "anyOf": [
                              {
                                "type": "string"
                              },
                              {
                                "type": "null"
                              }
                            ],
                            "description": "One-line coaching-session summary used in session lists."
                          },
                          "started_at": {
                            "type": "string",
                            "format": "date-time",
                            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                          },
                          "ended_at": {
                            "anyOf": [
                              {
                                "type": "string",
                                "format": "date-time",
                                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                              },
                              {
                                "type": "null"
                              }
                            ],
                            "description": "Closed when set; In progress when null. This is derived session state, not a stored status enum."
                          },
                          "url": {
                            "type": "string",
                            "format": "uri",
                            "description": "Internal app link to coaching session details; distinct from source_url."
                          },
                          "duration_minutes": {
                            "anyOf": [
                              {
                                "type": "integer",
                                "minimum": 0,
                                "maximum": 9007199254740991
                              },
                              {
                                "type": "null"
                              }
                            ]
                          },
                          "actions_created": {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          "actions_reviewed": {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          }
                        },
                        "required": [
                          "id",
                          "vendor",
                          "source_url",
                          "type",
                          "headline",
                          "started_at",
                          "ended_at",
                          "url",
                          "duration_minutes",
                          "actions_created",
                          "actions_reviewed"
                        ],
                        "additionalProperties": false
                      }
                    },
                    "next_cursor": {
                      "anyOf": [
                        {
                          "type": "string",
                          "minLength": 1
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "continuation": {
                      "anyOf": [
                        {
                          "type": "object",
                          "properties": {
                            "tool": {
                              "type": "string",
                              "const": "session_read"
                            },
                            "arguments": {
                              "type": "object",
                              "properties": {
                                "cursor": {
                                  "type": "string",
                                  "minLength": 1
                                },
                                "limit": {
                                  "type": "integer",
                                  "minimum": 1,
                                  "maximum": 100
                                },
                                "window": {
                                  "type": "object",
                                  "properties": {
                                    "since": {
                                      "type": "string",
                                      "format": "date-time",
                                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                    },
                                    "until": {
                                      "type": "string",
                                      "format": "date-time",
                                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                    }
                                  },
                                  "required": [
                                    "since",
                                    "until"
                                  ],
                                  "additionalProperties": false
                                },
                                "operation": {
                                  "type": "string",
                                  "const": "list"
                                }
                              },
                              "required": [
                                "cursor",
                                "limit",
                                "operation"
                              ],
                              "additionalProperties": false
                            }
                          },
                          "required": [
                            "tool",
                            "arguments"
                          ],
                          "additionalProperties": false
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "items",
                    "next_cursor",
                    "continuation"
                  ],
                  "additionalProperties": false
                },
                "attention": {
                  "type": "object",
                  "properties": {
                    "overdue_actions": {
                      "type": "object",
                      "properties": {
                        "items": {
                          "maxItems": 50,
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                              },
                              "cycle_id": {
                                "type": "string",
                                "format": "uuid",
                                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                              },
                              "objective_id": {
                                "anyOf": [
                                  {
                                    "type": "string",
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "title": {
                                "type": "string"
                              },
                              "description": {
                                "anyOf": [
                                  {
                                    "type": "string"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "due_at": {
                                "anyOf": [
                                  {
                                    "type": "string",
                                    "format": "date",
                                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                                    "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                                  },
                                  {
                                    "type": "null"
                                  }
                                ],
                                "description": "UI label: Due. May be unset on a web draft; a set date cannot be cleared."
                              },
                              "status": {
                                "type": "string",
                                "enum": [
                                  "open",
                                  "in_progress",
                                  "done"
                                ],
                                "description": "Action status: Open, In progress or Done. The To do UI group includes Open and In progress; Overdue is derived, not a status."
                              },
                              "sort_order": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "null"
                                  }
                                ],
                                "description": "Drag order within an action group; not a progress status."
                              },
                              "session_id": {
                                "anyOf": [
                                  {
                                    "type": "string",
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                                  },
                                  {
                                    "type": "null"
                                  }
                                ]
                              },
                              "created_at": {
                                "type": "string",
                                "format": "date-time",
                                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                              },
                              "url": {
                                "type": "string",
                                "format": "uri"
                              },
                              "overdue": {
                                "type": "boolean"
                              },
                              "done_since_boundary": {
                                "type": "boolean"
                              }
                            },
                            "required": [
                              "id",
                              "cycle_id",
                              "objective_id",
                              "title",
                              "description",
                              "due_at",
                              "status",
                              "sort_order",
                              "session_id",
                              "created_at",
                              "url",
                              "overdue",
                              "done_since_boundary"
                            ],
                            "additionalProperties": false
                          }
                        },
                        "next_cursor": {
                          "anyOf": [
                            {
                              "type": "string",
                              "minLength": 1
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "continuation": {
                          "anyOf": [
                            {
                              "type": "object",
                              "properties": {
                                "tool": {
                                  "type": "string",
                                  "const": "action_read"
                                },
                                "arguments": {
                                  "type": "object",
                                  "properties": {
                                    "cursor": {
                                      "type": "string",
                                      "minLength": 1
                                    },
                                    "limit": {
                                      "type": "integer",
                                      "minimum": 1,
                                      "maximum": 100
                                    },
                                    "cycle_id": {
                                      "type": "string",
                                      "format": "uuid",
                                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                                    },
                                    "objective_id": {
                                      "anyOf": [
                                        {
                                          "type": "string",
                                          "format": "uuid",
                                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                                        },
                                        {
                                          "type": "null"
                                        }
                                      ]
                                    },
                                    "status": {
                                      "type": "string",
                                      "enum": [
                                        "open",
                                        "in_progress",
                                        "done"
                                      ],
                                      "description": "Action status: Open, In progress or Done. The To do UI group includes Open and In progress; Overdue is derived, not a status."
                                    },
                                    "due_before": {
                                      "type": "string",
                                      "format": "date",
                                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                                      "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                                    },
                                    "outstanding": {
                                      "description": "Only open or in_progress actions; exclude done across every page.",
                                      "type": "boolean",
                                      "const": true
                                    },
                                    "session_id": {
                                      "description": "Filter actions created in this owned session; combine with cycle_id to select its cycle explicitly.",
                                      "type": "string",
                                      "format": "uuid",
                                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                                    },
                                    "overdue": {
                                      "type": "boolean",
                                      "const": true
                                    },
                                    "operation": {
                                      "type": "string",
                                      "const": "list"
                                    }
                                  },
                                  "required": [
                                    "cursor",
                                    "limit",
                                    "cycle_id",
                                    "due_before",
                                    "overdue",
                                    "operation"
                                  ],
                                  "additionalProperties": false
                                }
                              },
                              "required": [
                                "tool",
                                "arguments"
                              ],
                              "additionalProperties": false
                            },
                            {
                              "type": "null"
                            }
                          ]
                        }
                      },
                      "required": [
                        "items",
                        "next_cursor",
                        "continuation"
                      ],
                      "additionalProperties": false
                    },
                    "never_updated_results": {
                      "type": "object",
                      "properties": {
                        "items": {
                          "maxItems": 50,
                          "type": "array",
                          "items": {
                            "oneOf": [
                              {
                                "type": "object",
                                "properties": {
                                  "id": {
                                    "type": "string",
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                                  },
                                  "objective_id": {
                                    "type": "string",
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                                  },
                                  "title": {
                                    "type": "string"
                                  },
                                  "description": {
                                    "anyOf": [
                                      {
                                        "type": "string"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "metric_type": {
                                    "type": "string",
                                    "const": "number"
                                  },
                                  "start_value": {
                                    "type": "number"
                                  },
                                  "target_value": {
                                    "type": "number"
                                  },
                                  "unit": {
                                    "anyOf": [
                                      {
                                        "type": "string"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ],
                                    "description": "UI label: Unit. Used by Number and Performance results."
                                  },
                                  "cadence": {
                                    "type": "null"
                                  },
                                  "per": {
                                    "type": "null"
                                  },
                                  "since": {
                                    "type": "null"
                                  },
                                  "status": {
                                    "type": "string",
                                    "enum": [
                                      "in_progress",
                                      "completed"
                                    ],
                                    "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                                  },
                                  "created_at": {
                                    "type": "string",
                                    "format": "date-time",
                                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                  },
                                  "short_code": {
                                    "type": "string",
                                    "minLength": 1
                                  },
                                  "url": {
                                    "type": "string",
                                    "format": "uri"
                                  },
                                  "current_value": {
                                    "type": "number",
                                    "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                                  },
                                  "boundary_value": {
                                    "type": "number"
                                  },
                                  "progress_pct": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "boundary_progress_pct": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "movement": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "movement_pp": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "evidence_count": {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  "last_recorded_at": {
                                    "anyOf": [
                                      {
                                        "type": "string",
                                        "format": "date-time",
                                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "habit_expected_since_boundary": {
                                    "anyOf": [
                                      {
                                        "type": "integer",
                                        "minimum": 0,
                                        "maximum": 9007199254740991
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "habit_logs_since_boundary": {
                                    "anyOf": [
                                      {
                                        "type": "integer",
                                        "minimum": 0,
                                        "maximum": 9007199254740991
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "performance_share": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  }
                                },
                                "required": [
                                  "id",
                                  "objective_id",
                                  "title",
                                  "description",
                                  "metric_type",
                                  "start_value",
                                  "target_value",
                                  "unit",
                                  "cadence",
                                  "per",
                                  "since",
                                  "status",
                                  "created_at",
                                  "short_code",
                                  "url",
                                  "current_value",
                                  "boundary_value",
                                  "progress_pct",
                                  "boundary_progress_pct",
                                  "movement",
                                  "movement_pp",
                                  "evidence_count",
                                  "last_recorded_at",
                                  "habit_expected_since_boundary",
                                  "habit_logs_since_boundary",
                                  "performance_share"
                                ],
                                "additionalProperties": false
                              },
                              {
                                "type": "object",
                                "properties": {
                                  "id": {
                                    "type": "string",
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                                  },
                                  "objective_id": {
                                    "type": "string",
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                                  },
                                  "title": {
                                    "type": "string"
                                  },
                                  "description": {
                                    "anyOf": [
                                      {
                                        "type": "string"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "metric_type": {
                                    "type": "string",
                                    "const": "percentage"
                                  },
                                  "start_value": {
                                    "type": "number",
                                    "minimum": 0,
                                    "maximum": 100
                                  },
                                  "target_value": {
                                    "type": "number",
                                    "minimum": 0,
                                    "maximum": 100
                                  },
                                  "unit": {
                                    "type": "null"
                                  },
                                  "cadence": {
                                    "type": "null"
                                  },
                                  "per": {
                                    "type": "null"
                                  },
                                  "since": {
                                    "type": "null"
                                  },
                                  "status": {
                                    "type": "string",
                                    "enum": [
                                      "in_progress",
                                      "completed"
                                    ],
                                    "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                                  },
                                  "created_at": {
                                    "type": "string",
                                    "format": "date-time",
                                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                  },
                                  "short_code": {
                                    "type": "string",
                                    "minLength": 1
                                  },
                                  "url": {
                                    "type": "string",
                                    "format": "uri"
                                  },
                                  "current_value": {
                                    "type": "number",
                                    "minimum": 0,
                                    "maximum": 100
                                  },
                                  "boundary_value": {
                                    "type": "number",
                                    "minimum": 0,
                                    "maximum": 100
                                  },
                                  "progress_pct": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "boundary_progress_pct": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "movement": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "movement_pp": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "evidence_count": {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  "last_recorded_at": {
                                    "anyOf": [
                                      {
                                        "type": "string",
                                        "format": "date-time",
                                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "habit_expected_since_boundary": {
                                    "anyOf": [
                                      {
                                        "type": "integer",
                                        "minimum": 0,
                                        "maximum": 9007199254740991
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "habit_logs_since_boundary": {
                                    "anyOf": [
                                      {
                                        "type": "integer",
                                        "minimum": 0,
                                        "maximum": 9007199254740991
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "performance_share": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  }
                                },
                                "required": [
                                  "id",
                                  "objective_id",
                                  "title",
                                  "description",
                                  "metric_type",
                                  "start_value",
                                  "target_value",
                                  "unit",
                                  "cadence",
                                  "per",
                                  "since",
                                  "status",
                                  "created_at",
                                  "short_code",
                                  "url",
                                  "current_value",
                                  "boundary_value",
                                  "progress_pct",
                                  "boundary_progress_pct",
                                  "movement",
                                  "movement_pp",
                                  "evidence_count",
                                  "last_recorded_at",
                                  "habit_expected_since_boundary",
                                  "habit_logs_since_boundary",
                                  "performance_share"
                                ],
                                "additionalProperties": false
                              },
                              {
                                "type": "object",
                                "properties": {
                                  "id": {
                                    "type": "string",
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                                  },
                                  "objective_id": {
                                    "type": "string",
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                                  },
                                  "title": {
                                    "type": "string"
                                  },
                                  "description": {
                                    "anyOf": [
                                      {
                                        "type": "string"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "metric_type": {
                                    "type": "string",
                                    "const": "milestone"
                                  },
                                  "start_value": {
                                    "type": "number",
                                    "const": 0
                                  },
                                  "target_value": {
                                    "type": "number",
                                    "const": 1
                                  },
                                  "unit": {
                                    "type": "null"
                                  },
                                  "cadence": {
                                    "type": "null"
                                  },
                                  "per": {
                                    "type": "null"
                                  },
                                  "since": {
                                    "type": "null"
                                  },
                                  "status": {
                                    "type": "string",
                                    "enum": [
                                      "in_progress",
                                      "completed"
                                    ],
                                    "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                                  },
                                  "created_at": {
                                    "type": "string",
                                    "format": "date-time",
                                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                  },
                                  "short_code": {
                                    "type": "string",
                                    "minLength": 1
                                  },
                                  "url": {
                                    "type": "string",
                                    "format": "uri"
                                  },
                                  "current_value": {
                                    "anyOf": [
                                      {
                                        "type": "number",
                                        "const": 0
                                      },
                                      {
                                        "type": "number",
                                        "const": 1
                                      }
                                    ]
                                  },
                                  "boundary_value": {
                                    "anyOf": [
                                      {
                                        "type": "number",
                                        "const": 0
                                      },
                                      {
                                        "type": "number",
                                        "const": 1
                                      }
                                    ]
                                  },
                                  "progress_pct": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "boundary_progress_pct": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "movement": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "movement_pp": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "evidence_count": {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  "last_recorded_at": {
                                    "anyOf": [
                                      {
                                        "type": "string",
                                        "format": "date-time",
                                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "habit_expected_since_boundary": {
                                    "anyOf": [
                                      {
                                        "type": "integer",
                                        "minimum": 0,
                                        "maximum": 9007199254740991
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "habit_logs_since_boundary": {
                                    "anyOf": [
                                      {
                                        "type": "integer",
                                        "minimum": 0,
                                        "maximum": 9007199254740991
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "performance_share": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  }
                                },
                                "required": [
                                  "id",
                                  "objective_id",
                                  "title",
                                  "description",
                                  "metric_type",
                                  "start_value",
                                  "target_value",
                                  "unit",
                                  "cadence",
                                  "per",
                                  "since",
                                  "status",
                                  "created_at",
                                  "short_code",
                                  "url",
                                  "current_value",
                                  "boundary_value",
                                  "progress_pct",
                                  "boundary_progress_pct",
                                  "movement",
                                  "movement_pp",
                                  "evidence_count",
                                  "last_recorded_at",
                                  "habit_expected_since_boundary",
                                  "habit_logs_since_boundary",
                                  "performance_share"
                                ],
                                "additionalProperties": false
                              },
                              {
                                "type": "object",
                                "properties": {
                                  "id": {
                                    "type": "string",
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                                  },
                                  "objective_id": {
                                    "type": "string",
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                                  },
                                  "title": {
                                    "type": "string"
                                  },
                                  "description": {
                                    "anyOf": [
                                      {
                                        "type": "string"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "metric_type": {
                                    "type": "string",
                                    "const": "habit"
                                  },
                                  "start_value": {
                                    "type": "number",
                                    "const": 0
                                  },
                                  "target_value": {
                                    "type": "number",
                                    "const": 100
                                  },
                                  "unit": {
                                    "type": "null"
                                  },
                                  "cadence": {
                                    "type": "string",
                                    "enum": [
                                      "weekly",
                                      "monthly"
                                    ],
                                    "description": "UI label: Cadence. Weekly or Monthly; per supplies the Times value."
                                  },
                                  "per": {
                                    "type": "integer",
                                    "exclusiveMinimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  "since": {
                                    "type": "string",
                                    "format": "date",
                                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                                    "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                                  },
                                  "status": {
                                    "type": "string",
                                    "enum": [
                                      "in_progress",
                                      "completed"
                                    ],
                                    "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                                  },
                                  "created_at": {
                                    "type": "string",
                                    "format": "date-time",
                                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                  },
                                  "short_code": {
                                    "type": "string",
                                    "minLength": 1
                                  },
                                  "url": {
                                    "type": "string",
                                    "format": "uri"
                                  },
                                  "current_value": {
                                    "type": "number",
                                    "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                                  },
                                  "boundary_value": {
                                    "type": "number"
                                  },
                                  "progress_pct": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "boundary_progress_pct": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "movement": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "movement_pp": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "evidence_count": {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  "last_recorded_at": {
                                    "anyOf": [
                                      {
                                        "type": "string",
                                        "format": "date-time",
                                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "habit_expected_since_boundary": {
                                    "anyOf": [
                                      {
                                        "type": "integer",
                                        "minimum": 0,
                                        "maximum": 9007199254740991
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "habit_logs_since_boundary": {
                                    "anyOf": [
                                      {
                                        "type": "integer",
                                        "minimum": 0,
                                        "maximum": 9007199254740991
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "performance_share": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  }
                                },
                                "required": [
                                  "id",
                                  "objective_id",
                                  "title",
                                  "description",
                                  "metric_type",
                                  "start_value",
                                  "target_value",
                                  "unit",
                                  "cadence",
                                  "per",
                                  "since",
                                  "status",
                                  "created_at",
                                  "short_code",
                                  "url",
                                  "current_value",
                                  "boundary_value",
                                  "progress_pct",
                                  "boundary_progress_pct",
                                  "movement",
                                  "movement_pp",
                                  "evidence_count",
                                  "last_recorded_at",
                                  "habit_expected_since_boundary",
                                  "habit_logs_since_boundary",
                                  "performance_share"
                                ],
                                "additionalProperties": false
                              },
                              {
                                "type": "object",
                                "properties": {
                                  "id": {
                                    "type": "string",
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                                  },
                                  "objective_id": {
                                    "type": "string",
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                                  },
                                  "title": {
                                    "type": "string"
                                  },
                                  "description": {
                                    "anyOf": [
                                      {
                                        "type": "string"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "metric_type": {
                                    "type": "string",
                                    "const": "performance"
                                  },
                                  "start_value": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ],
                                    "description": "UI label: Start. Metric baseline; habit baselines are derived rather than stored."
                                  },
                                  "target_value": {
                                    "type": "number"
                                  },
                                  "unit": {
                                    "anyOf": [
                                      {
                                        "type": "string"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ],
                                    "description": "UI label: Unit. Used by Number and Performance results."
                                  },
                                  "cadence": {
                                    "type": "null"
                                  },
                                  "per": {
                                    "type": "null"
                                  },
                                  "since": {
                                    "type": "string",
                                    "format": "date",
                                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                                    "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                                  },
                                  "status": {
                                    "type": "string",
                                    "enum": [
                                      "in_progress",
                                      "completed"
                                    ],
                                    "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                                  },
                                  "created_at": {
                                    "type": "string",
                                    "format": "date-time",
                                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                  },
                                  "short_code": {
                                    "type": "string",
                                    "minLength": 1
                                  },
                                  "url": {
                                    "type": "string",
                                    "format": "uri"
                                  },
                                  "current_value": {
                                    "type": "number",
                                    "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                                  },
                                  "boundary_value": {
                                    "type": "number"
                                  },
                                  "progress_pct": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "boundary_progress_pct": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "movement": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "movement_pp": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "evidence_count": {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  "last_recorded_at": {
                                    "anyOf": [
                                      {
                                        "type": "string",
                                        "format": "date-time",
                                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "habit_expected_since_boundary": {
                                    "anyOf": [
                                      {
                                        "type": "integer",
                                        "minimum": 0,
                                        "maximum": 9007199254740991
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "habit_logs_since_boundary": {
                                    "anyOf": [
                                      {
                                        "type": "integer",
                                        "minimum": 0,
                                        "maximum": 9007199254740991
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "performance_share": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  }
                                },
                                "required": [
                                  "id",
                                  "objective_id",
                                  "title",
                                  "description",
                                  "metric_type",
                                  "start_value",
                                  "target_value",
                                  "unit",
                                  "cadence",
                                  "per",
                                  "since",
                                  "status",
                                  "created_at",
                                  "short_code",
                                  "url",
                                  "current_value",
                                  "boundary_value",
                                  "progress_pct",
                                  "boundary_progress_pct",
                                  "movement",
                                  "movement_pp",
                                  "evidence_count",
                                  "last_recorded_at",
                                  "habit_expected_since_boundary",
                                  "habit_logs_since_boundary",
                                  "performance_share"
                                ],
                                "additionalProperties": false
                              }
                            ]
                          }
                        },
                        "next_cursor": {
                          "anyOf": [
                            {
                              "type": "string",
                              "minLength": 1
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "continuation": {
                          "anyOf": [
                            {
                              "type": "object",
                              "properties": {
                                "tool": {
                                  "type": "string",
                                  "const": "result_read"
                                },
                                "arguments": {
                                  "type": "object",
                                  "properties": {
                                    "cursor": {
                                      "type": "string",
                                      "minLength": 1
                                    },
                                    "limit": {
                                      "type": "integer",
                                      "minimum": 1,
                                      "maximum": 100
                                    },
                                    "objective_id": {
                                      "type": "string",
                                      "format": "uuid",
                                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                                    },
                                    "cycle_id": {
                                      "description": "List results across one cycle instead of a single objective. Supply exactly one parent selector.",
                                      "type": "string",
                                      "format": "uuid",
                                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                                    },
                                    "attention": {
                                      "type": "string",
                                      "const": "never_updated"
                                    },
                                    "window": {
                                      "description": "Required for silent/unmarked attention. Use exact server-resolved briefing bounds; current result figures remain current.",
                                      "type": "object",
                                      "properties": {
                                        "since": {
                                          "type": "string",
                                          "format": "date-time",
                                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                        },
                                        "until": {
                                          "type": "string",
                                          "format": "date-time",
                                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                        }
                                      },
                                      "required": [
                                        "since",
                                        "until"
                                      ],
                                      "additionalProperties": false
                                    },
                                    "operation": {
                                      "type": "string",
                                      "const": "list"
                                    }
                                  },
                                  "required": [
                                    "cursor",
                                    "limit",
                                    "attention",
                                    "operation"
                                  ],
                                  "additionalProperties": false
                                }
                              },
                              "required": [
                                "tool",
                                "arguments"
                              ],
                              "additionalProperties": false
                            },
                            {
                              "type": "null"
                            }
                          ]
                        }
                      },
                      "required": [
                        "items",
                        "next_cursor",
                        "continuation"
                      ],
                      "additionalProperties": false
                    },
                    "silent_results": {
                      "type": "object",
                      "properties": {
                        "items": {
                          "maxItems": 50,
                          "type": "array",
                          "items": {
                            "oneOf": [
                              {
                                "type": "object",
                                "properties": {
                                  "id": {
                                    "type": "string",
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                                  },
                                  "objective_id": {
                                    "type": "string",
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                                  },
                                  "title": {
                                    "type": "string"
                                  },
                                  "description": {
                                    "anyOf": [
                                      {
                                        "type": "string"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "metric_type": {
                                    "type": "string",
                                    "const": "number"
                                  },
                                  "start_value": {
                                    "type": "number"
                                  },
                                  "target_value": {
                                    "type": "number"
                                  },
                                  "unit": {
                                    "anyOf": [
                                      {
                                        "type": "string"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ],
                                    "description": "UI label: Unit. Used by Number and Performance results."
                                  },
                                  "cadence": {
                                    "type": "null"
                                  },
                                  "per": {
                                    "type": "null"
                                  },
                                  "since": {
                                    "type": "null"
                                  },
                                  "status": {
                                    "type": "string",
                                    "enum": [
                                      "in_progress",
                                      "completed"
                                    ],
                                    "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                                  },
                                  "created_at": {
                                    "type": "string",
                                    "format": "date-time",
                                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                  },
                                  "short_code": {
                                    "type": "string",
                                    "minLength": 1
                                  },
                                  "url": {
                                    "type": "string",
                                    "format": "uri"
                                  },
                                  "current_value": {
                                    "type": "number",
                                    "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                                  },
                                  "boundary_value": {
                                    "type": "number"
                                  },
                                  "progress_pct": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "boundary_progress_pct": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "movement": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "movement_pp": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "evidence_count": {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  "last_recorded_at": {
                                    "anyOf": [
                                      {
                                        "type": "string",
                                        "format": "date-time",
                                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "habit_expected_since_boundary": {
                                    "anyOf": [
                                      {
                                        "type": "integer",
                                        "minimum": 0,
                                        "maximum": 9007199254740991
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "habit_logs_since_boundary": {
                                    "anyOf": [
                                      {
                                        "type": "integer",
                                        "minimum": 0,
                                        "maximum": 9007199254740991
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "performance_share": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  }
                                },
                                "required": [
                                  "id",
                                  "objective_id",
                                  "title",
                                  "description",
                                  "metric_type",
                                  "start_value",
                                  "target_value",
                                  "unit",
                                  "cadence",
                                  "per",
                                  "since",
                                  "status",
                                  "created_at",
                                  "short_code",
                                  "url",
                                  "current_value",
                                  "boundary_value",
                                  "progress_pct",
                                  "boundary_progress_pct",
                                  "movement",
                                  "movement_pp",
                                  "evidence_count",
                                  "last_recorded_at",
                                  "habit_expected_since_boundary",
                                  "habit_logs_since_boundary",
                                  "performance_share"
                                ],
                                "additionalProperties": false
                              },
                              {
                                "type": "object",
                                "properties": {
                                  "id": {
                                    "type": "string",
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                                  },
                                  "objective_id": {
                                    "type": "string",
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                                  },
                                  "title": {
                                    "type": "string"
                                  },
                                  "description": {
                                    "anyOf": [
                                      {
                                        "type": "string"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "metric_type": {
                                    "type": "string",
                                    "const": "percentage"
                                  },
                                  "start_value": {
                                    "type": "number",
                                    "minimum": 0,
                                    "maximum": 100
                                  },
                                  "target_value": {
                                    "type": "number",
                                    "minimum": 0,
                                    "maximum": 100
                                  },
                                  "unit": {
                                    "type": "null"
                                  },
                                  "cadence": {
                                    "type": "null"
                                  },
                                  "per": {
                                    "type": "null"
                                  },
                                  "since": {
                                    "type": "null"
                                  },
                                  "status": {
                                    "type": "string",
                                    "enum": [
                                      "in_progress",
                                      "completed"
                                    ],
                                    "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                                  },
                                  "created_at": {
                                    "type": "string",
                                    "format": "date-time",
                                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                  },
                                  "short_code": {
                                    "type": "string",
                                    "minLength": 1
                                  },
                                  "url": {
                                    "type": "string",
                                    "format": "uri"
                                  },
                                  "current_value": {
                                    "type": "number",
                                    "minimum": 0,
                                    "maximum": 100
                                  },
                                  "boundary_value": {
                                    "type": "number",
                                    "minimum": 0,
                                    "maximum": 100
                                  },
                                  "progress_pct": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "boundary_progress_pct": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "movement": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "movement_pp": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "evidence_count": {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  "last_recorded_at": {
                                    "anyOf": [
                                      {
                                        "type": "string",
                                        "format": "date-time",
                                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "habit_expected_since_boundary": {
                                    "anyOf": [
                                      {
                                        "type": "integer",
                                        "minimum": 0,
                                        "maximum": 9007199254740991
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "habit_logs_since_boundary": {
                                    "anyOf": [
                                      {
                                        "type": "integer",
                                        "minimum": 0,
                                        "maximum": 9007199254740991
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "performance_share": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  }
                                },
                                "required": [
                                  "id",
                                  "objective_id",
                                  "title",
                                  "description",
                                  "metric_type",
                                  "start_value",
                                  "target_value",
                                  "unit",
                                  "cadence",
                                  "per",
                                  "since",
                                  "status",
                                  "created_at",
                                  "short_code",
                                  "url",
                                  "current_value",
                                  "boundary_value",
                                  "progress_pct",
                                  "boundary_progress_pct",
                                  "movement",
                                  "movement_pp",
                                  "evidence_count",
                                  "last_recorded_at",
                                  "habit_expected_since_boundary",
                                  "habit_logs_since_boundary",
                                  "performance_share"
                                ],
                                "additionalProperties": false
                              },
                              {
                                "type": "object",
                                "properties": {
                                  "id": {
                                    "type": "string",
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                                  },
                                  "objective_id": {
                                    "type": "string",
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                                  },
                                  "title": {
                                    "type": "string"
                                  },
                                  "description": {
                                    "anyOf": [
                                      {
                                        "type": "string"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "metric_type": {
                                    "type": "string",
                                    "const": "milestone"
                                  },
                                  "start_value": {
                                    "type": "number",
                                    "const": 0
                                  },
                                  "target_value": {
                                    "type": "number",
                                    "const": 1
                                  },
                                  "unit": {
                                    "type": "null"
                                  },
                                  "cadence": {
                                    "type": "null"
                                  },
                                  "per": {
                                    "type": "null"
                                  },
                                  "since": {
                                    "type": "null"
                                  },
                                  "status": {
                                    "type": "string",
                                    "enum": [
                                      "in_progress",
                                      "completed"
                                    ],
                                    "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                                  },
                                  "created_at": {
                                    "type": "string",
                                    "format": "date-time",
                                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                  },
                                  "short_code": {
                                    "type": "string",
                                    "minLength": 1
                                  },
                                  "url": {
                                    "type": "string",
                                    "format": "uri"
                                  },
                                  "current_value": {
                                    "anyOf": [
                                      {
                                        "type": "number",
                                        "const": 0
                                      },
                                      {
                                        "type": "number",
                                        "const": 1
                                      }
                                    ]
                                  },
                                  "boundary_value": {
                                    "anyOf": [
                                      {
                                        "type": "number",
                                        "const": 0
                                      },
                                      {
                                        "type": "number",
                                        "const": 1
                                      }
                                    ]
                                  },
                                  "progress_pct": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "boundary_progress_pct": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "movement": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "movement_pp": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "evidence_count": {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  "last_recorded_at": {
                                    "anyOf": [
                                      {
                                        "type": "string",
                                        "format": "date-time",
                                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "habit_expected_since_boundary": {
                                    "anyOf": [
                                      {
                                        "type": "integer",
                                        "minimum": 0,
                                        "maximum": 9007199254740991
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "habit_logs_since_boundary": {
                                    "anyOf": [
                                      {
                                        "type": "integer",
                                        "minimum": 0,
                                        "maximum": 9007199254740991
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "performance_share": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  }
                                },
                                "required": [
                                  "id",
                                  "objective_id",
                                  "title",
                                  "description",
                                  "metric_type",
                                  "start_value",
                                  "target_value",
                                  "unit",
                                  "cadence",
                                  "per",
                                  "since",
                                  "status",
                                  "created_at",
                                  "short_code",
                                  "url",
                                  "current_value",
                                  "boundary_value",
                                  "progress_pct",
                                  "boundary_progress_pct",
                                  "movement",
                                  "movement_pp",
                                  "evidence_count",
                                  "last_recorded_at",
                                  "habit_expected_since_boundary",
                                  "habit_logs_since_boundary",
                                  "performance_share"
                                ],
                                "additionalProperties": false
                              },
                              {
                                "type": "object",
                                "properties": {
                                  "id": {
                                    "type": "string",
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                                  },
                                  "objective_id": {
                                    "type": "string",
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                                  },
                                  "title": {
                                    "type": "string"
                                  },
                                  "description": {
                                    "anyOf": [
                                      {
                                        "type": "string"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "metric_type": {
                                    "type": "string",
                                    "const": "habit"
                                  },
                                  "start_value": {
                                    "type": "number",
                                    "const": 0
                                  },
                                  "target_value": {
                                    "type": "number",
                                    "const": 100
                                  },
                                  "unit": {
                                    "type": "null"
                                  },
                                  "cadence": {
                                    "type": "string",
                                    "enum": [
                                      "weekly",
                                      "monthly"
                                    ],
                                    "description": "UI label: Cadence. Weekly or Monthly; per supplies the Times value."
                                  },
                                  "per": {
                                    "type": "integer",
                                    "exclusiveMinimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  "since": {
                                    "type": "string",
                                    "format": "date",
                                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                                    "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                                  },
                                  "status": {
                                    "type": "string",
                                    "enum": [
                                      "in_progress",
                                      "completed"
                                    ],
                                    "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                                  },
                                  "created_at": {
                                    "type": "string",
                                    "format": "date-time",
                                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                  },
                                  "short_code": {
                                    "type": "string",
                                    "minLength": 1
                                  },
                                  "url": {
                                    "type": "string",
                                    "format": "uri"
                                  },
                                  "current_value": {
                                    "type": "number",
                                    "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                                  },
                                  "boundary_value": {
                                    "type": "number"
                                  },
                                  "progress_pct": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "boundary_progress_pct": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "movement": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "movement_pp": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "evidence_count": {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  "last_recorded_at": {
                                    "anyOf": [
                                      {
                                        "type": "string",
                                        "format": "date-time",
                                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "habit_expected_since_boundary": {
                                    "anyOf": [
                                      {
                                        "type": "integer",
                                        "minimum": 0,
                                        "maximum": 9007199254740991
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "habit_logs_since_boundary": {
                                    "anyOf": [
                                      {
                                        "type": "integer",
                                        "minimum": 0,
                                        "maximum": 9007199254740991
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "performance_share": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  }
                                },
                                "required": [
                                  "id",
                                  "objective_id",
                                  "title",
                                  "description",
                                  "metric_type",
                                  "start_value",
                                  "target_value",
                                  "unit",
                                  "cadence",
                                  "per",
                                  "since",
                                  "status",
                                  "created_at",
                                  "short_code",
                                  "url",
                                  "current_value",
                                  "boundary_value",
                                  "progress_pct",
                                  "boundary_progress_pct",
                                  "movement",
                                  "movement_pp",
                                  "evidence_count",
                                  "last_recorded_at",
                                  "habit_expected_since_boundary",
                                  "habit_logs_since_boundary",
                                  "performance_share"
                                ],
                                "additionalProperties": false
                              },
                              {
                                "type": "object",
                                "properties": {
                                  "id": {
                                    "type": "string",
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                                  },
                                  "objective_id": {
                                    "type": "string",
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                                  },
                                  "title": {
                                    "type": "string"
                                  },
                                  "description": {
                                    "anyOf": [
                                      {
                                        "type": "string"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "metric_type": {
                                    "type": "string",
                                    "const": "performance"
                                  },
                                  "start_value": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ],
                                    "description": "UI label: Start. Metric baseline; habit baselines are derived rather than stored."
                                  },
                                  "target_value": {
                                    "type": "number"
                                  },
                                  "unit": {
                                    "anyOf": [
                                      {
                                        "type": "string"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ],
                                    "description": "UI label: Unit. Used by Number and Performance results."
                                  },
                                  "cadence": {
                                    "type": "null"
                                  },
                                  "per": {
                                    "type": "null"
                                  },
                                  "since": {
                                    "type": "string",
                                    "format": "date",
                                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                                    "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                                  },
                                  "status": {
                                    "type": "string",
                                    "enum": [
                                      "in_progress",
                                      "completed"
                                    ],
                                    "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                                  },
                                  "created_at": {
                                    "type": "string",
                                    "format": "date-time",
                                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                  },
                                  "short_code": {
                                    "type": "string",
                                    "minLength": 1
                                  },
                                  "url": {
                                    "type": "string",
                                    "format": "uri"
                                  },
                                  "current_value": {
                                    "type": "number",
                                    "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                                  },
                                  "boundary_value": {
                                    "type": "number"
                                  },
                                  "progress_pct": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "boundary_progress_pct": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "movement": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "movement_pp": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "evidence_count": {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  "last_recorded_at": {
                                    "anyOf": [
                                      {
                                        "type": "string",
                                        "format": "date-time",
                                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "habit_expected_since_boundary": {
                                    "anyOf": [
                                      {
                                        "type": "integer",
                                        "minimum": 0,
                                        "maximum": 9007199254740991
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "habit_logs_since_boundary": {
                                    "anyOf": [
                                      {
                                        "type": "integer",
                                        "minimum": 0,
                                        "maximum": 9007199254740991
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "performance_share": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  }
                                },
                                "required": [
                                  "id",
                                  "objective_id",
                                  "title",
                                  "description",
                                  "metric_type",
                                  "start_value",
                                  "target_value",
                                  "unit",
                                  "cadence",
                                  "per",
                                  "since",
                                  "status",
                                  "created_at",
                                  "short_code",
                                  "url",
                                  "current_value",
                                  "boundary_value",
                                  "progress_pct",
                                  "boundary_progress_pct",
                                  "movement",
                                  "movement_pp",
                                  "evidence_count",
                                  "last_recorded_at",
                                  "habit_expected_since_boundary",
                                  "habit_logs_since_boundary",
                                  "performance_share"
                                ],
                                "additionalProperties": false
                              }
                            ]
                          }
                        },
                        "next_cursor": {
                          "anyOf": [
                            {
                              "type": "string",
                              "minLength": 1
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "continuation": {
                          "anyOf": [
                            {
                              "type": "object",
                              "properties": {
                                "tool": {
                                  "type": "string",
                                  "const": "result_read"
                                },
                                "arguments": {
                                  "type": "object",
                                  "properties": {
                                    "cursor": {
                                      "type": "string",
                                      "minLength": 1
                                    },
                                    "limit": {
                                      "type": "integer",
                                      "minimum": 1,
                                      "maximum": 100
                                    },
                                    "objective_id": {
                                      "type": "string",
                                      "format": "uuid",
                                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                                    },
                                    "cycle_id": {
                                      "description": "List results across one cycle instead of a single objective. Supply exactly one parent selector.",
                                      "type": "string",
                                      "format": "uuid",
                                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                                    },
                                    "attention": {
                                      "type": "string",
                                      "const": "silent"
                                    },
                                    "window": {
                                      "type": "object",
                                      "properties": {
                                        "since": {
                                          "type": "string",
                                          "format": "date-time",
                                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                        },
                                        "until": {
                                          "type": "string",
                                          "format": "date-time",
                                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                        }
                                      },
                                      "required": [
                                        "since",
                                        "until"
                                      ],
                                      "additionalProperties": false
                                    },
                                    "operation": {
                                      "type": "string",
                                      "const": "list"
                                    }
                                  },
                                  "required": [
                                    "cursor",
                                    "limit",
                                    "attention",
                                    "window",
                                    "operation"
                                  ],
                                  "additionalProperties": false
                                }
                              },
                              "required": [
                                "tool",
                                "arguments"
                              ],
                              "additionalProperties": false
                            },
                            {
                              "type": "null"
                            }
                          ]
                        }
                      },
                      "required": [
                        "items",
                        "next_cursor",
                        "continuation"
                      ],
                      "additionalProperties": false
                    },
                    "unmarked_habits": {
                      "type": "object",
                      "properties": {
                        "items": {
                          "maxItems": 50,
                          "type": "array",
                          "items": {
                            "oneOf": [
                              {
                                "type": "object",
                                "properties": {
                                  "id": {
                                    "type": "string",
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                                  },
                                  "objective_id": {
                                    "type": "string",
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                                  },
                                  "title": {
                                    "type": "string"
                                  },
                                  "description": {
                                    "anyOf": [
                                      {
                                        "type": "string"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "metric_type": {
                                    "type": "string",
                                    "const": "number"
                                  },
                                  "start_value": {
                                    "type": "number"
                                  },
                                  "target_value": {
                                    "type": "number"
                                  },
                                  "unit": {
                                    "anyOf": [
                                      {
                                        "type": "string"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ],
                                    "description": "UI label: Unit. Used by Number and Performance results."
                                  },
                                  "cadence": {
                                    "type": "null"
                                  },
                                  "per": {
                                    "type": "null"
                                  },
                                  "since": {
                                    "type": "null"
                                  },
                                  "status": {
                                    "type": "string",
                                    "enum": [
                                      "in_progress",
                                      "completed"
                                    ],
                                    "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                                  },
                                  "created_at": {
                                    "type": "string",
                                    "format": "date-time",
                                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                  },
                                  "short_code": {
                                    "type": "string",
                                    "minLength": 1
                                  },
                                  "url": {
                                    "type": "string",
                                    "format": "uri"
                                  },
                                  "current_value": {
                                    "type": "number",
                                    "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                                  },
                                  "boundary_value": {
                                    "type": "number"
                                  },
                                  "progress_pct": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "boundary_progress_pct": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "movement": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "movement_pp": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "evidence_count": {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  "last_recorded_at": {
                                    "anyOf": [
                                      {
                                        "type": "string",
                                        "format": "date-time",
                                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "habit_expected_since_boundary": {
                                    "anyOf": [
                                      {
                                        "type": "integer",
                                        "minimum": 0,
                                        "maximum": 9007199254740991
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "habit_logs_since_boundary": {
                                    "anyOf": [
                                      {
                                        "type": "integer",
                                        "minimum": 0,
                                        "maximum": 9007199254740991
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "performance_share": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  }
                                },
                                "required": [
                                  "id",
                                  "objective_id",
                                  "title",
                                  "description",
                                  "metric_type",
                                  "start_value",
                                  "target_value",
                                  "unit",
                                  "cadence",
                                  "per",
                                  "since",
                                  "status",
                                  "created_at",
                                  "short_code",
                                  "url",
                                  "current_value",
                                  "boundary_value",
                                  "progress_pct",
                                  "boundary_progress_pct",
                                  "movement",
                                  "movement_pp",
                                  "evidence_count",
                                  "last_recorded_at",
                                  "habit_expected_since_boundary",
                                  "habit_logs_since_boundary",
                                  "performance_share"
                                ],
                                "additionalProperties": false
                              },
                              {
                                "type": "object",
                                "properties": {
                                  "id": {
                                    "type": "string",
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                                  },
                                  "objective_id": {
                                    "type": "string",
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                                  },
                                  "title": {
                                    "type": "string"
                                  },
                                  "description": {
                                    "anyOf": [
                                      {
                                        "type": "string"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "metric_type": {
                                    "type": "string",
                                    "const": "percentage"
                                  },
                                  "start_value": {
                                    "type": "number",
                                    "minimum": 0,
                                    "maximum": 100
                                  },
                                  "target_value": {
                                    "type": "number",
                                    "minimum": 0,
                                    "maximum": 100
                                  },
                                  "unit": {
                                    "type": "null"
                                  },
                                  "cadence": {
                                    "type": "null"
                                  },
                                  "per": {
                                    "type": "null"
                                  },
                                  "since": {
                                    "type": "null"
                                  },
                                  "status": {
                                    "type": "string",
                                    "enum": [
                                      "in_progress",
                                      "completed"
                                    ],
                                    "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                                  },
                                  "created_at": {
                                    "type": "string",
                                    "format": "date-time",
                                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                  },
                                  "short_code": {
                                    "type": "string",
                                    "minLength": 1
                                  },
                                  "url": {
                                    "type": "string",
                                    "format": "uri"
                                  },
                                  "current_value": {
                                    "type": "number",
                                    "minimum": 0,
                                    "maximum": 100
                                  },
                                  "boundary_value": {
                                    "type": "number",
                                    "minimum": 0,
                                    "maximum": 100
                                  },
                                  "progress_pct": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "boundary_progress_pct": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "movement": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "movement_pp": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "evidence_count": {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  "last_recorded_at": {
                                    "anyOf": [
                                      {
                                        "type": "string",
                                        "format": "date-time",
                                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "habit_expected_since_boundary": {
                                    "anyOf": [
                                      {
                                        "type": "integer",
                                        "minimum": 0,
                                        "maximum": 9007199254740991
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "habit_logs_since_boundary": {
                                    "anyOf": [
                                      {
                                        "type": "integer",
                                        "minimum": 0,
                                        "maximum": 9007199254740991
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "performance_share": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  }
                                },
                                "required": [
                                  "id",
                                  "objective_id",
                                  "title",
                                  "description",
                                  "metric_type",
                                  "start_value",
                                  "target_value",
                                  "unit",
                                  "cadence",
                                  "per",
                                  "since",
                                  "status",
                                  "created_at",
                                  "short_code",
                                  "url",
                                  "current_value",
                                  "boundary_value",
                                  "progress_pct",
                                  "boundary_progress_pct",
                                  "movement",
                                  "movement_pp",
                                  "evidence_count",
                                  "last_recorded_at",
                                  "habit_expected_since_boundary",
                                  "habit_logs_since_boundary",
                                  "performance_share"
                                ],
                                "additionalProperties": false
                              },
                              {
                                "type": "object",
                                "properties": {
                                  "id": {
                                    "type": "string",
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                                  },
                                  "objective_id": {
                                    "type": "string",
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                                  },
                                  "title": {
                                    "type": "string"
                                  },
                                  "description": {
                                    "anyOf": [
                                      {
                                        "type": "string"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "metric_type": {
                                    "type": "string",
                                    "const": "milestone"
                                  },
                                  "start_value": {
                                    "type": "number",
                                    "const": 0
                                  },
                                  "target_value": {
                                    "type": "number",
                                    "const": 1
                                  },
                                  "unit": {
                                    "type": "null"
                                  },
                                  "cadence": {
                                    "type": "null"
                                  },
                                  "per": {
                                    "type": "null"
                                  },
                                  "since": {
                                    "type": "null"
                                  },
                                  "status": {
                                    "type": "string",
                                    "enum": [
                                      "in_progress",
                                      "completed"
                                    ],
                                    "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                                  },
                                  "created_at": {
                                    "type": "string",
                                    "format": "date-time",
                                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                  },
                                  "short_code": {
                                    "type": "string",
                                    "minLength": 1
                                  },
                                  "url": {
                                    "type": "string",
                                    "format": "uri"
                                  },
                                  "current_value": {
                                    "anyOf": [
                                      {
                                        "type": "number",
                                        "const": 0
                                      },
                                      {
                                        "type": "number",
                                        "const": 1
                                      }
                                    ]
                                  },
                                  "boundary_value": {
                                    "anyOf": [
                                      {
                                        "type": "number",
                                        "const": 0
                                      },
                                      {
                                        "type": "number",
                                        "const": 1
                                      }
                                    ]
                                  },
                                  "progress_pct": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "boundary_progress_pct": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "movement": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "movement_pp": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "evidence_count": {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  "last_recorded_at": {
                                    "anyOf": [
                                      {
                                        "type": "string",
                                        "format": "date-time",
                                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "habit_expected_since_boundary": {
                                    "anyOf": [
                                      {
                                        "type": "integer",
                                        "minimum": 0,
                                        "maximum": 9007199254740991
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "habit_logs_since_boundary": {
                                    "anyOf": [
                                      {
                                        "type": "integer",
                                        "minimum": 0,
                                        "maximum": 9007199254740991
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "performance_share": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  }
                                },
                                "required": [
                                  "id",
                                  "objective_id",
                                  "title",
                                  "description",
                                  "metric_type",
                                  "start_value",
                                  "target_value",
                                  "unit",
                                  "cadence",
                                  "per",
                                  "since",
                                  "status",
                                  "created_at",
                                  "short_code",
                                  "url",
                                  "current_value",
                                  "boundary_value",
                                  "progress_pct",
                                  "boundary_progress_pct",
                                  "movement",
                                  "movement_pp",
                                  "evidence_count",
                                  "last_recorded_at",
                                  "habit_expected_since_boundary",
                                  "habit_logs_since_boundary",
                                  "performance_share"
                                ],
                                "additionalProperties": false
                              },
                              {
                                "type": "object",
                                "properties": {
                                  "id": {
                                    "type": "string",
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                                  },
                                  "objective_id": {
                                    "type": "string",
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                                  },
                                  "title": {
                                    "type": "string"
                                  },
                                  "description": {
                                    "anyOf": [
                                      {
                                        "type": "string"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "metric_type": {
                                    "type": "string",
                                    "const": "habit"
                                  },
                                  "start_value": {
                                    "type": "number",
                                    "const": 0
                                  },
                                  "target_value": {
                                    "type": "number",
                                    "const": 100
                                  },
                                  "unit": {
                                    "type": "null"
                                  },
                                  "cadence": {
                                    "type": "string",
                                    "enum": [
                                      "weekly",
                                      "monthly"
                                    ],
                                    "description": "UI label: Cadence. Weekly or Monthly; per supplies the Times value."
                                  },
                                  "per": {
                                    "type": "integer",
                                    "exclusiveMinimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  "since": {
                                    "type": "string",
                                    "format": "date",
                                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                                    "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                                  },
                                  "status": {
                                    "type": "string",
                                    "enum": [
                                      "in_progress",
                                      "completed"
                                    ],
                                    "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                                  },
                                  "created_at": {
                                    "type": "string",
                                    "format": "date-time",
                                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                  },
                                  "short_code": {
                                    "type": "string",
                                    "minLength": 1
                                  },
                                  "url": {
                                    "type": "string",
                                    "format": "uri"
                                  },
                                  "current_value": {
                                    "type": "number",
                                    "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                                  },
                                  "boundary_value": {
                                    "type": "number"
                                  },
                                  "progress_pct": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "boundary_progress_pct": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "movement": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "movement_pp": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "evidence_count": {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  "last_recorded_at": {
                                    "anyOf": [
                                      {
                                        "type": "string",
                                        "format": "date-time",
                                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "habit_expected_since_boundary": {
                                    "anyOf": [
                                      {
                                        "type": "integer",
                                        "minimum": 0,
                                        "maximum": 9007199254740991
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "habit_logs_since_boundary": {
                                    "anyOf": [
                                      {
                                        "type": "integer",
                                        "minimum": 0,
                                        "maximum": 9007199254740991
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "performance_share": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  }
                                },
                                "required": [
                                  "id",
                                  "objective_id",
                                  "title",
                                  "description",
                                  "metric_type",
                                  "start_value",
                                  "target_value",
                                  "unit",
                                  "cadence",
                                  "per",
                                  "since",
                                  "status",
                                  "created_at",
                                  "short_code",
                                  "url",
                                  "current_value",
                                  "boundary_value",
                                  "progress_pct",
                                  "boundary_progress_pct",
                                  "movement",
                                  "movement_pp",
                                  "evidence_count",
                                  "last_recorded_at",
                                  "habit_expected_since_boundary",
                                  "habit_logs_since_boundary",
                                  "performance_share"
                                ],
                                "additionalProperties": false
                              },
                              {
                                "type": "object",
                                "properties": {
                                  "id": {
                                    "type": "string",
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                                  },
                                  "objective_id": {
                                    "type": "string",
                                    "format": "uuid",
                                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                                  },
                                  "title": {
                                    "type": "string"
                                  },
                                  "description": {
                                    "anyOf": [
                                      {
                                        "type": "string"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "metric_type": {
                                    "type": "string",
                                    "const": "performance"
                                  },
                                  "start_value": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ],
                                    "description": "UI label: Start. Metric baseline; habit baselines are derived rather than stored."
                                  },
                                  "target_value": {
                                    "type": "number"
                                  },
                                  "unit": {
                                    "anyOf": [
                                      {
                                        "type": "string"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ],
                                    "description": "UI label: Unit. Used by Number and Performance results."
                                  },
                                  "cadence": {
                                    "type": "null"
                                  },
                                  "per": {
                                    "type": "null"
                                  },
                                  "since": {
                                    "type": "string",
                                    "format": "date",
                                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                                    "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                                  },
                                  "status": {
                                    "type": "string",
                                    "enum": [
                                      "in_progress",
                                      "completed"
                                    ],
                                    "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                                  },
                                  "created_at": {
                                    "type": "string",
                                    "format": "date-time",
                                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                  },
                                  "short_code": {
                                    "type": "string",
                                    "minLength": 1
                                  },
                                  "url": {
                                    "type": "string",
                                    "format": "uri"
                                  },
                                  "current_value": {
                                    "type": "number",
                                    "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                                  },
                                  "boundary_value": {
                                    "type": "number"
                                  },
                                  "progress_pct": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "boundary_progress_pct": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "movement": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "movement_pp": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "evidence_count": {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  "last_recorded_at": {
                                    "anyOf": [
                                      {
                                        "type": "string",
                                        "format": "date-time",
                                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "habit_expected_since_boundary": {
                                    "anyOf": [
                                      {
                                        "type": "integer",
                                        "minimum": 0,
                                        "maximum": 9007199254740991
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "habit_logs_since_boundary": {
                                    "anyOf": [
                                      {
                                        "type": "integer",
                                        "minimum": 0,
                                        "maximum": 9007199254740991
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  },
                                  "performance_share": {
                                    "anyOf": [
                                      {
                                        "type": "number"
                                      },
                                      {
                                        "type": "null"
                                      }
                                    ]
                                  }
                                },
                                "required": [
                                  "id",
                                  "objective_id",
                                  "title",
                                  "description",
                                  "metric_type",
                                  "start_value",
                                  "target_value",
                                  "unit",
                                  "cadence",
                                  "per",
                                  "since",
                                  "status",
                                  "created_at",
                                  "short_code",
                                  "url",
                                  "current_value",
                                  "boundary_value",
                                  "progress_pct",
                                  "boundary_progress_pct",
                                  "movement",
                                  "movement_pp",
                                  "evidence_count",
                                  "last_recorded_at",
                                  "habit_expected_since_boundary",
                                  "habit_logs_since_boundary",
                                  "performance_share"
                                ],
                                "additionalProperties": false
                              }
                            ]
                          }
                        },
                        "next_cursor": {
                          "anyOf": [
                            {
                              "type": "string",
                              "minLength": 1
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "continuation": {
                          "anyOf": [
                            {
                              "type": "object",
                              "properties": {
                                "tool": {
                                  "type": "string",
                                  "const": "result_read"
                                },
                                "arguments": {
                                  "type": "object",
                                  "properties": {
                                    "cursor": {
                                      "type": "string",
                                      "minLength": 1
                                    },
                                    "limit": {
                                      "type": "integer",
                                      "minimum": 1,
                                      "maximum": 100
                                    },
                                    "objective_id": {
                                      "type": "string",
                                      "format": "uuid",
                                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                                    },
                                    "cycle_id": {
                                      "description": "List results across one cycle instead of a single objective. Supply exactly one parent selector.",
                                      "type": "string",
                                      "format": "uuid",
                                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
                                    },
                                    "attention": {
                                      "type": "string",
                                      "const": "unmarked"
                                    },
                                    "window": {
                                      "type": "object",
                                      "properties": {
                                        "since": {
                                          "type": "string",
                                          "format": "date-time",
                                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                        },
                                        "until": {
                                          "type": "string",
                                          "format": "date-time",
                                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                                        }
                                      },
                                      "required": [
                                        "since",
                                        "until"
                                      ],
                                      "additionalProperties": false
                                    },
                                    "operation": {
                                      "type": "string",
                                      "const": "list"
                                    }
                                  },
                                  "required": [
                                    "cursor",
                                    "limit",
                                    "attention",
                                    "window",
                                    "operation"
                                  ],
                                  "additionalProperties": false
                                }
                              },
                              "required": [
                                "tool",
                                "arguments"
                              ],
                              "additionalProperties": false
                            },
                            {
                              "type": "null"
                            }
                          ]
                        }
                      },
                      "required": [
                        "items",
                        "next_cursor",
                        "continuation"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "required": [
                    "overdue_actions",
                    "never_updated_results",
                    "silent_results",
                    "unmarked_habits"
                  ],
                  "additionalProperties": false
                },
                "pace": {
                  "type": "string",
                  "enum": [
                    "ahead",
                    "behind",
                    "level",
                    "nothing_measurable"
                  ]
                },
                "next_due_action": {
                  "anyOf": [
                    {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                        },
                        "cycle_id": {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                        },
                        "objective_id": {
                          "anyOf": [
                            {
                              "type": "string",
                              "format": "uuid",
                              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "title": {
                          "type": "string"
                        },
                        "description": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "due_at": {
                          "anyOf": [
                            {
                              "type": "string",
                              "format": "date",
                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                              "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "UI label: Due. May be unset on a web draft; a set date cannot be cleared."
                        },
                        "status": {
                          "type": "string",
                          "enum": [
                            "open",
                            "in_progress",
                            "done"
                          ],
                          "description": "Action status: Open, In progress or Done. The To do UI group includes Open and In progress; Overdue is derived, not a status."
                        },
                        "sort_order": {
                          "anyOf": [
                            {
                              "type": "number"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Drag order within an action group; not a progress status."
                        },
                        "session_id": {
                          "anyOf": [
                            {
                              "type": "string",
                              "format": "uuid",
                              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "created_at": {
                          "type": "string",
                          "format": "date-time",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                        },
                        "url": {
                          "type": "string",
                          "format": "uri"
                        },
                        "overdue": {
                          "type": "boolean"
                        },
                        "done_since_boundary": {
                          "type": "boolean"
                        }
                      },
                      "required": [
                        "id",
                        "cycle_id",
                        "objective_id",
                        "title",
                        "description",
                        "due_at",
                        "status",
                        "sort_order",
                        "session_id",
                        "created_at",
                        "url",
                        "overdue",
                        "done_since_boundary"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "as_of",
                "current",
                "progress_by_type",
                "session_history",
                "attention",
                "pace",
                "next_due_action"
              ],
              "additionalProperties": false
            }
          },
          "required": [
            "access_state",
            "session",
            "briefing_notes",
            "briefing"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "access_state": {
              "type": "string",
              "const": "unpaid"
            },
            "enablement": {
              "type": "object",
              "properties": {
                "instruction": {
                  "type": "string"
                },
                "signup_url": {
                  "type": "string",
                  "format": "uri"
                }
              },
              "required": [
                "instruction",
                "signup_url"
              ],
              "additionalProperties": false
            }
          },
          "required": [
            "access_state",
            "enablement"
          ],
          "additionalProperties": false
        }
      ]
    }
  }
]
sessions.list · read · contract-only

Feature declaration: listSessions

Requirement: docs/feature-specs/F7-sessions.md · Access: retained-read

Tables: sessions (read)

Trusted context: authenticated actor

Retry: Safe to retry with the same resolved filters and cursor.

Expected errors: UNAUTHORIZED, BAD_REQUEST, FORBIDDEN, NOT_FOUND, CONFLICT, NOT_IMPLEMENTED, INTERNAL_SERVER_ERROR

API consumers

[
  {
    "operation": "sessions.list",
    "service": "sessions.list",
    "binding": "bound"
  }
]

MCP consumers

[
  {
    "tool": "session_read",
    "collection": "sessions",
    "specification": "docs/feature-specs/F7-sessions.md#mcp-source-mapping--selected-target",
    "operation": "list",
    "binding": "planned",
    "mode": "adapted",
    "readiness": "contract-only",
    "services": [
      "sessions.list"
    ],
    "gap": null,
    "projection": "List omits documents and preserves resolved window/boundary; stored get preserves nullable session; start explicitly constructs the compact MCP briefing and supported-reader continuations; close preserves saved outcome."
  }
]

Service input

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "cursor": {
      "type": "string",
      "minLength": 1
    },
    "limit": {
      "default": 20,
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "window": {
      "type": "object",
      "properties": {
        "since": {
          "description": "Inclusive lower bound. Default: last completed session, falling back to active-cycle start. Date-only values use the profile timezone.",
          "anyOf": [
            {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                  "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                },
                {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                }
              ]
            },
            {
              "type": "string",
              "enum": [
                "last_session",
                "cycle_start"
              ]
            }
          ]
        },
        "until": {
          "description": "Exclusive upper bound; default is the server time captured on the first page.",
          "anyOf": [
            {
              "type": "string",
              "format": "date",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
              "description": "Calendar date as YYYY-MM-DD in the profile timezone."
            },
            {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
            }
          ]
        }
      },
      "additionalProperties": false
    }
  },
  "additionalProperties": false
}

Service output

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "items": {
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
            "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
          },
          "vendor": {
            "type": "string",
            "enum": [
              "claude",
              "openai"
            ],
            "description": "Conversation host: claude is shown as Claude; openai is shown as ChatGPT."
          },
          "source_url": {
            "anyOf": [
              {
                "type": "string",
                "format": "uri"
              },
              {
                "type": "null"
              }
            ],
            "description": "External conversation link used by Open the conversation. Not the app detail URL."
          },
          "type": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "goal_setup",
                  "check_in",
                  "review",
                  "open_coaching"
                ],
                "description": "Coaching session type: Goal setup, Check-in, Review or Open coaching. Separate from whether the session is still open."
              },
              {
                "type": "null"
              }
            ]
          },
          "briefing_notes": {
            "type": "string",
            "description": "UI document: Briefing. Server-prepared coaching context."
          },
          "headline": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "One-line coaching-session summary used in session lists."
          },
          "summary_notes": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "UI document: Summary. Saved when the coaching session closes."
          },
          "started_at": {
            "type": "string",
            "format": "date-time",
            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
          },
          "ended_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
              },
              {
                "type": "null"
              }
            ],
            "description": "Closed when set; In progress when null. This is derived session state, not a stored status enum."
          },
          "url": {
            "type": "string",
            "format": "uri",
            "description": "Internal app link to coaching session details; distinct from source_url."
          },
          "duration_minutes": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              {
                "type": "null"
              }
            ]
          },
          "actions_created": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "actions_reviewed": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          }
        },
        "required": [
          "id",
          "vendor",
          "source_url",
          "type",
          "briefing_notes",
          "headline",
          "summary_notes",
          "started_at",
          "ended_at",
          "url",
          "duration_minutes",
          "actions_created",
          "actions_reviewed"
        ],
        "additionalProperties": false
      }
    },
    "next_cursor": {
      "anyOf": [
        {
          "type": "string",
          "minLength": 1
        },
        {
          "type": "null"
        }
      ]
    },
    "window": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "since": {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
            },
            "until": {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
            }
          },
          "required": [
            "since",
            "until"
          ],
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ]
    },
    "boundary": {
      "type": "object",
      "properties": {
        "at": {
          "anyOf": [
            {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
            },
            {
              "type": "null"
            }
          ]
        },
        "session_id": {
          "anyOf": [
            {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            {
              "type": "null"
            }
          ]
        },
        "source": {
          "type": "string",
          "enum": [
            "session",
            "cycle_start",
            "none"
          ]
        }
      },
      "required": [
        "at",
        "session_id",
        "source"
      ],
      "additionalProperties": false
    }
  },
  "required": [
    "items",
    "next_cursor",
    "window",
    "boundary"
  ],
  "additionalProperties": false
}
Public MCP input/output shapes for comparison
[
  {
    "tool": "session_read",
    "collection": "sessions",
    "specification": "docs/feature-specs/F7-sessions.md#mcp-source-mapping--selected-target",
    "operation": "list",
    "binding": "planned",
    "mode": "adapted",
    "readiness": "contract-only",
    "services": [
      "sessions.list"
    ],
    "gap": null,
    "projection": "List omits documents and preserves resolved window/boundary; stored get preserves nullable session; start explicitly constructs the compact MCP briefing and supported-reader continuations; close preserves saved outcome.",
    "input": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "oneOf": [
        {
          "type": "object",
          "properties": {
            "cursor": {
              "type": "string",
              "minLength": 1
            },
            "limit": {
              "default": 20,
              "type": "integer",
              "minimum": 1,
              "maximum": 100
            },
            "window": {
              "type": "object",
              "properties": {
                "since": {
                  "description": "Inclusive lower bound. Default: last completed session, falling back to active-cycle start. Date-only values use the profile timezone.",
                  "anyOf": [
                    {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "date",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                          "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                        },
                        {
                          "type": "string",
                          "format": "date-time",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                        }
                      ]
                    },
                    {
                      "type": "string",
                      "enum": [
                        "last_session",
                        "cycle_start"
                      ]
                    }
                  ]
                },
                "until": {
                  "description": "Exclusive upper bound; default is the server time captured on the first page.",
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                      "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                    },
                    {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    }
                  ]
                }
              },
              "additionalProperties": false
            },
            "operation": {
              "type": "string",
              "const": "list"
            }
          },
          "required": [
            "operation"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "operation": {
              "type": "string",
              "const": "get"
            },
            "id": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                {
                  "type": "string",
                  "const": "last_completed"
                }
              ],
              "description": "Exact session UUID, or last_completed for the most recently ended session; returns null when none exists."
            }
          },
          "required": [
            "operation",
            "id"
          ],
          "additionalProperties": false
        }
      ]
    },
    "output": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "items": {
              "maxItems": 100,
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "vendor": {
                    "type": "string",
                    "enum": [
                      "claude",
                      "openai"
                    ],
                    "description": "Conversation host: claude is shown as Claude; openai is shown as ChatGPT."
                  },
                  "source_url": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uri"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "External conversation link used by Open the conversation. Not the app detail URL."
                  },
                  "type": {
                    "anyOf": [
                      {
                        "type": "string",
                        "enum": [
                          "goal_setup",
                          "check_in",
                          "review",
                          "open_coaching"
                        ],
                        "description": "Coaching session type: Goal setup, Check-in, Review or Open coaching. Separate from whether the session is still open."
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "headline": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "One-line coaching-session summary used in session lists."
                  },
                  "started_at": {
                    "type": "string",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                  },
                  "ended_at": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "Closed when set; In progress when null. This is derived session state, not a stored status enum."
                  },
                  "url": {
                    "type": "string",
                    "format": "uri",
                    "description": "Internal app link to coaching session details; distinct from source_url."
                  },
                  "duration_minutes": {
                    "anyOf": [
                      {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "actions_created": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 9007199254740991
                  },
                  "actions_reviewed": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 9007199254740991
                  }
                },
                "required": [
                  "id",
                  "vendor",
                  "source_url",
                  "type",
                  "headline",
                  "started_at",
                  "ended_at",
                  "url",
                  "duration_minutes",
                  "actions_created",
                  "actions_reviewed"
                ],
                "additionalProperties": false
              }
            },
            "next_cursor": {
              "anyOf": [
                {
                  "type": "string",
                  "minLength": 1
                },
                {
                  "type": "null"
                }
              ]
            },
            "continuation": {
              "anyOf": [
                {
                  "type": "object",
                  "properties": {
                    "tool": {
                      "type": "string",
                      "const": "session_read"
                    },
                    "arguments": {
                      "type": "object",
                      "properties": {
                        "cursor": {
                          "type": "string",
                          "minLength": 1
                        },
                        "limit": {
                          "type": "integer",
                          "minimum": 1,
                          "maximum": 100
                        },
                        "window": {
                          "type": "object",
                          "properties": {
                            "since": {
                              "type": "string",
                              "format": "date-time",
                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                            },
                            "until": {
                              "type": "string",
                              "format": "date-time",
                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                            }
                          },
                          "required": [
                            "since",
                            "until"
                          ],
                          "additionalProperties": false
                        },
                        "operation": {
                          "type": "string",
                          "const": "list"
                        }
                      },
                      "required": [
                        "cursor",
                        "limit",
                        "operation"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "required": [
                    "tool",
                    "arguments"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "null"
                }
              ]
            },
            "operation": {
              "type": "string",
              "const": "list"
            },
            "window": {
              "anyOf": [
                {
                  "type": "object",
                  "properties": {
                    "since": {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    "until": {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    }
                  },
                  "required": [
                    "since",
                    "until"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "null"
                }
              ]
            },
            "boundary": {
              "type": "object",
              "properties": {
                "at": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "session_id": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "source": {
                  "type": "string",
                  "enum": [
                    "session",
                    "cycle_start",
                    "none"
                  ]
                }
              },
              "required": [
                "at",
                "session_id",
                "source"
              ],
              "additionalProperties": false
            }
          },
          "required": [
            "items",
            "next_cursor",
            "continuation",
            "operation",
            "window",
            "boundary"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "operation": {
              "type": "string",
              "const": "get"
            },
            "session": {
              "anyOf": [
                {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    "vendor": {
                      "type": "string",
                      "enum": [
                        "claude",
                        "openai"
                      ],
                      "description": "Conversation host: claude is shown as Claude; openai is shown as ChatGPT."
                    },
                    "source_url": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "uri"
                        },
                        {
                          "type": "null"
                        }
                      ],
                      "description": "External conversation link used by Open the conversation. Not the app detail URL."
                    },
                    "type": {
                      "anyOf": [
                        {
                          "type": "string",
                          "enum": [
                            "goal_setup",
                            "check_in",
                            "review",
                            "open_coaching"
                          ],
                          "description": "Coaching session type: Goal setup, Check-in, Review or Open coaching. Separate from whether the session is still open."
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "briefing_notes": {
                      "type": "string",
                      "description": "UI document: Briefing. Server-prepared coaching context."
                    },
                    "headline": {
                      "anyOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "null"
                        }
                      ],
                      "description": "One-line coaching-session summary used in session lists."
                    },
                    "summary_notes": {
                      "anyOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "null"
                        }
                      ],
                      "description": "UI document: Summary. Saved when the coaching session closes."
                    },
                    "started_at": {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    "ended_at": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "date-time",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                        },
                        {
                          "type": "null"
                        }
                      ],
                      "description": "Closed when set; In progress when null. This is derived session state, not a stored status enum."
                    },
                    "url": {
                      "type": "string",
                      "format": "uri",
                      "description": "Internal app link to coaching session details; distinct from source_url."
                    },
                    "duration_minutes": {
                      "anyOf": [
                        {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "actions_created": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    "actions_reviewed": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    }
                  },
                  "required": [
                    "id",
                    "vendor",
                    "source_url",
                    "type",
                    "briefing_notes",
                    "headline",
                    "summary_notes",
                    "started_at",
                    "ended_at",
                    "url",
                    "duration_minutes",
                    "actions_created",
                    "actions_reviewed"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "null"
                }
              ]
            },
            "boundary": {
              "type": "object",
              "properties": {
                "at": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "session_id": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "source": {
                  "type": "string",
                  "enum": [
                    "session",
                    "cycle_start",
                    "none"
                  ]
                }
              },
              "required": [
                "at",
                "session_id",
                "source"
              ],
              "additionalProperties": false
            }
          },
          "required": [
            "operation",
            "session",
            "boundary"
          ],
          "additionalProperties": false
        }
      ]
    }
  }
]
sessions.get · read · contract-only

Feature declaration: getSession

Requirement: docs/feature-specs/F7-sessions.md · Access: retained-read

Tables: sessions (read), actions (read)

Trusted context: authenticated actor

Retry: Safe to retry with the same resolved filters and cursor.

Expected errors: UNAUTHORIZED, BAD_REQUEST, FORBIDDEN, NOT_FOUND, CONFLICT, NOT_IMPLEMENTED, INTERNAL_SERVER_ERROR

API consumers

[
  {
    "operation": "sessions.get",
    "service": "sessions.get",
    "binding": "bound"
  }
]

MCP consumers

[]

Service input

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}

Service output

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "session": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
        },
        "vendor": {
          "type": "string",
          "enum": [
            "claude",
            "openai"
          ],
          "description": "Conversation host: claude is shown as Claude; openai is shown as ChatGPT."
        },
        "source_url": {
          "anyOf": [
            {
              "type": "string",
              "format": "uri"
            },
            {
              "type": "null"
            }
          ],
          "description": "External conversation link used by Open the conversation. Not the app detail URL."
        },
        "type": {
          "anyOf": [
            {
              "type": "string",
              "enum": [
                "goal_setup",
                "check_in",
                "review",
                "open_coaching"
              ],
              "description": "Coaching session type: Goal setup, Check-in, Review or Open coaching. Separate from whether the session is still open."
            },
            {
              "type": "null"
            }
          ]
        },
        "briefing_notes": {
          "type": "string",
          "description": "UI document: Briefing. Server-prepared coaching context."
        },
        "headline": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "description": "One-line coaching-session summary used in session lists."
        },
        "summary_notes": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "description": "UI document: Summary. Saved when the coaching session closes."
        },
        "started_at": {
          "type": "string",
          "format": "date-time",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
        },
        "ended_at": {
          "anyOf": [
            {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
            },
            {
              "type": "null"
            }
          ],
          "description": "Closed when set; In progress when null. This is derived session state, not a stored status enum."
        },
        "url": {
          "type": "string",
          "format": "uri",
          "description": "Internal app link to coaching session details; distinct from source_url."
        },
        "duration_minutes": {
          "anyOf": [
            {
              "type": "integer",
              "minimum": 0,
              "maximum": 9007199254740991
            },
            {
              "type": "null"
            }
          ]
        },
        "actions_created": {
          "type": "integer",
          "minimum": 0,
          "maximum": 9007199254740991
        },
        "actions_reviewed": {
          "type": "integer",
          "minimum": 0,
          "maximum": 9007199254740991
        }
      },
      "required": [
        "id",
        "vendor",
        "source_url",
        "type",
        "briefing_notes",
        "headline",
        "summary_notes",
        "started_at",
        "ended_at",
        "url",
        "duration_minutes",
        "actions_created",
        "actions_reviewed"
      ],
      "additionalProperties": false
    },
    "actions": {
      "type": "object",
      "properties": {
        "items": {
          "maxItems": 100,
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
              },
              "cycle_id": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
              },
              "objective_id": {
                "anyOf": [
                  {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "title": {
                "type": "string"
              },
              "description": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "due_at": {
                "anyOf": [
                  {
                    "type": "string",
                    "format": "date",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                    "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "UI label: Due. May be unset on a web draft; a set date cannot be cleared."
              },
              "status": {
                "type": "string",
                "enum": [
                  "open",
                  "in_progress",
                  "done"
                ],
                "description": "Action status: Open, In progress or Done. The To do UI group includes Open and In progress; Overdue is derived, not a status."
              },
              "sort_order": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Drag order within an action group; not a progress status."
              },
              "session_id": {
                "anyOf": [
                  {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "created_at": {
                "type": "string",
                "format": "date-time",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
              },
              "url": {
                "type": "string",
                "format": "uri"
              },
              "overdue": {
                "type": "boolean"
              },
              "done_since_boundary": {
                "type": "boolean"
              }
            },
            "required": [
              "id",
              "cycle_id",
              "objective_id",
              "title",
              "description",
              "due_at",
              "status",
              "sort_order",
              "session_id",
              "created_at",
              "url",
              "overdue",
              "done_since_boundary"
            ],
            "additionalProperties": false
          }
        },
        "next_cursor": {
          "anyOf": [
            {
              "type": "string",
              "minLength": 1
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "required": [
        "items",
        "next_cursor"
      ],
      "additionalProperties": false
    },
    "continuations": {
      "type": "object",
      "propertyNames": {
        "type": "string",
        "enum": [
          "cycles",
          "objectives",
          "results",
          "actions",
          "notes",
          "sessions",
          "result_logs",
          "habit_logs",
          "action_logs",
          "trend"
        ]
      },
      "additionalProperties": {
        "type": "string",
        "minLength": 1
      }
    }
  },
  "required": [
    "session",
    "actions",
    "continuations"
  ],
  "additionalProperties": false
}
Public MCP input/output shapes for comparison
[]
sessions.close · write · contract-only

Feature declaration: closeSession

Requirement: docs/feature-specs/F7-sessions.md · Access: entitled-write

Tables: sessions (write)

Trusted context: authenticated actor

Retry: Return the originally saved closure on retry; never overwrite its summary.

Expected errors: UNAUTHORIZED, BAD_REQUEST, FORBIDDEN, NOT_FOUND, CONFLICT, NOT_IMPLEMENTED, INTERNAL_SERVER_ERROR

API consumers

[
  {
    "operation": "sessions.close",
    "service": "sessions.close",
    "binding": "bound"
  }
]

MCP consumers

[
  {
    "tool": "session_close",
    "collection": "sessions",
    "specification": "docs/feature-specs/F7-sessions.md#mcp-source-mapping--selected-target",
    "operation": "call",
    "binding": "planned",
    "mode": "direct",
    "readiness": "contract-only",
    "services": [
      "sessions.close"
    ],
    "gap": null,
    "projection": "List omits documents and preserves resolved window/boundary; stored get preserves nullable session; start explicitly constructs the compact MCP briefing and supported-reader continuations; close preserves saved outcome."
  }
]

Service input

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "session_id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
    },
    "type": {
      "type": "string",
      "enum": [
        "goal_setup",
        "check_in",
        "review",
        "open_coaching"
      ],
      "description": "Coaching session type: Goal setup, Check-in, Review or Open coaching. Separate from whether the session is still open."
    },
    "headline": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "summary_notes": {
      "type": "string",
      "minLength": 1,
      "description": "UI document: Summary. Saved when closing the coaching session."
    }
  },
  "required": [
    "session_id",
    "type",
    "headline",
    "summary_notes"
  ],
  "additionalProperties": false
}

Service output

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "session": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
        },
        "vendor": {
          "type": "string",
          "enum": [
            "claude",
            "openai"
          ],
          "description": "Conversation host: claude is shown as Claude; openai is shown as ChatGPT."
        },
        "source_url": {
          "anyOf": [
            {
              "type": "string",
              "format": "uri"
            },
            {
              "type": "null"
            }
          ],
          "description": "External conversation link used by Open the conversation. Not the app detail URL."
        },
        "type": {
          "anyOf": [
            {
              "type": "string",
              "enum": [
                "goal_setup",
                "check_in",
                "review",
                "open_coaching"
              ],
              "description": "Coaching session type: Goal setup, Check-in, Review or Open coaching. Separate from whether the session is still open."
            },
            {
              "type": "null"
            }
          ]
        },
        "briefing_notes": {
          "type": "string",
          "description": "UI document: Briefing. Server-prepared coaching context."
        },
        "headline": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "description": "One-line coaching-session summary used in session lists."
        },
        "summary_notes": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "description": "UI document: Summary. Saved when the coaching session closes."
        },
        "started_at": {
          "type": "string",
          "format": "date-time",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
        },
        "ended_at": {
          "anyOf": [
            {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
            },
            {
              "type": "null"
            }
          ],
          "description": "Closed when set; In progress when null. This is derived session state, not a stored status enum."
        },
        "url": {
          "type": "string",
          "format": "uri",
          "description": "Internal app link to coaching session details; distinct from source_url."
        },
        "duration_minutes": {
          "anyOf": [
            {
              "type": "integer",
              "minimum": 0,
              "maximum": 9007199254740991
            },
            {
              "type": "null"
            }
          ]
        },
        "actions_created": {
          "type": "integer",
          "minimum": 0,
          "maximum": 9007199254740991
        },
        "actions_reviewed": {
          "type": "integer",
          "minimum": 0,
          "maximum": 9007199254740991
        }
      },
      "required": [
        "id",
        "vendor",
        "source_url",
        "type",
        "briefing_notes",
        "headline",
        "summary_notes",
        "started_at",
        "ended_at",
        "url",
        "duration_minutes",
        "actions_created",
        "actions_reviewed"
      ],
      "additionalProperties": false
    },
    "boundary_moved_to": {
      "type": "string",
      "format": "date-time",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
    }
  },
  "required": [
    "session",
    "boundary_moved_to"
  ],
  "additionalProperties": false
}
Public MCP input/output shapes for comparison
[
  {
    "tool": "session_close",
    "collection": "sessions",
    "specification": "docs/feature-specs/F7-sessions.md#mcp-source-mapping--selected-target",
    "operation": "call",
    "binding": "planned",
    "mode": "direct",
    "readiness": "contract-only",
    "services": [
      "sessions.close"
    ],
    "gap": null,
    "projection": "List omits documents and preserves resolved window/boundary; stored get preserves nullable session; start explicitly constructs the compact MCP briefing and supported-reader continuations; close preserves saved outcome.",
    "input": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "session_id": {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
        },
        "type": {
          "type": "string",
          "enum": [
            "goal_setup",
            "check_in",
            "review",
            "open_coaching"
          ],
          "description": "Coaching session type: Goal setup, Check-in, Review or Open coaching. Separate from whether the session is still open."
        },
        "headline": {
          "type": "string",
          "minLength": 1,
          "maxLength": 200
        },
        "summary_notes": {
          "type": "string",
          "minLength": 1,
          "description": "UI document: Summary. Saved when closing the coaching session."
        }
      },
      "required": [
        "session_id",
        "type",
        "headline",
        "summary_notes"
      ],
      "additionalProperties": false
    },
    "output": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "session": {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "vendor": {
              "type": "string",
              "enum": [
                "claude",
                "openai"
              ],
              "description": "Conversation host: claude is shown as Claude; openai is shown as ChatGPT."
            },
            "source_url": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "uri"
                },
                {
                  "type": "null"
                }
              ],
              "description": "External conversation link used by Open the conversation. Not the app detail URL."
            },
            "type": {
              "anyOf": [
                {
                  "type": "string",
                  "enum": [
                    "goal_setup",
                    "check_in",
                    "review",
                    "open_coaching"
                  ],
                  "description": "Coaching session type: Goal setup, Check-in, Review or Open coaching. Separate from whether the session is still open."
                },
                {
                  "type": "null"
                }
              ]
            },
            "briefing_notes": {
              "type": "string",
              "description": "UI document: Briefing. Server-prepared coaching context."
            },
            "headline": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "One-line coaching-session summary used in session lists."
            },
            "summary_notes": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "UI document: Summary. Saved when the coaching session closes."
            },
            "started_at": {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
            },
            "ended_at": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Closed when set; In progress when null. This is derived session state, not a stored status enum."
            },
            "url": {
              "type": "string",
              "format": "uri",
              "description": "Internal app link to coaching session details; distinct from source_url."
            },
            "duration_minutes": {
              "anyOf": [
                {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                {
                  "type": "null"
                }
              ]
            },
            "actions_created": {
              "type": "integer",
              "minimum": 0,
              "maximum": 9007199254740991
            },
            "actions_reviewed": {
              "type": "integer",
              "minimum": 0,
              "maximum": 9007199254740991
            }
          },
          "required": [
            "id",
            "vendor",
            "source_url",
            "type",
            "briefing_notes",
            "headline",
            "summary_notes",
            "started_at",
            "ended_at",
            "url",
            "duration_minutes",
            "actions_created",
            "actions_reviewed"
          ],
          "additionalProperties": false
        },
        "boundary_moved_to": {
          "type": "string",
          "format": "date-time",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
        }
      },
      "required": [
        "session",
        "boundary_moved_to"
      ],
      "additionalProperties": false
    }
  }
]
record.query · read · contract-only

Feature declaration: queryRecord

Requirement: docs/feature-specs/F7-sessions.md · Access: retained-read

Tables: cycles (read), objectives (read), results (read), result_logs (read), habit_logs (read), actions (read), action_logs (read), notes (read), sessions (read), user (read)

Trusted context: authenticated actor

Retry: Safe to retry with the same resolved filters and cursor.

Expected errors: UNAUTHORIZED, BAD_REQUEST, FORBIDDEN, NOT_FOUND, CONFLICT, NOT_IMPLEMENTED, INTERNAL_SERVER_ERROR

API consumers

[
  {
    "operation": "record.query",
    "service": "record.query",
    "binding": "bound"
  }
]

MCP consumers

[]

Service input

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "filters": {
      "type": "object",
      "properties": {
        "cycle_id": {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
        },
        "objective_id": {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
        },
        "result_id": {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
        },
        "action_id": {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
        },
        "note_id": {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
        },
        "session_id": {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
        },
        "kinds": {
          "minItems": 1,
          "type": "array",
          "items": {
            "type": "string",
            "enum": [
              "result_logs",
              "habit_logs",
              "action_logs",
              "notes",
              "sessions"
            ]
          }
        }
      },
      "additionalProperties": false
    },
    "window": {
      "type": "object",
      "properties": {
        "since": {
          "anyOf": [
            {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                  "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                },
                {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                }
              ]
            },
            {
              "type": "string",
              "enum": [
                "last_session",
                "cycle_start"
              ]
            }
          ]
        },
        "until": {
          "anyOf": [
            {
              "type": "string",
              "format": "date",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
              "description": "Calendar date as YYYY-MM-DD in the profile timezone."
            },
            {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
            }
          ]
        }
      },
      "additionalProperties": false
    },
    "continuations": {
      "type": "object",
      "properties": {
        "cycles": {
          "type": "string",
          "minLength": 1
        },
        "objectives": {
          "type": "string",
          "minLength": 1
        },
        "results": {
          "type": "string",
          "minLength": 1
        },
        "actions": {
          "type": "string",
          "minLength": 1
        },
        "notes": {
          "type": "string",
          "minLength": 1
        },
        "sessions": {
          "type": "string",
          "minLength": 1
        },
        "result_logs": {
          "type": "string",
          "minLength": 1
        },
        "habit_logs": {
          "type": "string",
          "minLength": 1
        },
        "action_logs": {
          "type": "string",
          "minLength": 1
        }
      },
      "additionalProperties": false
    }
  },
  "additionalProperties": false
}

Service output

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "as_of": {
      "type": "string",
      "format": "date-time",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
    },
    "current": {
      "type": "object",
      "properties": {
        "profile": {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "name": {
              "type": "string",
              "description": "Chosen coaching/display name, used verbatim. Target UI prompt: What should we call you? Empty means unknown; no separate surname."
            },
            "about_me": {
              "type": "string",
              "description": "UI label: About me."
            },
            "timezone": {
              "type": "string",
              "minLength": 1,
              "description": "UI label: Time zone. IANA zone used for calendar dates and boundaries."
            }
          },
          "required": [
            "id",
            "name",
            "about_me",
            "timezone"
          ],
          "additionalProperties": false
        },
        "boundary": {
          "type": "object",
          "properties": {
            "at": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                {
                  "type": "null"
                }
              ]
            },
            "session_id": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                {
                  "type": "null"
                }
              ]
            },
            "source": {
              "type": "string",
              "enum": [
                "session",
                "cycle_start",
                "none"
              ]
            }
          },
          "required": [
            "at",
            "session_id",
            "source"
          ],
          "additionalProperties": false
        },
        "cycle_line": {
          "anyOf": [
            {
              "type": "object",
              "properties": {
                "range": {
                  "type": "string"
                },
                "time_gone_pct": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 100
                }
              },
              "required": [
                "range",
                "time_gone_pct"
              ],
              "additionalProperties": false
            },
            {
              "type": "null"
            }
          ]
        },
        "cycles": {
          "type": "object",
          "properties": {
            "items": {
              "maxItems": 50,
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "intention": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "UI label: Intention. Optional guiding focus; the cycle is identified by its date range, not a name."
                  },
                  "start_at": {
                    "type": "string",
                    "format": "date",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                    "description": "UI label: Starts."
                  },
                  "end_at": {
                    "type": "string",
                    "format": "date",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                    "description": "UI label: Ends."
                  },
                  "status": {
                    "type": "string",
                    "enum": [
                      "active",
                      "archived"
                    ]
                  },
                  "created_at": {
                    "type": "string",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                  },
                  "url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "achievement_pct": {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "UI label: Achievement. Derived from objective progress; unavailable when nothing is measurable."
                  },
                  "time_gone_pct": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 100,
                    "description": "UI label: Time gone. Derived percentage of the cycle elapsed."
                  },
                  "length_weeks": {
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991,
                    "description": "UI label: Length, in weeks; derived from Starts and Ends."
                  }
                },
                "required": [
                  "id",
                  "intention",
                  "start_at",
                  "end_at",
                  "status",
                  "created_at",
                  "url",
                  "achievement_pct",
                  "time_gone_pct",
                  "length_weeks"
                ],
                "additionalProperties": false
              }
            },
            "next_cursor": {
              "anyOf": [
                {
                  "type": "string",
                  "minLength": 1
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "items",
            "next_cursor"
          ],
          "additionalProperties": false
        },
        "cycle": {
          "anyOf": [
            {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "intention": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "UI label: Intention. Optional guiding focus; the cycle is identified by its date range, not a name."
                },
                "start_at": {
                  "type": "string",
                  "format": "date",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                  "description": "UI label: Starts."
                },
                "end_at": {
                  "type": "string",
                  "format": "date",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                  "description": "UI label: Ends."
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "active",
                    "archived"
                  ]
                },
                "created_at": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                },
                "achievement_pct": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "UI label: Achievement. Derived from objective progress; unavailable when nothing is measurable."
                },
                "time_gone_pct": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 100,
                  "description": "UI label: Time gone. Derived percentage of the cycle elapsed."
                },
                "length_weeks": {
                  "type": "integer",
                  "minimum": -9007199254740991,
                  "maximum": 9007199254740991,
                  "description": "UI label: Length, in weeks; derived from Starts and Ends."
                }
              },
              "required": [
                "id",
                "intention",
                "start_at",
                "end_at",
                "status",
                "created_at",
                "url",
                "achievement_pct",
                "time_gone_pct",
                "length_weeks"
              ],
              "additionalProperties": false
            },
            {
              "type": "null"
            }
          ]
        },
        "objectives": {
          "type": "object",
          "properties": {
            "items": {
              "maxItems": 50,
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "cycle_id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "title": {
                    "type": "string"
                  },
                  "description": {
                    "type": "string"
                  },
                  "deadline_at": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                        "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "UI label: Deadline; null when no deadline has been set."
                  },
                  "status": {
                    "type": "string",
                    "enum": [
                      "on_track",
                      "off_track",
                      "completed"
                    ],
                    "description": "Objective status: On track, Off track or Completed. Coaching judgment, independent of the derived Progress percentage."
                  },
                  "created_at": {
                    "type": "string",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                  },
                  "short_code": {
                    "type": "string",
                    "minLength": 1
                  },
                  "url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "progress_pct": {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "UI label: Progress. Derived from measurable results, independently of Status."
                  },
                  "boundary_progress_pct": {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "Historical progress at the resolved last-session boundary; not current Progress."
                  },
                  "movement_pp": {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                },
                "required": [
                  "id",
                  "cycle_id",
                  "title",
                  "description",
                  "deadline_at",
                  "status",
                  "created_at",
                  "short_code",
                  "url",
                  "progress_pct",
                  "boundary_progress_pct",
                  "movement_pp"
                ],
                "additionalProperties": false
              }
            },
            "next_cursor": {
              "anyOf": [
                {
                  "type": "string",
                  "minLength": 1
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "items",
            "next_cursor"
          ],
          "additionalProperties": false
        },
        "results": {
          "type": "object",
          "properties": {
            "items": {
              "maxItems": 50,
              "type": "array",
              "items": {
                "oneOf": [
                  {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      "objective_id": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      "title": {
                        "type": "string"
                      },
                      "description": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "metric_type": {
                        "type": "string",
                        "const": "number"
                      },
                      "start_value": {
                        "type": "number"
                      },
                      "target_value": {
                        "type": "number"
                      },
                      "unit": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "UI label: Unit. Used by Number and Performance results."
                      },
                      "cadence": {
                        "type": "null"
                      },
                      "per": {
                        "type": "null"
                      },
                      "since": {
                        "type": "null"
                      },
                      "status": {
                        "type": "string",
                        "enum": [
                          "in_progress",
                          "completed"
                        ],
                        "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                      },
                      "created_at": {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      "short_code": {
                        "type": "string",
                        "minLength": 1
                      },
                      "url": {
                        "type": "string",
                        "format": "uri"
                      },
                      "current_value": {
                        "type": "number",
                        "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                      },
                      "boundary_value": {
                        "type": "number"
                      },
                      "progress_pct": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "boundary_progress_pct": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "movement": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "movement_pp": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "evidence_count": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      },
                      "last_recorded_at": {
                        "anyOf": [
                          {
                            "type": "string",
                            "format": "date-time",
                            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "habit_expected_since_boundary": {
                        "anyOf": [
                          {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "habit_logs_since_boundary": {
                        "anyOf": [
                          {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "performance_share": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "required": [
                      "id",
                      "objective_id",
                      "title",
                      "description",
                      "metric_type",
                      "start_value",
                      "target_value",
                      "unit",
                      "cadence",
                      "per",
                      "since",
                      "status",
                      "created_at",
                      "short_code",
                      "url",
                      "current_value",
                      "boundary_value",
                      "progress_pct",
                      "boundary_progress_pct",
                      "movement",
                      "movement_pp",
                      "evidence_count",
                      "last_recorded_at",
                      "habit_expected_since_boundary",
                      "habit_logs_since_boundary",
                      "performance_share"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      "objective_id": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      "title": {
                        "type": "string"
                      },
                      "description": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "metric_type": {
                        "type": "string",
                        "const": "percentage"
                      },
                      "start_value": {
                        "type": "number",
                        "minimum": 0,
                        "maximum": 100
                      },
                      "target_value": {
                        "type": "number",
                        "minimum": 0,
                        "maximum": 100
                      },
                      "unit": {
                        "type": "null"
                      },
                      "cadence": {
                        "type": "null"
                      },
                      "per": {
                        "type": "null"
                      },
                      "since": {
                        "type": "null"
                      },
                      "status": {
                        "type": "string",
                        "enum": [
                          "in_progress",
                          "completed"
                        ],
                        "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                      },
                      "created_at": {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      "short_code": {
                        "type": "string",
                        "minLength": 1
                      },
                      "url": {
                        "type": "string",
                        "format": "uri"
                      },
                      "current_value": {
                        "type": "number",
                        "minimum": 0,
                        "maximum": 100
                      },
                      "boundary_value": {
                        "type": "number",
                        "minimum": 0,
                        "maximum": 100
                      },
                      "progress_pct": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "boundary_progress_pct": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "movement": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "movement_pp": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "evidence_count": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      },
                      "last_recorded_at": {
                        "anyOf": [
                          {
                            "type": "string",
                            "format": "date-time",
                            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "habit_expected_since_boundary": {
                        "anyOf": [
                          {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "habit_logs_since_boundary": {
                        "anyOf": [
                          {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "performance_share": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "required": [
                      "id",
                      "objective_id",
                      "title",
                      "description",
                      "metric_type",
                      "start_value",
                      "target_value",
                      "unit",
                      "cadence",
                      "per",
                      "since",
                      "status",
                      "created_at",
                      "short_code",
                      "url",
                      "current_value",
                      "boundary_value",
                      "progress_pct",
                      "boundary_progress_pct",
                      "movement",
                      "movement_pp",
                      "evidence_count",
                      "last_recorded_at",
                      "habit_expected_since_boundary",
                      "habit_logs_since_boundary",
                      "performance_share"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      "objective_id": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      "title": {
                        "type": "string"
                      },
                      "description": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "metric_type": {
                        "type": "string",
                        "const": "milestone"
                      },
                      "start_value": {
                        "type": "number",
                        "const": 0
                      },
                      "target_value": {
                        "type": "number",
                        "const": 1
                      },
                      "unit": {
                        "type": "null"
                      },
                      "cadence": {
                        "type": "null"
                      },
                      "per": {
                        "type": "null"
                      },
                      "since": {
                        "type": "null"
                      },
                      "status": {
                        "type": "string",
                        "enum": [
                          "in_progress",
                          "completed"
                        ],
                        "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                      },
                      "created_at": {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      "short_code": {
                        "type": "string",
                        "minLength": 1
                      },
                      "url": {
                        "type": "string",
                        "format": "uri"
                      },
                      "current_value": {
                        "anyOf": [
                          {
                            "type": "number",
                            "const": 0
                          },
                          {
                            "type": "number",
                            "const": 1
                          }
                        ]
                      },
                      "boundary_value": {
                        "anyOf": [
                          {
                            "type": "number",
                            "const": 0
                          },
                          {
                            "type": "number",
                            "const": 1
                          }
                        ]
                      },
                      "progress_pct": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "boundary_progress_pct": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "movement": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "movement_pp": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "evidence_count": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      },
                      "last_recorded_at": {
                        "anyOf": [
                          {
                            "type": "string",
                            "format": "date-time",
                            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "habit_expected_since_boundary": {
                        "anyOf": [
                          {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "habit_logs_since_boundary": {
                        "anyOf": [
                          {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "performance_share": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "required": [
                      "id",
                      "objective_id",
                      "title",
                      "description",
                      "metric_type",
                      "start_value",
                      "target_value",
                      "unit",
                      "cadence",
                      "per",
                      "since",
                      "status",
                      "created_at",
                      "short_code",
                      "url",
                      "current_value",
                      "boundary_value",
                      "progress_pct",
                      "boundary_progress_pct",
                      "movement",
                      "movement_pp",
                      "evidence_count",
                      "last_recorded_at",
                      "habit_expected_since_boundary",
                      "habit_logs_since_boundary",
                      "performance_share"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      "objective_id": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      "title": {
                        "type": "string"
                      },
                      "description": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "metric_type": {
                        "type": "string",
                        "const": "habit"
                      },
                      "start_value": {
                        "type": "number",
                        "const": 0
                      },
                      "target_value": {
                        "type": "number",
                        "const": 100
                      },
                      "unit": {
                        "type": "null"
                      },
                      "cadence": {
                        "type": "string",
                        "enum": [
                          "weekly",
                          "monthly"
                        ],
                        "description": "UI label: Cadence. Weekly or Monthly; per supplies the Times value."
                      },
                      "per": {
                        "type": "integer",
                        "exclusiveMinimum": 0,
                        "maximum": 9007199254740991
                      },
                      "since": {
                        "type": "string",
                        "format": "date",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                        "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                      },
                      "status": {
                        "type": "string",
                        "enum": [
                          "in_progress",
                          "completed"
                        ],
                        "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                      },
                      "created_at": {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      "short_code": {
                        "type": "string",
                        "minLength": 1
                      },
                      "url": {
                        "type": "string",
                        "format": "uri"
                      },
                      "current_value": {
                        "type": "number",
                        "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                      },
                      "boundary_value": {
                        "type": "number"
                      },
                      "progress_pct": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "boundary_progress_pct": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "movement": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "movement_pp": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "evidence_count": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      },
                      "last_recorded_at": {
                        "anyOf": [
                          {
                            "type": "string",
                            "format": "date-time",
                            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "habit_expected_since_boundary": {
                        "anyOf": [
                          {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "habit_logs_since_boundary": {
                        "anyOf": [
                          {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "performance_share": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "required": [
                      "id",
                      "objective_id",
                      "title",
                      "description",
                      "metric_type",
                      "start_value",
                      "target_value",
                      "unit",
                      "cadence",
                      "per",
                      "since",
                      "status",
                      "created_at",
                      "short_code",
                      "url",
                      "current_value",
                      "boundary_value",
                      "progress_pct",
                      "boundary_progress_pct",
                      "movement",
                      "movement_pp",
                      "evidence_count",
                      "last_recorded_at",
                      "habit_expected_since_boundary",
                      "habit_logs_since_boundary",
                      "performance_share"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      "objective_id": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      "title": {
                        "type": "string"
                      },
                      "description": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "metric_type": {
                        "type": "string",
                        "const": "performance"
                      },
                      "start_value": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "UI label: Start. Metric baseline; habit baselines are derived rather than stored."
                      },
                      "target_value": {
                        "type": "number"
                      },
                      "unit": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "UI label: Unit. Used by Number and Performance results."
                      },
                      "cadence": {
                        "type": "null"
                      },
                      "per": {
                        "type": "null"
                      },
                      "since": {
                        "type": "string",
                        "format": "date",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                        "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                      },
                      "status": {
                        "type": "string",
                        "enum": [
                          "in_progress",
                          "completed"
                        ],
                        "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                      },
                      "created_at": {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      "short_code": {
                        "type": "string",
                        "minLength": 1
                      },
                      "url": {
                        "type": "string",
                        "format": "uri"
                      },
                      "current_value": {
                        "type": "number",
                        "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                      },
                      "boundary_value": {
                        "type": "number"
                      },
                      "progress_pct": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "boundary_progress_pct": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "movement": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "movement_pp": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "evidence_count": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      },
                      "last_recorded_at": {
                        "anyOf": [
                          {
                            "type": "string",
                            "format": "date-time",
                            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "habit_expected_since_boundary": {
                        "anyOf": [
                          {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "habit_logs_since_boundary": {
                        "anyOf": [
                          {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 9007199254740991
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "performance_share": {
                        "anyOf": [
                          {
                            "type": "number"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "required": [
                      "id",
                      "objective_id",
                      "title",
                      "description",
                      "metric_type",
                      "start_value",
                      "target_value",
                      "unit",
                      "cadence",
                      "per",
                      "since",
                      "status",
                      "created_at",
                      "short_code",
                      "url",
                      "current_value",
                      "boundary_value",
                      "progress_pct",
                      "boundary_progress_pct",
                      "movement",
                      "movement_pp",
                      "evidence_count",
                      "last_recorded_at",
                      "habit_expected_since_boundary",
                      "habit_logs_since_boundary",
                      "performance_share"
                    ],
                    "additionalProperties": false
                  }
                ]
              }
            },
            "next_cursor": {
              "anyOf": [
                {
                  "type": "string",
                  "minLength": 1
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "items",
            "next_cursor"
          ],
          "additionalProperties": false
        },
        "actions": {
          "type": "object",
          "properties": {
            "items": {
              "maxItems": 50,
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "cycle_id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "objective_id": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "title": {
                    "type": "string"
                  },
                  "description": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "due_at": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                        "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "UI label: Due. May be unset on a web draft; a set date cannot be cleared."
                  },
                  "status": {
                    "type": "string",
                    "enum": [
                      "open",
                      "in_progress",
                      "done"
                    ],
                    "description": "Action status: Open, In progress or Done. The To do UI group includes Open and In progress; Overdue is derived, not a status."
                  },
                  "sort_order": {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "Drag order within an action group; not a progress status."
                  },
                  "session_id": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "created_at": {
                    "type": "string",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                  },
                  "url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "overdue": {
                    "type": "boolean"
                  },
                  "done_since_boundary": {
                    "type": "boolean"
                  }
                },
                "required": [
                  "id",
                  "cycle_id",
                  "objective_id",
                  "title",
                  "description",
                  "due_at",
                  "status",
                  "sort_order",
                  "session_id",
                  "created_at",
                  "url",
                  "overdue",
                  "done_since_boundary"
                ],
                "additionalProperties": false
              }
            },
            "next_cursor": {
              "anyOf": [
                {
                  "type": "string",
                  "minLength": 1
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "items",
            "next_cursor"
          ],
          "additionalProperties": false
        },
        "notes": {
          "type": "object",
          "properties": {
            "notes": {
              "type": "object",
              "properties": {
                "items": {
                  "maxItems": 50,
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      "text": {
                        "type": "string",
                        "minLength": 1
                      },
                      "recorded_at": {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      "url": {
                        "type": "string",
                        "format": "uri"
                      },
                      "since_boundary": {
                        "type": "boolean"
                      }
                    },
                    "required": [
                      "id",
                      "text",
                      "recorded_at",
                      "url",
                      "since_boundary"
                    ],
                    "additionalProperties": false
                  }
                },
                "next_cursor": {
                  "anyOf": [
                    {
                      "type": "string",
                      "minLength": 1
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "items",
                "next_cursor"
              ],
              "additionalProperties": false
            },
            "selection": {
              "type": "string",
              "enum": [
                "since_boundary",
                "recent_fallback",
                "selected",
                "history"
              ]
            },
            "total": {
              "type": "integer",
              "minimum": 0,
              "maximum": 9007199254740991
            }
          },
          "required": [
            "notes",
            "selection",
            "total"
          ],
          "additionalProperties": false
        },
        "last_completed_session": {
          "anyOf": [
            {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                  "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                },
                "vendor": {
                  "type": "string",
                  "enum": [
                    "claude",
                    "openai"
                  ],
                  "description": "Conversation host: claude is shown as Claude; openai is shown as ChatGPT."
                },
                "source_url": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "uri"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "External conversation link used by Open the conversation. Not the app detail URL."
                },
                "type": {
                  "anyOf": [
                    {
                      "type": "string",
                      "enum": [
                        "goal_setup",
                        "check_in",
                        "review",
                        "open_coaching"
                      ],
                      "description": "Coaching session type: Goal setup, Check-in, Review or Open coaching. Separate from whether the session is still open."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "briefing_notes": {
                  "type": "string",
                  "description": "UI document: Briefing. Server-prepared coaching context."
                },
                "headline": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "One-line coaching-session summary used in session lists."
                },
                "summary_notes": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "UI document: Summary. Saved when the coaching session closes."
                },
                "started_at": {
                  "type": "string",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                },
                "ended_at": {
                  "anyOf": [
                    {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "Closed when set; In progress when null. This is derived session state, not a stored status enum."
                },
                "url": {
                  "type": "string",
                  "format": "uri",
                  "description": "Internal app link to coaching session details; distinct from source_url."
                },
                "duration_minutes": {
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "actions_created": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "actions_reviewed": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                }
              },
              "required": [
                "id",
                "vendor",
                "source_url",
                "type",
                "briefing_notes",
                "headline",
                "summary_notes",
                "started_at",
                "ended_at",
                "url",
                "duration_minutes",
                "actions_created",
                "actions_reviewed"
              ],
              "additionalProperties": false
            },
            {
              "type": "null"
            }
          ]
        },
        "selected": {
          "type": "object",
          "properties": {
            "objective": {
              "anyOf": [
                {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    "cycle_id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    "title": {
                      "type": "string"
                    },
                    "description": {
                      "type": "string"
                    },
                    "deadline_at": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "date",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                          "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                        },
                        {
                          "type": "null"
                        }
                      ],
                      "description": "UI label: Deadline; null when no deadline has been set."
                    },
                    "status": {
                      "type": "string",
                      "enum": [
                        "on_track",
                        "off_track",
                        "completed"
                      ],
                      "description": "Objective status: On track, Off track or Completed. Coaching judgment, independent of the derived Progress percentage."
                    },
                    "created_at": {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    "short_code": {
                      "type": "string",
                      "minLength": 1
                    },
                    "url": {
                      "type": "string",
                      "format": "uri"
                    },
                    "progress_pct": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ],
                      "description": "UI label: Progress. Derived from measurable results, independently of Status."
                    },
                    "boundary_progress_pct": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ],
                      "description": "Historical progress at the resolved last-session boundary; not current Progress."
                    },
                    "movement_pp": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": [
                    "id",
                    "cycle_id",
                    "title",
                    "description",
                    "deadline_at",
                    "status",
                    "created_at",
                    "short_code",
                    "url",
                    "progress_pct",
                    "boundary_progress_pct",
                    "movement_pp"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "null"
                }
              ]
            },
            "result": {
              "anyOf": [
                {
                  "oneOf": [
                    {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                        },
                        "objective_id": {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                        },
                        "title": {
                          "type": "string"
                        },
                        "description": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "metric_type": {
                          "type": "string",
                          "const": "number"
                        },
                        "start_value": {
                          "type": "number"
                        },
                        "target_value": {
                          "type": "number"
                        },
                        "unit": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "UI label: Unit. Used by Number and Performance results."
                        },
                        "cadence": {
                          "type": "null"
                        },
                        "per": {
                          "type": "null"
                        },
                        "since": {
                          "type": "null"
                        },
                        "status": {
                          "type": "string",
                          "enum": [
                            "in_progress",
                            "completed"
                          ],
                          "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                        },
                        "created_at": {
                          "type": "string",
                          "format": "date-time",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                        },
                        "short_code": {
                          "type": "string",
                          "minLength": 1
                        },
                        "url": {
                          "type": "string",
                          "format": "uri"
                        },
                        "current_value": {
                          "type": "number",
                          "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                        },
                        "boundary_value": {
                          "type": "number"
                        },
                        "progress_pct": {
                          "anyOf": [
                            {
                              "type": "number"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "boundary_progress_pct": {
                          "anyOf": [
                            {
                              "type": "number"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "movement": {
                          "anyOf": [
                            {
                              "type": "number"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "movement_pp": {
                          "anyOf": [
                            {
                              "type": "number"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "evidence_count": {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        "last_recorded_at": {
                          "anyOf": [
                            {
                              "type": "string",
                              "format": "date-time",
                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "habit_expected_since_boundary": {
                          "anyOf": [
                            {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "habit_logs_since_boundary": {
                          "anyOf": [
                            {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "performance_share": {
                          "anyOf": [
                            {
                              "type": "number"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        }
                      },
                      "required": [
                        "id",
                        "objective_id",
                        "title",
                        "description",
                        "metric_type",
                        "start_value",
                        "target_value",
                        "unit",
                        "cadence",
                        "per",
                        "since",
                        "status",
                        "created_at",
                        "short_code",
                        "url",
                        "current_value",
                        "boundary_value",
                        "progress_pct",
                        "boundary_progress_pct",
                        "movement",
                        "movement_pp",
                        "evidence_count",
                        "last_recorded_at",
                        "habit_expected_since_boundary",
                        "habit_logs_since_boundary",
                        "performance_share"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                        },
                        "objective_id": {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                        },
                        "title": {
                          "type": "string"
                        },
                        "description": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "metric_type": {
                          "type": "string",
                          "const": "percentage"
                        },
                        "start_value": {
                          "type": "number",
                          "minimum": 0,
                          "maximum": 100
                        },
                        "target_value": {
                          "type": "number",
                          "minimum": 0,
                          "maximum": 100
                        },
                        "unit": {
                          "type": "null"
                        },
                        "cadence": {
                          "type": "null"
                        },
                        "per": {
                          "type": "null"
                        },
                        "since": {
                          "type": "null"
                        },
                        "status": {
                          "type": "string",
                          "enum": [
                            "in_progress",
                            "completed"
                          ],
                          "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                        },
                        "created_at": {
                          "type": "string",
                          "format": "date-time",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                        },
                        "short_code": {
                          "type": "string",
                          "minLength": 1
                        },
                        "url": {
                          "type": "string",
                          "format": "uri"
                        },
                        "current_value": {
                          "type": "number",
                          "minimum": 0,
                          "maximum": 100
                        },
                        "boundary_value": {
                          "type": "number",
                          "minimum": 0,
                          "maximum": 100
                        },
                        "progress_pct": {
                          "anyOf": [
                            {
                              "type": "number"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "boundary_progress_pct": {
                          "anyOf": [
                            {
                              "type": "number"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "movement": {
                          "anyOf": [
                            {
                              "type": "number"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "movement_pp": {
                          "anyOf": [
                            {
                              "type": "number"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "evidence_count": {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        "last_recorded_at": {
                          "anyOf": [
                            {
                              "type": "string",
                              "format": "date-time",
                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "habit_expected_since_boundary": {
                          "anyOf": [
                            {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "habit_logs_since_boundary": {
                          "anyOf": [
                            {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "performance_share": {
                          "anyOf": [
                            {
                              "type": "number"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        }
                      },
                      "required": [
                        "id",
                        "objective_id",
                        "title",
                        "description",
                        "metric_type",
                        "start_value",
                        "target_value",
                        "unit",
                        "cadence",
                        "per",
                        "since",
                        "status",
                        "created_at",
                        "short_code",
                        "url",
                        "current_value",
                        "boundary_value",
                        "progress_pct",
                        "boundary_progress_pct",
                        "movement",
                        "movement_pp",
                        "evidence_count",
                        "last_recorded_at",
                        "habit_expected_since_boundary",
                        "habit_logs_since_boundary",
                        "performance_share"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                        },
                        "objective_id": {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                        },
                        "title": {
                          "type": "string"
                        },
                        "description": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "metric_type": {
                          "type": "string",
                          "const": "milestone"
                        },
                        "start_value": {
                          "type": "number",
                          "const": 0
                        },
                        "target_value": {
                          "type": "number",
                          "const": 1
                        },
                        "unit": {
                          "type": "null"
                        },
                        "cadence": {
                          "type": "null"
                        },
                        "per": {
                          "type": "null"
                        },
                        "since": {
                          "type": "null"
                        },
                        "status": {
                          "type": "string",
                          "enum": [
                            "in_progress",
                            "completed"
                          ],
                          "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                        },
                        "created_at": {
                          "type": "string",
                          "format": "date-time",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                        },
                        "short_code": {
                          "type": "string",
                          "minLength": 1
                        },
                        "url": {
                          "type": "string",
                          "format": "uri"
                        },
                        "current_value": {
                          "anyOf": [
                            {
                              "type": "number",
                              "const": 0
                            },
                            {
                              "type": "number",
                              "const": 1
                            }
                          ]
                        },
                        "boundary_value": {
                          "anyOf": [
                            {
                              "type": "number",
                              "const": 0
                            },
                            {
                              "type": "number",
                              "const": 1
                            }
                          ]
                        },
                        "progress_pct": {
                          "anyOf": [
                            {
                              "type": "number"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "boundary_progress_pct": {
                          "anyOf": [
                            {
                              "type": "number"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "movement": {
                          "anyOf": [
                            {
                              "type": "number"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "movement_pp": {
                          "anyOf": [
                            {
                              "type": "number"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "evidence_count": {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        "last_recorded_at": {
                          "anyOf": [
                            {
                              "type": "string",
                              "format": "date-time",
                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "habit_expected_since_boundary": {
                          "anyOf": [
                            {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "habit_logs_since_boundary": {
                          "anyOf": [
                            {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "performance_share": {
                          "anyOf": [
                            {
                              "type": "number"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        }
                      },
                      "required": [
                        "id",
                        "objective_id",
                        "title",
                        "description",
                        "metric_type",
                        "start_value",
                        "target_value",
                        "unit",
                        "cadence",
                        "per",
                        "since",
                        "status",
                        "created_at",
                        "short_code",
                        "url",
                        "current_value",
                        "boundary_value",
                        "progress_pct",
                        "boundary_progress_pct",
                        "movement",
                        "movement_pp",
                        "evidence_count",
                        "last_recorded_at",
                        "habit_expected_since_boundary",
                        "habit_logs_since_boundary",
                        "performance_share"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                        },
                        "objective_id": {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                        },
                        "title": {
                          "type": "string"
                        },
                        "description": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "metric_type": {
                          "type": "string",
                          "const": "habit"
                        },
                        "start_value": {
                          "type": "number",
                          "const": 0
                        },
                        "target_value": {
                          "type": "number",
                          "const": 100
                        },
                        "unit": {
                          "type": "null"
                        },
                        "cadence": {
                          "type": "string",
                          "enum": [
                            "weekly",
                            "monthly"
                          ],
                          "description": "UI label: Cadence. Weekly or Monthly; per supplies the Times value."
                        },
                        "per": {
                          "type": "integer",
                          "exclusiveMinimum": 0,
                          "maximum": 9007199254740991
                        },
                        "since": {
                          "type": "string",
                          "format": "date",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                          "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                        },
                        "status": {
                          "type": "string",
                          "enum": [
                            "in_progress",
                            "completed"
                          ],
                          "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                        },
                        "created_at": {
                          "type": "string",
                          "format": "date-time",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                        },
                        "short_code": {
                          "type": "string",
                          "minLength": 1
                        },
                        "url": {
                          "type": "string",
                          "format": "uri"
                        },
                        "current_value": {
                          "type": "number",
                          "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                        },
                        "boundary_value": {
                          "type": "number"
                        },
                        "progress_pct": {
                          "anyOf": [
                            {
                              "type": "number"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "boundary_progress_pct": {
                          "anyOf": [
                            {
                              "type": "number"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "movement": {
                          "anyOf": [
                            {
                              "type": "number"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "movement_pp": {
                          "anyOf": [
                            {
                              "type": "number"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "evidence_count": {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        "last_recorded_at": {
                          "anyOf": [
                            {
                              "type": "string",
                              "format": "date-time",
                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "habit_expected_since_boundary": {
                          "anyOf": [
                            {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "habit_logs_since_boundary": {
                          "anyOf": [
                            {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "performance_share": {
                          "anyOf": [
                            {
                              "type": "number"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        }
                      },
                      "required": [
                        "id",
                        "objective_id",
                        "title",
                        "description",
                        "metric_type",
                        "start_value",
                        "target_value",
                        "unit",
                        "cadence",
                        "per",
                        "since",
                        "status",
                        "created_at",
                        "short_code",
                        "url",
                        "current_value",
                        "boundary_value",
                        "progress_pct",
                        "boundary_progress_pct",
                        "movement",
                        "movement_pp",
                        "evidence_count",
                        "last_recorded_at",
                        "habit_expected_since_boundary",
                        "habit_logs_since_boundary",
                        "performance_share"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                        },
                        "objective_id": {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                        },
                        "title": {
                          "type": "string"
                        },
                        "description": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "metric_type": {
                          "type": "string",
                          "const": "performance"
                        },
                        "start_value": {
                          "anyOf": [
                            {
                              "type": "number"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "UI label: Start. Metric baseline; habit baselines are derived rather than stored."
                        },
                        "target_value": {
                          "type": "number"
                        },
                        "unit": {
                          "anyOf": [
                            {
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "UI label: Unit. Used by Number and Performance results."
                        },
                        "cadence": {
                          "type": "null"
                        },
                        "per": {
                          "type": "null"
                        },
                        "since": {
                          "type": "string",
                          "format": "date",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                          "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                        },
                        "status": {
                          "type": "string",
                          "enum": [
                            "in_progress",
                            "completed"
                          ],
                          "description": "Result status: In progress or Completed. Reaching the target does not automatically mark the result completed."
                        },
                        "created_at": {
                          "type": "string",
                          "format": "date-time",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                        },
                        "short_code": {
                          "type": "string",
                          "minLength": 1
                        },
                        "url": {
                          "type": "string",
                          "format": "uri"
                        },
                        "current_value": {
                          "type": "number",
                          "description": "Current value displayed in the result headline; derived according to metric type from its baseline and retained evidence."
                        },
                        "boundary_value": {
                          "type": "number"
                        },
                        "progress_pct": {
                          "anyOf": [
                            {
                              "type": "number"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "boundary_progress_pct": {
                          "anyOf": [
                            {
                              "type": "number"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "movement": {
                          "anyOf": [
                            {
                              "type": "number"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "movement_pp": {
                          "anyOf": [
                            {
                              "type": "number"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "evidence_count": {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        "last_recorded_at": {
                          "anyOf": [
                            {
                              "type": "string",
                              "format": "date-time",
                              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "habit_expected_since_boundary": {
                          "anyOf": [
                            {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "habit_logs_since_boundary": {
                          "anyOf": [
                            {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "performance_share": {
                          "anyOf": [
                            {
                              "type": "number"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        }
                      },
                      "required": [
                        "id",
                        "objective_id",
                        "title",
                        "description",
                        "metric_type",
                        "start_value",
                        "target_value",
                        "unit",
                        "cadence",
                        "per",
                        "since",
                        "status",
                        "created_at",
                        "short_code",
                        "url",
                        "current_value",
                        "boundary_value",
                        "progress_pct",
                        "boundary_progress_pct",
                        "movement",
                        "movement_pp",
                        "evidence_count",
                        "last_recorded_at",
                        "habit_expected_since_boundary",
                        "habit_logs_since_boundary",
                        "performance_share"
                      ],
                      "additionalProperties": false
                    }
                  ]
                },
                {
                  "type": "null"
                }
              ]
            },
            "action": {
              "anyOf": [
                {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    "cycle_id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    "objective_id": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "title": {
                      "type": "string"
                    },
                    "description": {
                      "anyOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "due_at": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "date",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                          "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                        },
                        {
                          "type": "null"
                        }
                      ],
                      "description": "UI label: Due. May be unset on a web draft; a set date cannot be cleared."
                    },
                    "status": {
                      "type": "string",
                      "enum": [
                        "open",
                        "in_progress",
                        "done"
                      ],
                      "description": "Action status: Open, In progress or Done. The To do UI group includes Open and In progress; Overdue is derived, not a status."
                    },
                    "sort_order": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "null"
                        }
                      ],
                      "description": "Drag order within an action group; not a progress status."
                    },
                    "session_id": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "uuid",
                          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "created_at": {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    "url": {
                      "type": "string",
                      "format": "uri"
                    },
                    "overdue": {
                      "type": "boolean"
                    },
                    "done_since_boundary": {
                      "type": "boolean"
                    }
                  },
                  "required": [
                    "id",
                    "cycle_id",
                    "objective_id",
                    "title",
                    "description",
                    "due_at",
                    "status",
                    "sort_order",
                    "session_id",
                    "created_at",
                    "url",
                    "overdue",
                    "done_since_boundary"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "null"
                }
              ]
            },
            "note": {
              "anyOf": [
                {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    "text": {
                      "type": "string",
                      "minLength": 1
                    },
                    "recorded_at": {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    "url": {
                      "type": "string",
                      "format": "uri"
                    },
                    "since_boundary": {
                      "type": "boolean"
                    }
                  },
                  "required": [
                    "id",
                    "text",
                    "recorded_at",
                    "url",
                    "since_boundary"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "null"
                }
              ]
            },
            "session": {
              "anyOf": [
                {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid",
                      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                    },
                    "vendor": {
                      "type": "string",
                      "enum": [
                        "claude",
                        "openai"
                      ],
                      "description": "Conversation host: claude is shown as Claude; openai is shown as ChatGPT."
                    },
                    "source_url": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "uri"
                        },
                        {
                          "type": "null"
                        }
                      ],
                      "description": "External conversation link used by Open the conversation. Not the app detail URL."
                    },
                    "type": {
                      "anyOf": [
                        {
                          "type": "string",
                          "enum": [
                            "goal_setup",
                            "check_in",
                            "review",
                            "open_coaching"
                          ],
                          "description": "Coaching session type: Goal setup, Check-in, Review or Open coaching. Separate from whether the session is still open."
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "briefing_notes": {
                      "type": "string",
                      "description": "UI document: Briefing. Server-prepared coaching context."
                    },
                    "headline": {
                      "anyOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "null"
                        }
                      ],
                      "description": "One-line coaching-session summary used in session lists."
                    },
                    "summary_notes": {
                      "anyOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "null"
                        }
                      ],
                      "description": "UI document: Summary. Saved when the coaching session closes."
                    },
                    "started_at": {
                      "type": "string",
                      "format": "date-time",
                      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                    },
                    "ended_at": {
                      "anyOf": [
                        {
                          "type": "string",
                          "format": "date-time",
                          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                        },
                        {
                          "type": "null"
                        }
                      ],
                      "description": "Closed when set; In progress when null. This is derived session state, not a stored status enum."
                    },
                    "url": {
                      "type": "string",
                      "format": "uri",
                      "description": "Internal app link to coaching session details; distinct from source_url."
                    },
                    "duration_minutes": {
                      "anyOf": [
                        {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 9007199254740991
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "actions_created": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    },
                    "actions_reviewed": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991
                    }
                  },
                  "required": [
                    "id",
                    "vendor",
                    "source_url",
                    "type",
                    "briefing_notes",
                    "headline",
                    "summary_notes",
                    "started_at",
                    "ended_at",
                    "url",
                    "duration_minutes",
                    "actions_created",
                    "actions_reviewed"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "objective",
            "result",
            "action",
            "note",
            "session"
          ],
          "additionalProperties": false
        },
        "continuations": {
          "type": "object",
          "propertyNames": {
            "type": "string",
            "enum": [
              "cycles",
              "objectives",
              "results",
              "actions",
              "notes",
              "sessions",
              "result_logs",
              "habit_logs",
              "action_logs",
              "trend"
            ]
          },
          "additionalProperties": {
            "type": "string",
            "minLength": 1
          }
        }
      },
      "required": [
        "profile",
        "boundary",
        "cycle_line",
        "cycles",
        "cycle",
        "objectives",
        "results",
        "actions",
        "notes",
        "last_completed_session",
        "selected",
        "continuations"
      ],
      "additionalProperties": false
    },
    "history": {
      "type": "object",
      "properties": {
        "window": {
          "type": "object",
          "properties": {
            "since": {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
            },
            "until": {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
            }
          },
          "required": [
            "since",
            "until"
          ],
          "additionalProperties": false
        },
        "result_logs": {
          "type": "object",
          "properties": {
            "items": {
              "maxItems": 50,
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "result_id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "value": {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "comment": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "session_id": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "recorded_at": {
                    "type": "string",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                  }
                },
                "required": [
                  "id",
                  "result_id",
                  "value",
                  "comment",
                  "session_id",
                  "recorded_at"
                ],
                "additionalProperties": false,
                "description": "Result log stored in result_logs. The UI shows value entries under Updates and their non-empty comments under Comments. Value may be null for a comment-only habit entry; evidence and timestamps are immutable."
              }
            },
            "next_cursor": {
              "anyOf": [
                {
                  "type": "string",
                  "minLength": 1
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "items",
            "next_cursor"
          ],
          "additionalProperties": false
        },
        "habit_logs": {
          "type": "object",
          "properties": {
            "items": {
              "maxItems": 50,
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "result_id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "day": {
                    "type": "string",
                    "format": "date",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
                    "description": "Calendar date as YYYY-MM-DD in the profile timezone."
                  },
                  "session_id": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "created_at": {
                    "type": "string",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                  }
                },
                "required": [
                  "id",
                  "result_id",
                  "day",
                  "session_id",
                  "created_at"
                ],
                "additionalProperties": false,
                "description": "Habit log stored in habit_logs. The UI marks calendar days and lists them under Updates with the Marked column. One row per result/day; unmarking deletes the row. This is not append-only history."
              }
            },
            "next_cursor": {
              "anyOf": [
                {
                  "type": "string",
                  "minLength": 1
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "items",
            "next_cursor"
          ],
          "additionalProperties": false
        },
        "action_logs": {
          "type": "object",
          "properties": {
            "items": {
              "maxItems": 50,
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "action_id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "status": {
                    "type": "string",
                    "enum": [
                      "open",
                      "in_progress",
                      "done"
                    ],
                    "description": "Action status: Open, In progress or Done. The To do UI group includes Open and In progress; Overdue is derived, not a status."
                  },
                  "comment": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "session_id": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uuid",
                        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                        "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "recorded_at": {
                    "type": "string",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                  }
                },
                "required": [
                  "id",
                  "action_id",
                  "status",
                  "comment",
                  "session_id",
                  "recorded_at"
                ],
                "additionalProperties": false,
                "description": "Action log stored in action_logs. Records a status observation and optional comment. Action detail shows Comments, a filtered view rather than the complete status history; status and timestamps are immutable, and only the comment may be cleared."
              }
            },
            "next_cursor": {
              "anyOf": [
                {
                  "type": "string",
                  "minLength": 1
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "items",
            "next_cursor"
          ],
          "additionalProperties": false
        },
        "notes": {
          "type": "object",
          "properties": {
            "items": {
              "maxItems": 50,
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "text": {
                    "type": "string",
                    "minLength": 1
                  },
                  "recorded_at": {
                    "type": "string",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                  },
                  "url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "since_boundary": {
                    "type": "boolean"
                  }
                },
                "required": [
                  "id",
                  "text",
                  "recorded_at",
                  "url",
                  "since_boundary"
                ],
                "additionalProperties": false
              }
            },
            "next_cursor": {
              "anyOf": [
                {
                  "type": "string",
                  "minLength": 1
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "items",
            "next_cursor"
          ],
          "additionalProperties": false
        },
        "sessions": {
          "type": "object",
          "properties": {
            "items": {
              "maxItems": 50,
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                    "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
                  },
                  "vendor": {
                    "type": "string",
                    "enum": [
                      "claude",
                      "openai"
                    ],
                    "description": "Conversation host: claude is shown as Claude; openai is shown as ChatGPT."
                  },
                  "source_url": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "uri"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "External conversation link used by Open the conversation. Not the app detail URL."
                  },
                  "type": {
                    "anyOf": [
                      {
                        "type": "string",
                        "enum": [
                          "goal_setup",
                          "check_in",
                          "review",
                          "open_coaching"
                        ],
                        "description": "Coaching session type: Goal setup, Check-in, Review or Open coaching. Separate from whether the session is still open."
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "briefing_notes": {
                    "type": "string",
                    "description": "UI document: Briefing. Server-prepared coaching context."
                  },
                  "headline": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "One-line coaching-session summary used in session lists."
                  },
                  "summary_notes": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "UI document: Summary. Saved when the coaching session closes."
                  },
                  "started_at": {
                    "type": "string",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                  },
                  "ended_at": {
                    "anyOf": [
                      {
                        "type": "string",
                        "format": "date-time",
                        "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "description": "Closed when set; In progress when null. This is derived session state, not a stored status enum."
                  },
                  "url": {
                    "type": "string",
                    "format": "uri",
                    "description": "Internal app link to coaching session details; distinct from source_url."
                  },
                  "duration_minutes": {
                    "anyOf": [
                      {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "actions_created": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 9007199254740991
                  },
                  "actions_reviewed": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 9007199254740991
                  }
                },
                "required": [
                  "id",
                  "vendor",
                  "source_url",
                  "type",
                  "briefing_notes",
                  "headline",
                  "summary_notes",
                  "started_at",
                  "ended_at",
                  "url",
                  "duration_minutes",
                  "actions_created",
                  "actions_reviewed"
                ],
                "additionalProperties": false
              }
            },
            "next_cursor": {
              "anyOf": [
                {
                  "type": "string",
                  "minLength": 1
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "items",
            "next_cursor"
          ],
          "additionalProperties": false
        },
        "continuations": {
          "type": "object",
          "propertyNames": {
            "type": "string",
            "enum": [
              "cycles",
              "objectives",
              "results",
              "actions",
              "notes",
              "sessions",
              "result_logs",
              "habit_logs",
              "action_logs",
              "trend"
            ]
          },
          "additionalProperties": {
            "type": "string",
            "minLength": 1
          }
        }
      },
      "required": [
        "window",
        "result_logs",
        "habit_logs",
        "action_logs",
        "notes",
        "sessions",
        "continuations"
      ],
      "additionalProperties": false
    }
  },
  "required": [
    "as_of",
    "current"
  ],
  "additionalProperties": false
}
Public MCP input/output shapes for comparison
[]
user.get · read · contract-only

Feature declaration: getUser

Requirement: docs/feature-specs/F1-identity.md · Access: retained-read

Tables: user (read), subscription (read), oauth_consent (read)

Trusted context: authenticated actor

Retry: Safe to retry with the same resolved filters and cursor.

Expected errors: UNAUTHORIZED, BAD_REQUEST, FORBIDDEN, NOT_FOUND, CONFLICT, NOT_IMPLEMENTED, INTERNAL_SERVER_ERROR

API consumers

[
  {
    "operation": "user.get",
    "service": "user.get",
    "binding": "bound"
  }
]

MCP consumers

[
  {
    "tool": "user_read",
    "collection": "user",
    "specification": "docs/feature-specs/F1-identity.md#mcp-source-mapping--selected-target",
    "operation": "call",
    "binding": "planned",
    "mode": "adapted",
    "readiness": "contract-only",
    "services": [
      "user.get"
    ],
    "gap": null,
    "projection": "Project permitted coaching profile only; user_update additionally requires MCP entitlement."
  }
]

Service input

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {},
  "additionalProperties": false
}

Service output

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
    },
    "name": {
      "type": "string",
      "description": "Chosen coaching/display name, used verbatim. Target UI prompt: What should we call you? Empty means unknown; no separate surname."
    },
    "about_me": {
      "type": "string",
      "description": "UI label: About me."
    },
    "timezone": {
      "type": "string",
      "minLength": 1,
      "description": "UI label: Time zone. IANA zone used for calendar dates and boundaries."
    },
    "email": {
      "type": "string",
      "format": "email",
      "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
    },
    "subscription_status": {
      "type": "string",
      "enum": [
        "incomplete",
        "active",
        "past_due",
        "canceled"
      ],
      "description": "Derived from subscription, not a User column: active = Active, past_due = Payment failed, canceled = Canceled, incomplete = Awaiting payment. Only active grants paid access. Scheduled cancellation uses the separate flag; it is not a fifth status."
    },
    "subscription_cancel_at_period_end": {
      "type": "boolean",
      "description": "Derived from the selected local subscription; false when none exists."
    },
    "subscription_current_period_end": {
      "anyOf": [
        {
          "type": "string",
          "format": "date-time",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
        },
        {
          "type": "null"
        }
      ],
      "description": "Derived from the selected local subscription; null when none exists."
    },
    "connected": {
      "type": "boolean",
      "description": "True when an OAuth consent row exists for this user, for any client. Indicates prior authorization for onboarding, not current connector liveness."
    },
    "created_at": {
      "type": "string",
      "format": "date-time",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
    }
  },
  "required": [
    "id",
    "name",
    "about_me",
    "timezone",
    "email",
    "subscription_status",
    "subscription_cancel_at_period_end",
    "subscription_current_period_end",
    "connected",
    "created_at"
  ],
  "additionalProperties": false,
  "description": "Account view: chosen name and profile from user, billing state from subscription, and connected from oauth_consent. Auth credentials and provider tokens are not exposed."
}
Public MCP input/output shapes for comparison
[
  {
    "tool": "user_read",
    "collection": "user",
    "specification": "docs/feature-specs/F1-identity.md#mcp-source-mapping--selected-target",
    "operation": "call",
    "binding": "planned",
    "mode": "adapted",
    "readiness": "contract-only",
    "services": [
      "user.get"
    ],
    "gap": null,
    "projection": "Project permitted coaching profile only; user_update additionally requires MCP entitlement.",
    "input": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {},
      "additionalProperties": false
    },
    "output": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "profile": {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "name": {
              "type": "string",
              "description": "Chosen coaching/display name, used verbatim. Target UI prompt: What should we call you? Empty means unknown; no separate surname."
            },
            "about_me": {
              "type": "string",
              "description": "UI label: About me."
            },
            "timezone": {
              "type": "string",
              "minLength": 1,
              "description": "UI label: Time zone. IANA zone used for calendar dates and boundaries."
            }
          },
          "required": [
            "id",
            "name",
            "about_me",
            "timezone"
          ],
          "additionalProperties": false
        }
      },
      "required": [
        "profile"
      ],
      "additionalProperties": false
    }
  }
]
user.update · write · contract-only

Feature declaration: updateUser

Requirement: docs/feature-specs/F1-identity.md · Access: account-management

Tables: user (write), subscription (read), oauth_consent (read)

Trusted context: authenticated actor

Retry: Inspect state after uncertain outcomes; never infer rollback from a response failure.

Expected errors: UNAUTHORIZED, BAD_REQUEST, FORBIDDEN, NOT_FOUND, CONFLICT, NOT_IMPLEMENTED, INTERNAL_SERVER_ERROR

API consumers

[
  {
    "operation": "user.update",
    "service": "user.update",
    "binding": "bound"
  }
]

MCP consumers

[
  {
    "tool": "user_update",
    "collection": "user",
    "specification": "docs/feature-specs/F1-identity.md#mcp-source-mapping--selected-target",
    "operation": "call",
    "binding": "planned",
    "mode": "adapted",
    "readiness": "contract-only",
    "services": [
      "user.update"
    ],
    "gap": null,
    "projection": "Project permitted coaching profile only; user_update additionally requires MCP entitlement."
  }
]

Service input

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "name": {
      "description": "Chosen coaching/display name; use verbatim. Omit to preserve, empty text clears it.",
      "type": "string"
    },
    "about_me": {
      "description": "UI label: About me. Coaching context; omit to preserve, empty text clears it, null is invalid.",
      "type": "string",
      "maxLength": 4000
    },
    "timezone": {
      "type": "string",
      "description": "UI label: Time zone. IANA zone used for calendar dates and boundaries."
    }
  },
  "additionalProperties": false
}

Service output

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "record": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
          "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
        },
        "name": {
          "type": "string",
          "description": "Chosen coaching/display name, used verbatim. Target UI prompt: What should we call you? Empty means unknown; no separate surname."
        },
        "about_me": {
          "type": "string",
          "description": "UI label: About me."
        },
        "timezone": {
          "type": "string",
          "minLength": 1,
          "description": "UI label: Time zone. IANA zone used for calendar dates and boundaries."
        }
      },
      "required": [
        "id",
        "name",
        "about_me",
        "timezone"
      ],
      "additionalProperties": false
    },
    "changed": {
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "entity": {
            "type": "string",
            "enum": [
              "user",
              "cycle",
              "objective",
              "result",
              "result_log",
              "action",
              "action_log",
              "session",
              "note",
              "habit_log"
            ]
          },
          "id": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
            "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
          }
        },
        "required": [
          "entity",
          "id"
        ],
        "additionalProperties": false
      }
    },
    "continuations": {
      "type": "object",
      "propertyNames": {
        "type": "string",
        "enum": [
          "cycles",
          "objectives",
          "results",
          "actions",
          "notes",
          "sessions",
          "result_logs",
          "habit_logs",
          "action_logs",
          "trend"
        ]
      },
      "additionalProperties": {
        "type": "string",
        "minLength": 1
      }
    }
  },
  "required": [
    "record",
    "changed",
    "continuations"
  ],
  "additionalProperties": false
}
Public MCP input/output shapes for comparison
[
  {
    "tool": "user_update",
    "collection": "user",
    "specification": "docs/feature-specs/F1-identity.md#mcp-source-mapping--selected-target",
    "operation": "call",
    "binding": "planned",
    "mode": "adapted",
    "readiness": "contract-only",
    "services": [
      "user.update"
    ],
    "gap": null,
    "projection": "Project permitted coaching profile only; user_update additionally requires MCP entitlement.",
    "input": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "name": {
          "description": "Chosen coaching/display name; use verbatim. Omit to preserve, empty text clears it.",
          "type": "string"
        },
        "about_me": {
          "description": "UI label: About me. Coaching context; omit to preserve, empty text clears it, null is invalid.",
          "type": "string",
          "maxLength": 4000
        },
        "timezone": {
          "type": "string",
          "description": "UI label: Time zone. IANA zone used for calendar dates and boundaries."
        }
      },
      "additionalProperties": false
    },
    "output": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "type": "object",
      "properties": {
        "profile": {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
              "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
            },
            "name": {
              "type": "string",
              "description": "Chosen coaching/display name, used verbatim. Target UI prompt: What should we call you? Empty means unknown; no separate surname."
            },
            "about_me": {
              "type": "string",
              "description": "UI label: About me."
            },
            "timezone": {
              "type": "string",
              "minLength": 1,
              "description": "UI label: Time zone. IANA zone used for calendar dates and boundaries."
            }
          },
          "required": [
            "id",
            "name",
            "about_me",
            "timezone"
          ],
          "additionalProperties": false
        },
        "changed": {
          "maxItems": 100,
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "entity": {
                "type": "string",
                "enum": [
                  "user",
                  "cycle",
                  "objective",
                  "result",
                  "result_log",
                  "action",
                  "action_log",
                  "session",
                  "note",
                  "habit_log"
                ]
              },
              "id": {
                "type": "string",
                "format": "uuid",
                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
                "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
              }
            },
            "required": [
              "entity",
              "id"
            ],
            "additionalProperties": false
          }
        }
      },
      "required": [
        "profile",
        "changed"
      ],
      "additionalProperties": false
    }
  }
]
user.delete · delete · contract-only

Feature declaration: deleteUser

Requirement: docs/feature-specs/F1-identity.md · Access: account-management

Tables: user (delete) · External system: stripe

Trusted context: authenticated actor

Retry: Inspect state after uncertain outcomes; never infer rollback from a response failure.

Expected errors: UNAUTHORIZED, BAD_REQUEST, FORBIDDEN, NOT_FOUND, CONFLICT, NOT_IMPLEMENTED, INTERNAL_SERVER_ERROR

API consumers

[
  {
    "operation": "user.delete",
    "service": "user.delete",
    "binding": "bound"
  }
]

MCP consumers

[]

Service input

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "password": {
      "type": "string",
      "minLength": 1
    }
  },
  "required": [
    "password"
  ],
  "additionalProperties": false
}

Service output

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "Owned record UUID from fresh tool results or user-selected context. Never invent an ID; clarify ambiguous targets."
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}
Public MCP input/output shapes for comparison
[]
billing.create_checkout_session · external · contract-only

Feature declaration: createCheckoutSession

Requirement: docs/feature-specs/F1-identity.md · Access: account-management

Tables: user (read), subscription (read) · External system: stripe

Trusted context: authenticated actor

Retry: Inspect state after uncertain outcomes; never infer rollback from a response failure.

Expected errors: UNAUTHORIZED, BAD_REQUEST, FORBIDDEN, NOT_FOUND, CONFLICT, NOT_IMPLEMENTED, INTERNAL_SERVER_ERROR

API consumers

[
  {
    "operation": "billing.create_checkout_session",
    "service": "billing.create_checkout_session",
    "binding": "bound"
  }
]

MCP consumers

[]

Service input

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {},
  "additionalProperties": false
}

Service output

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "url": {
      "type": "string",
      "format": "uri"
    }
  },
  "required": [
    "url"
  ],
  "additionalProperties": false
}
Public MCP input/output shapes for comparison
[]
billing.create_portal_session · external · contract-only

Feature declaration: createBillingPortalSession

Requirement: docs/feature-specs/F1-identity.md · Access: account-management

Tables: user (read) · External system: stripe

Trusted context: authenticated actor

Retry: Inspect state after uncertain outcomes; never infer rollback from a response failure.

Expected errors: UNAUTHORIZED, BAD_REQUEST, FORBIDDEN, NOT_FOUND, CONFLICT, NOT_IMPLEMENTED, INTERNAL_SERVER_ERROR

API consumers

[
  {
    "operation": "billing.create_portal_session",
    "service": "billing.create_portal_session",
    "binding": "bound"
  }
]

MCP consumers

[]

Service input

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {},
  "additionalProperties": false
}

Service output

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "url": {
      "type": "string",
      "format": "uri"
    }
  },
  "required": [
    "url"
  ],
  "additionalProperties": false
}
Public MCP input/output shapes for comparison
[]
billing.get_details · external · contract-only

Feature declaration: getBillingDetails

Requirement: docs/feature-specs/F1-identity.md · Access: account-management

Tables: subscription (read) · External system: stripe

Trusted context: authenticated actor

Retry: Inspect state after uncertain outcomes; never infer rollback from a response failure.

Expected errors: UNAUTHORIZED, BAD_REQUEST, FORBIDDEN, NOT_FOUND, CONFLICT, NOT_IMPLEMENTED, INTERNAL_SERVER_ERROR, SERVICE_UNAVAILABLE

API consumers

[
  {
    "operation": "billing.get_details",
    "service": "billing.get_details",
    "binding": "bound"
  }
]

MCP consumers

[]

Service input

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {},
  "additionalProperties": false
}

Service output

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "plan": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "name": {
              "type": "string",
              "minLength": 1,
              "description": "UI label: Plan. Provider-backed name of the selected plan."
            },
            "amount_minor": {
              "type": "integer",
              "minimum": 0,
              "maximum": 9007199254740991,
              "description": "UI label: Price. Recurring plan amount in the currency minor unit; not an invoice total or a tax/credit promise."
            },
            "currency": {
              "type": "string",
              "pattern": "^[A-Z]{3}$",
              "description": "Three-letter currency code, upper case."
            },
            "interval": {
              "type": "string",
              "const": "month",
              "description": "One monthly plan only."
            },
            "interval_count": {
              "type": "number",
              "const": 1
            }
          },
          "required": [
            "name",
            "amount_minor",
            "currency",
            "interval",
            "interval_count"
          ],
          "additionalProperties": false,
          "description": "The selected subscription plan, read from the billing provider."
        },
        {
          "type": "null"
        }
      ],
      "description": "Null when the account has no subscription (shown as No subscription)."
    },
    "payment_method": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "display": {
              "type": "string",
              "minLength": 1,
              "description": "UI label: Payment method. Display text only, for example Visa ending in 4242; never a full number, token or provider object."
            }
          },
          "required": [
            "display"
          ],
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ],
      "description": "Null when no payment method applies (shown as No payment method); never a provider failure."
    },
    "retrieved_at": {
      "type": "string",
      "format": "date-time",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
      "description": "When these display details were fetched; not a subscription event ordering token."
    }
  },
  "required": [
    "plan",
    "payment_method",
    "retrieved_at"
  ],
  "additionalProperties": false,
  "description": "Settings billing details. Display only: never grants or denies entitlement and is never persisted."
}
Public MCP input/output shapes for comparison
[]