chore: "Buch"-Erwähnungen aus UI & Kommentaren entfernen
ci / quality (push) Failing after 36s
ci / build (push) Has been skipped
deploy / deploy (push) Successful in 1m11s

User-sichtbare Hinweise (Meilenstein-Mindestanzahl, Stakeholder-Empty,
Freitags-Warnung) ohne Quellenangabe umformuliert; Dev-Kommentare von
"Buch Kap. X" auf "Leitfaden" geändert.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
dejanandClaude Opus 4.8 committed 2026-06-06 19:49:39 +02:00
1 parent d8a224d5af
commit 390a99bf5e
5 files changed
+14 -14

No files matched your search

+2 -2
View File
@@ -236,7 +236,7 @@ export const projectRouter = router({
return updated;
}),
// Projekt-Modus setzen (Buch Kap. 4): muss jederzeit ans Team kommuniziert sein.
// Projekt-Modus setzen (Leitfaden): muss jederzeit ans Team kommuniziert sein.
setModus: protectedProcedure
.input(ProjectSchemas.setModusInput)
.mutation(async ({ ctx, input }) => {
@@ -286,7 +286,7 @@ export const projectRouter = router({
order: existing.length,
})
.returning();
// Pflicht-Minimum-Punkt „Meilensteine" nachziehen (Buch: mind. 2).
// Pflicht-Minimum-Punkt „Meilensteine" nachziehen (Leitfaden: mind. 2).
const p = (
await ctx.db.select().from(project).where(eq(project.id, input.projectId)).limit(1)
)[0];
+2 -2
View File
@@ -96,14 +96,14 @@ export const CHANGE_ENTSCHEIDUNG_META: Record<ChangeEntscheidung, { label: strin
};
export const CHANGE_ENTSCHEIDUNGEN: ChangeEntscheidung[] = ['offen', 'genehmigt', 'abgelehnt'];
// Datums-Warnungen nach Buch-Regeln (keine Meilensteine Freitag / vor Feiertagen).
// Datums-Warnungen (keine Meilensteine Freitag / vor Feiertagen).
export function dateWarnings(iso: string | null | undefined): string[] {
if (!iso) return [];
const d = new Date(`${iso}T00:00:00`);
if (Number.isNaN(d.getTime())) return [];
const out: string[] = [];
const wd = d.getDay(); // 0=So .. 6=Sa
if (wd === 5) out.push('Fällt auf einen Freitag — Buch-Regel: keine Meilensteine/Abgaben freitags.');
if (wd === 5) out.push('Fällt auf einen Freitag — besser keine Meilensteine/Abgaben freitags.');
if (wd === 0 || wd === 6) out.push('Fällt aufs Wochenende.');
const month = d.getMonth();
const day = d.getDate();
+4 -4
View File
@@ -215,7 +215,7 @@ export function ProjektRoute() {
);
}
// --- Modus (Buch Kap. 4: jederzeit ans Team kommuniziert) -------------------
// --- Modus (Leitfaden: jederzeit ans Team kommuniziert) ---------------------
function ModusControl({ projectId, modus }: { projectId: string; modus: ProjectModus }) {
const utils = trpc.useUtils();
const set = trpc.project.setModus.useMutation({
@@ -849,8 +849,8 @@ function StakeholdersSection({ projectId }: { projectId: string }) {
{list.length > 0 && <StakeholderMatrix list={list} />}
{list.length === 0 && !adding && (
<p className="text-sm text-[var(--color-ink-muted)]">
Noch keine Stakeholder erfasst. Buch: alle, die auch nur entfernt mit dem Projekt zu
tun haben, haben Interessen, Macht und Einfluss.
Noch keine Stakeholder erfasst. Alle, die auch nur entfernt mit dem Projekt zu tun
haben, haben Interessen, Macht und Einfluss.
</p>
)}
<div className="space-y-2">
@@ -1602,7 +1602,7 @@ function MilestonesSection({
{milestones.length < 2 && (
<p className="mb-2 flex items-start gap-1.5 text-xs text-[var(--color-ampel-amber-fg)]">
<AlertTriangle size={13} className="mt-0.5 shrink-0" />
Buch-Regel: jedes Projekt hat mindestens 2 Meilensteine (Anfang & Ende).
Jedes Projekt sollte mindestens 2 Meilensteine haben (Anfang & Ende).
</p>
)}
<Card.Root>
+5 -5
View File
@@ -125,7 +125,7 @@ export const project = pgTable(
.references(() => area.id, { onDelete: 'restrict' }),
name: text('name').notNull(),
description: text('description'),
// Maxime / roter Faden (ein Satz) — Leitsatz fürs ganze Team (Buch Kap. 4 Strategie).
// Maxime / roter Faden (ein Satz) — Leitsatz fürs ganze Team (Leitfaden: Strategie).
maxime: text('maxime'),
// Definition (Leitfaden Phase 1) — Kurzfassung; Volltext-Steckbrief lebt in Outline.
ziel: text('ziel'), // SMART formuliert
@@ -138,7 +138,7 @@ export const project = pgTable(
onDelete: 'set null',
}),
arbeitsmodus: text('arbeitsmodus', { enum: ['cycle', 'kanban'] }),
// Projekt-Modus / Intensität — muss laut Buch jederzeit ans Team kommuniziert sein.
// Projekt-Modus / Intensität — muss laut Leitfaden jederzeit ans Team kommuniziert sein.
modus: text('modus', { enum: ['relax', 'standard', 'eskalation', 'taskforce'] })
.notNull()
.default('standard'),
@@ -192,7 +192,7 @@ export const milestone = pgTable(
.notNull()
.default('open'),
description: text('description'),
// Ergebnis-Übersicht („Patchnotes") + konkreter Kundennutzen je Meilenstein (Buch Kap. 4).
// Ergebnis-Übersicht („Patchnotes") + konkreter Kundennutzen je Meilenstein (Leitfaden).
ergebnis: text('ergebnis'),
kundennutzen: text('kundennutzen'),
order: integer('order').notNull().default(0),
@@ -601,7 +601,7 @@ export const leadTouchpoint = pgTable(
);
// ----------------------------------------------------------------------------
// stakeholder — Stakeholder-Analyse pro Projekt (Buch Kap. 4). Interesse ×
// stakeholder — Stakeholder-Analyse pro Projekt (Leitfaden). Interesse ×
// Einfluss ergibt die Macht/Interesse-Matrix; Haltung = Grundeinstellung.
// ----------------------------------------------------------------------------
export const stakeholder = pgTable(
@@ -635,7 +635,7 @@ export const stakeholder = pgTable(
);
// ----------------------------------------------------------------------------
// risk — Risiko- & Chancen-Register pro Projekt (Buch Kap. 4). `kind`
// risk — Risiko- & Chancen-Register pro Projekt (Leitfaden). `kind`
// unterscheidet Gefahr vs. Chance. Showstopper = bringt das Projekt zum Stillstand.
// ----------------------------------------------------------------------------
export const risk = pgTable(
+1 -1
View File
@@ -85,7 +85,7 @@ export const setMilestoneStatusInput = z.object({
});
export type SetMilestoneStatusInput = z.infer<typeof setMilestoneStatusInput>;
// --- Projekt-Modus (Buch Kap. 4 Strategie) ---------------------------------
// --- Projekt-Modus (Leitfaden: Strategie) ---------------------------------
export const projectModusSchema = z.enum(['relax', 'standard', 'eskalation', 'taskforce']);
export const PROJECT_MODI = projectModusSchema.options;
export const setModusInput = z.object({