Besprechung als eigenes Mittel: Termin, Tagesordnung, eine Runde je Teilnehmer, Protokoll (#686)

Aufgabentyp meeting mit Teilnehmerliste (Frontmatter, SQLite, Taskboard-Werkzeug,
WebUI). MeetingRunner: jeder Teilnehmer einmal in Reihenfolge, Beitraege
gerahmt als Daten des Verfassers, danach schliesst die Leitung mit Ergebnis und
Aufgaben. Protokoll schreibt die Instanz in den Bereich der Einheit der Leitung.
Teilnehmer nur aus dem Adressbuch der Leitung, hoechstens 12.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Richard
2026-09-28 13:12:13 +02:00
co-authored by Claude Opus 5.5
parent 2df2fc476f
commit f2bf8b5b59
19 changed files with 684 additions and 25 deletions
+6 -2
View File
@@ -163,7 +163,9 @@ public sealed record TaskDto(
// #717: fill work — a deadline instead of an appointment — and the author's estimate per run.
DateTime? FillBy = null,
decimal? EstimateUsd = null,
DateTime? FillAlertedAt = null);
DateTime? FillAlertedAt = null,
// #686: a meeting's participants, in order.
IReadOnlyList<string>? Participants = null);
/// <summary>#713: A personal MCP token as listed — never the token itself.</summary>
public sealed record McpTokenDto(
@@ -251,7 +253,9 @@ public sealed record TaskInputDto(
int Priority = 3,
string? ParentId = null,
string? FillBy = null,
decimal? EstimateUsd = null);
decimal? EstimateUsd = null,
// #686: given, the task is a meeting chaired by the assignee.
IReadOnlyList<string>? Participants = null);
/// <summary>Die Kostenprognose einer Instanz (#595).</summary>
public sealed record ForecastDto(
+4 -2
View File
@@ -133,7 +133,8 @@ internal static class Mapping
input.Priority,
input.ParentId ?? "",
input.FillBy,
input.EstimateUsd);
input.EstimateUsd,
input.Participants);
public static ForecastDto ToDto(this InstanzPrognose prognose)
=> new(
@@ -185,7 +186,8 @@ internal static class Mapping
OriginTaskId: string.IsNullOrWhiteSpace(task.OriginTaskId) ? null : task.OriginTaskId,
FillBy: task.IsFillWork ? task.FillBy : null,
EstimateUsd: task.EstimateUsd,
FillAlertedAt: task.FillAlertedAt);
FillAlertedAt: task.FillAlertedAt,
Participants: task.Participants.Count > 0 ? task.Participants : null);
/// <summary>#684: The board of a task, for a list the human sees whole.</summary>
public static TaskDto WithBoard(this TaskDto dto, TaskItem task, Core.Organisation.OrgChart org)