80c008f076
Testy / Testy warstwy logicznej (silnik) (push) Successful in 10m52s
Testy / Build obrazu silnika B (swisseph) (push) Failing after 1m8s
Testy / Kontrola składni wszystkich warstw (push) Successful in 1m21s
Testy / Testy warstwy logicznej (silnik) (pull_request) Successful in 11m14s
Testy / Build obrazu silnika B (swisseph) (pull_request) Failing after 29s
Testy / Kontrola składni wszystkich warstw (pull_request) Successful in 20s
Pierwszy krok ustalonej kolejnosci: prompt z podgladem, uzyteczny od razu BEZ integracji API (ta przyjdzie w LOG-31). LOG-29 — app/prompt.py: - profil natal (ekran Interpretacje) i period (ekran Kalendarz), - prompt po polsku: zadanie -> dane horoskopu (pozycje, osie, Lots, aspekty, sekta, zodiak) -> wskazania z baz wg wagi -> instrukcje -> zastrzezenie, - twarde reguly: kazda teza musi cytowac konkretny sygnifikator, zakaz wychodzenia poza dostarczone dane, jawne wskazanie sprzecznosci, - deterministyczny: ten sam horoskop + budzet = ten sam prompt. LOG-30 — redukcja do budzetu (concise/medium/extensive): dedup -> grupowanie z licznikiem -> sortowanie wg punktacji sily (LOG-21) -> obciecie ogona (jednostka = CALE wskazanie) -> skracanie dlugich opisow. Statystyki zwracaja ile weszlo/pominieto i jaki byl prog — takze w tresci promptu, zeby model wiedzial, ze widzi wybor. POST /chart/prompt — zwraca sam prompt + statystyki, bez wolania modelu. Prezentacja: przycisk „Generuj prompt (AI)" na obu ekranach, wybor budzetu, pole z promptem + kopiowanie (z fallbackiem dla http bez secure context). WAZNE (znalezione przy tescie e2e): padnieta warstwa danych zabiera tylko wskazania — horoskop i OS CZASU zostaja, bo sa czysto obliczeniowe. Wczesniej blad bazy gubil cala osie czasu, czyniac prognoze okresowa bezuzyteczna. Zabezpieczone testem. Testy: 19 nowych, calosc 118 passed / 1 skipped. Zweryfikowane e2e w przegladarce: profil natal (3340 znakow) i period (15 zdarzen, 4728 znakow). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
32 lines
1.1 KiB
JavaScript
32 lines
1.1 KiB
JavaScript
// Kopiowanie do schowka dla przycisków [data-copy="#selektor"].
|
|
// clipboard API wymaga secure context (https/localhost), a aplikacja bywa serwowana
|
|
// po http://<ip> — dlatego jest awaryjne przejście na zaznaczenie + execCommand.
|
|
document.addEventListener('click', function (e) {
|
|
const btn = e.target.closest('[data-copy]');
|
|
if (!btn) return;
|
|
|
|
const src = document.querySelector(btn.getAttribute('data-copy'));
|
|
if (!src) return;
|
|
|
|
const done = ok => {
|
|
const label = btn.textContent;
|
|
btn.textContent = ok ? 'Skopiowano ✓' : 'Nie udało się — zaznacz i skopiuj ręcznie';
|
|
setTimeout(() => { btn.textContent = label; }, 2500);
|
|
};
|
|
|
|
const text = src.value !== undefined ? src.value : src.textContent;
|
|
|
|
if (navigator.clipboard && window.isSecureContext) {
|
|
navigator.clipboard.writeText(text).then(() => done(true), () => done(false));
|
|
return;
|
|
}
|
|
// awaryjnie: zaznacz zawartość i spróbuj starym poleceniem
|
|
try {
|
|
src.focus();
|
|
if (src.select) src.select();
|
|
done(document.execCommand('copy'));
|
|
} catch (err) {
|
|
done(false);
|
|
}
|
|
});
|