Entwicklung: aus einer Beobachtung wird ein Schritt
Filipe: "ich will die noch viel besser, perfektionniert, viel geiler und krasser. es soll so einfach wie moeglich sein fuer jeden." Die Karte konnte bisher genau eines: festhalten, dass etwas hakt -- mit Anlass, das war schon richtig. Danach passierte nichts. Beim naechsten Oeffnen stand dieselbe Beobachtung da, nur aelter. Die Quellen zur laufenden Entwicklungsbegleitung sagen zweierlei: weg von der Bewertung, hin zum Gespraech -- und ein Entwicklungsplan wirkt dann, wenn er an einer ECHTEN Aufgabe haengt. Nicht "daran arbeiten wir", sondern etwas mit Verantwortlichem und Frist. Also: An einem Punkt, der hakt, steht ein Knopf. Er legt eine Aufgabe auf dem Brett an -- Titel = der Punkt, der Anlass wandert in die Beschreibung (ohne ihn waere es ein Vorwurf), verantwortlich ist der Mensch selbst, Frist in 14 Tagen. Die Karte zeigt danach, dass ein Schritt laeuft, und verweist auf ihn. UND DANN SCHLIESST SICH DER KREIS: Ist der Schritt erledigt, sagt die Karte das und bittet, noch einmal hinzusehen. Das ist der Rhythmus, den die Quellen meinen -- keine Bewertung einmal im Jahr, sondern eine Runde, die zu Ende geht. Danach geht derselbe Punkt wieder. Die Riegel: nur aus dem EIGENEN "da hakt es" (aus dem eines anderen hiesse, in seinem Namen zu handeln), nur ein offener Schritt je Punkt, nur Leitung, und ein Punkt aus Block 5 sieht von aussen aus wie ein erfundener. Im Protokoll steht, DASS -- nie der Anlass. NEBENBEFUND, beim Uebernehmen der Schreibweise gefunden: aufgaben.html #a<nummer> stand an DREI Stellen im Haus (bereich.js, report.js, jetzt die Entwicklungskarte) und wurde von keiner gelesen -- das Brett kannte nur ?zeigen=, und eine Karte mit ihrer Nummer als Anker gab es nicht. Wer draufdrueckte, landete auf dem Brett und suchte von Hand. Jetzt tragen die Karten ihre Nummer, und das Brett hebt genau die eine hervor. Alle drei Verweise funktionieren damit. Und was die Pruefung an sich selbst gefunden hat: Ich habe die rechte Hand ueber die Adresse von DogFather gerufen. Sie bekam 401 -- und WEIL sie nichts setzen konnte, ging ein zweiter Test aus dem falschen Grund durch. Ein gruener Haken ueber einer Leere. server/pruef-schritt.mjs 46 Pruefungen, 0 Fehler (Port 4421) pruef-uebergang 61, pruef-nachwuchs 123, pruef-entwicklung 43, pruef-uebernahme 39, pruef-aufgabenbrett, pruef-css-klassen -- 0 Fehler Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
@@ -578,3 +578,35 @@
|
||||
display: flex; flex-wrap: wrap; gap: 9px; margin: 13px 0 0;
|
||||
}
|
||||
.t-uebergang__aendern { margin: 11px 0 0; }
|
||||
|
||||
/* =====================================================================
|
||||
AUS DER BEOBACHTUNG WIRD EIN SCHRITT (15.09.2026)
|
||||
|
||||
Die Zeile steht ganz unten an einem Punkt und ist absichtlich leise:
|
||||
Sie ist kein zweites Ergebnis neben den vier Knöpfen, sondern das,
|
||||
was aus einem von ihnen folgt. Bei einem Punkt, der läuft, ist sie
|
||||
gar nicht da — leer und ohne Rand, nicht als leerer Kasten.
|
||||
===================================================================== */
|
||||
.e-schritt {
|
||||
display: flex; flex-wrap: wrap; align-items: baseline; gap: 9px;
|
||||
margin: 9px 0 0;
|
||||
}
|
||||
.e-schritt:not([data-lage]) { display: none; }
|
||||
.e-schritt[data-lage] {
|
||||
padding: 8px 11px;
|
||||
background: rgba(0, 0, 0, .22);
|
||||
border: 1px solid var(--rand);
|
||||
border-left: 2px solid var(--rand-hell);
|
||||
}
|
||||
.e-schritt[data-lage="laeuft"] { border-left-color: color-mix(in srgb, #8ec9ff 50%, transparent); }
|
||||
.e-schritt[data-lage="durch"] { border-left-color: color-mix(in srgb, #668e6e 60%, transparent); }
|
||||
|
||||
.e-schritt__was {
|
||||
font-size: .72rem; letter-spacing: .05em; text-transform: uppercase;
|
||||
color: var(--text-still);
|
||||
}
|
||||
.e-schritt__hin { font-size: .84rem; color: var(--text); }
|
||||
.e-schritt__frist, .e-schritt__satz {
|
||||
font-size: .79rem; color: var(--text-leise);
|
||||
}
|
||||
.e-schritt__knopf { margin: 0; }
|
||||
|
||||
@@ -171,6 +171,9 @@
|
||||
function karte(a) {
|
||||
const k = el('article', 'karte');
|
||||
k.dataset.prio = a.prioritaet;
|
||||
/* DIE NUMMER AN DER KARTE. Ohne sie kann kein Verweis auf eine
|
||||
EINZELNE Aufgabe zeigen -- und drei davon gibt es im Haus. */
|
||||
k.dataset.id = String(a.id);
|
||||
|
||||
const kopf = el('div', 'karte__kopf');
|
||||
kopf.append(el('h3', 'karte__titel', a.titel));
|
||||
@@ -679,6 +682,21 @@
|
||||
};
|
||||
|
||||
function sprungZeigen() {
|
||||
/* EINE EINZELNE AUFGABE, ueber `#a<nummer>` in der Adresse.
|
||||
|
||||
Sie steht VOR der Auswertung von `?zeigen=`, weil sie genauer
|
||||
ist: Wer eine bestimmte Aufgabe meint, meint nicht ihre Spalte.
|
||||
|
||||
Die Nummer kommt aus dem Anker und nicht aus `?zeigen=`, weil
|
||||
das Brett von drei Stellen aus so verlinkt wird -- und die
|
||||
Schreibweise war schon da, nur gelesen hat sie niemand. */
|
||||
const einzeln = /^#a(\d+)$/.exec(location.hash || "");
|
||||
if (einzeln) {
|
||||
const k = document.querySelector(`.karte[data-id="${einzeln[1]}"]`);
|
||||
window.zielMarkieren?.(k ? [k] : [], 'Diese eine Aufgabe');
|
||||
return;
|
||||
}
|
||||
|
||||
const was = window.zielSchluessel?.();
|
||||
if (!was || !ZEIG_TEXT[was]) return;
|
||||
|
||||
|
||||
@@ -241,9 +241,89 @@
|
||||
z.append(el('p', 'e-punkt__wann',
|
||||
`von dir am ${datum(pt.meins.am)}${pt.meins.verblasst ? ' – älter als 90 Tage' : ''}`));
|
||||
}
|
||||
|
||||
/* ==== AUS DER BEOBACHTUNG WIRD EIN SCHRITT (15.09.2026) ==========
|
||||
|
||||
Bis heute konnte diese Zeile genau eines: festhalten, dass etwas
|
||||
hakt. Danach passierte nichts — beim nächsten Öffnen stand
|
||||
dieselbe Beobachtung da, nur älter.
|
||||
|
||||
Ein Entwicklungsplan wirkt dann, wenn er an einer ECHTEN Aufgabe
|
||||
hängt. Also wird aus „da hakt es" eine Aufgabe auf dem Brett,
|
||||
mit Verantwortlichem und Frist — und wenn sie erledigt ist,
|
||||
fragt die Karte dieselbe Frage noch einmal. Das ist der Kreis.
|
||||
============================================================== */
|
||||
z.append(schrittZeile(personId, pt));
|
||||
return z;
|
||||
}
|
||||
|
||||
const SCHRITT_ABSAGE = {
|
||||
kein_hakt: 'Ein Schritt entsteht aus „Da hakt es“ – setz das zuerst.',
|
||||
schon_da: 'Dazu läuft schon ein Schritt.',
|
||||
};
|
||||
|
||||
function schrittZeile(personId, pt) {
|
||||
const s = pt.schritt;
|
||||
const zeile = el('div', 'e-schritt');
|
||||
|
||||
/* ---- Es läuft schon etwas ---- */
|
||||
if (s && s.status !== 'erledigt' && s.status !== 'abgebrochen') {
|
||||
zeile.dataset.lage = 'laeuft';
|
||||
zeile.append(el('span', 'e-schritt__was', 'Schritt läuft'));
|
||||
const a = el('a', 'e-schritt__hin', s.titel);
|
||||
/* DIE SCHREIBWEISE DES HAUSES: `#a<nummer>`. Das Brett springt
|
||||
damit wirklich zu der Aufgabe -- `?a=` hatte ich erfunden, und
|
||||
das Brett liest es nicht. Ein Verweis, der nur die Seite
|
||||
oeffnet und nichts zeigt, ist schlechter als keiner. */
|
||||
a.href = 'aufgaben.html#a' + s.id;
|
||||
zeile.append(a);
|
||||
if (s.frist) zeile.append(el('span', 'e-schritt__frist', `bis ${datum(s.frist)}`));
|
||||
return zeile;
|
||||
}
|
||||
|
||||
/* ---- Er ist durch: dieselbe Frage noch einmal ----
|
||||
DAS IST DER EIGENTLICHE GEWINN. Ohne diesen Satz wäre der Schritt
|
||||
nur eine Aufgabe mehr; mit ihm wird aus der Beobachtung eine
|
||||
Runde, die zu Ende geht. */
|
||||
if (s && s.status === 'erledigt') {
|
||||
zeile.dataset.lage = 'durch';
|
||||
zeile.append(el('span', 'e-schritt__was', 'Schritt erledigt'));
|
||||
zeile.append(el('span', 'e-schritt__satz',
|
||||
s.erledigt_am
|
||||
? `am ${datum(s.erledigt_am)} – sieh noch einmal hin und setz neu.`
|
||||
: 'Sieh noch einmal hin und setz neu.'));
|
||||
return zeile;
|
||||
}
|
||||
|
||||
/* ---- Noch keiner: aber nur aus einem „da hakt es" ----
|
||||
Der Knopf steht NUR dort. Ein Knopf, der überall steht und fast
|
||||
überall „geht nicht" antwortet, ist schlechter als keiner. */
|
||||
if (pt.meins?.stufe !== 'hakt') return zeile;
|
||||
|
||||
zeile.dataset.lage = 'offen';
|
||||
const b = el('button', 'schritt e-schritt__knopf', 'Daraus einen Schritt machen');
|
||||
b.type = 'button';
|
||||
b.title = 'Legt eine Aufgabe auf dem Brett an – mit dieser Person als '
|
||||
+ 'Verantwortlicher und einer Frist in zwei Wochen.';
|
||||
b.addEventListener('click', async () => {
|
||||
b.disabled = true;
|
||||
const a = await hole(
|
||||
`/workspace/api/entwicklung/person/${personId}/${pt.schluessel}/schritt`,
|
||||
{ method: 'POST', headers: { 'Content-Type': 'application/json' }, body: '{}' });
|
||||
b.disabled = false;
|
||||
if (!a.ok) {
|
||||
const j = await a.json().catch(() => ({}));
|
||||
melde(SCHRITT_ABSAGE[j.fehler] || 'Ging nicht.');
|
||||
return;
|
||||
}
|
||||
const neu = await a.json();
|
||||
melde(`Steht auf dem Aufgabenbrett: „${neu.titel}“, bis ${datum(neu.frist)}.`);
|
||||
await karte(personId);
|
||||
});
|
||||
zeile.append(b);
|
||||
return zeile;
|
||||
}
|
||||
|
||||
/* ---- Deine eigene Karte -----------------------------------------------
|
||||
|
||||
WAS HIER STEHT UND WAS NICHT: die Antworten, nicht die Namen, und
|
||||
|
||||
Reference in New Issue
Block a user